Module 1Maîtriser le langage de programmation procédurale sous MySQL
Chapitre 1 sur 12
Rappeler le langage de manipulation des données (SQL)
Le LDD (CREATE, ALTER, DROP), les requêtes SELECT et les jointures, les vues, les tables temporaires et le LMD (INSERT, UPDATE, DELETE).
- ≈ 105 min
- 3 leçons
- 9 vidéos
- 3 exercices
- TP
Objectifs
Avec ce chapitre, tu sauras…
- créer et supprimer une base et une table (LDD :
CREATE,DROP,ALTER) ; - interroger les données avec
SELECT: filtre, tri, jointure ; - enregistrer une requête dans une vue ;
- utiliser une table temporaire ;
- ajouter, modifier et supprimer des lignes (LMD :
INSERT,UPDATE,DELETE).
Le SQL se découpe en familles d'instructions :
| Famille | Rôle | Instructions |
|---|---|---|
| LDD (Langage de Définition de Données) | créer la structure : bases, tables, colonnes | CREATE, ALTER, DROP |
| LID (Langage d'Interrogation de Données) | lire les données | SELECT |
| LMD (Langage de Manipulation de Données) | modifier les données | INSERT, UPDATE, DELETE |
Leçon 1
Le langage de définition de données (LDD)
Créer et supprimer une base de données
CREATE DATABASE nom_de_la_base;
CREATE DATABASE eshop_app_db;
DROP DATABASE nom_de_la_base;
DROP DATABASE `eshop_app_db`;Les accents graves ` entourent un nom de base, de table ou de colonne. Ils sont obligatoires seulement si le nom contient un espace ou un mot réservé.
Créer une table
USE nom_de_la_base;
CREATE TABLE nom_de_la_table (
nom_champ1 type_champ1(longueur) attributs,
nom_champ2 type_champ2(longueur) attributs, ...
type_clé1 nom_clé1,
type_clé2 nom_clé2, ...
)
ENGINE = moteur_bd;CREATE TABLE clients (
id INT NOT NULL AUTO_INCREMENT,
nom CHAR(50) NOT NULL,
prenom CHAR(40),
date_naissance DATE,
adresse VARCHAR(50) DEFAULT 'Agadir',
PRIMARY KEY (id)
)
ENGINE = InnoDB;| Élément | Signification |
|---|---|
INT, CHAR(50), VARCHAR(50), DATE | le type de la colonne (entier, texte de longueur fixe, texte de longueur variable, date) |
NOT NULL | la colonne est obligatoire |
AUTO_INCREMENT | MySQL donne lui-même la valeur suivante (1, 2, 3…) |
DEFAULT 'Agadir' | la valeur mise si on n'en donne pas |
PRIMARY KEY (id) | la clé primaire : identifie chaque ligne de façon unique |
ENGINE = InnoDB | le moteur de stockage. InnoDB gère les transactions et les clés étrangères (chapitre 5) |
Remarque : pour créer une table qui a la même structure qu'une autre (les données ne sont pas copiées) :
CREATE TABLE nouvelle_table LIKE ancienne_table;Vidéo · À regarder
FRBase de données : MySQL et le langage de définition des données
Algomius · YouTube
Ce que tu vas voir (7 min) : les chapitres « Création de table - CREATE », « Types de colonne », « Suppression de table - DROP ». Le formateur crée une table avec CREATE TABLE, présente les types de colonnes, supprime la table avec DROP, puis refait la même chose dans MySQL Workbench.
Vidéo · À regarder
FRBase de données : MySQL et le langage de définition des données
Algomius · YouTube
Ce que tu vas voir (18 min) : les chapitres « Clé primaire », « Colonne auto-incrémentale », « Clé étrangère ». Il ajoute une clé primaire, une colonne AUTO_INCREMENT et une clé étrangère : les attributs de la table clients.
Supprimer une table
L'instruction DROP TABLE supprime une table existante (sa structure et ses données) :
DROP TABLE nom_table;
DROP TABLE `clients`;Modifier une table
L'instruction ALTER TABLE ajoute, supprime ou modifie des colonnes d'une table existante. Elle ajoute ou supprime aussi des contraintes.
ALTER TABLE clients
ADD Email varchar(255); -- ajouter une colonne
ALTER TABLE clients
ADD pays VARCHAR(50),
ADD sexe VARCHAR(20) AFTER prenom; -- ajouter deux colonnes, sexe après prenom
ALTER TABLE clients
MODIFY COLUMN date_naissance int; -- changer le type d'une colonne
ALTER TABLE clients CHANGE COLUMN adresse ville
VARCHAR(100) NOT NULL; -- renommer ET changer le type
ALTER TABLE clients
DROP COLUMN pays; -- supprimer une colonne
ALTER TABLE commandes
RENAME TO achats; -- renommer la table
DESCRIBE clients; -- afficher la structure| Clause | Effet |
|---|---|
ADD | ajoute une colonne (AFTER col pour la placer) |
MODIFY COLUMN | change le type ou les attributs, garde le nom |
CHANGE COLUMN ancien nouveau type | change le nom et le type |
DROP COLUMN | supprime la colonne |
RENAME TO | renomme la table |
DESCRIBE nom_table; affiche la structure de la table (colonnes, types, clés).
Vidéo · À regarder
FRBase de données : MySQL et le langage de définition des données
Algomius · YouTube
Ce que tu vas voir (4 min) : les chapitres « Modification de table - ALTER ». Il modifie une table existante avec ALTER TABLE (ajouter, modifier, supprimer une colonne).
Leçon 2
Le langage d'interrogation de données (LID)
Sélectionner des données
SELECT [ { DISTINCT | DISTINCTROW } | ALL ] listeColonnes
FROM nomTable1 [,nomTable2]...
[ WHERE condition ]
[ clauseRegroupement ]
[ HAVING condition ]
[ clauseOrdonnancement ]
[ LIMIT clause_limitation ];Les crochets [ ] signifient optionnel. * à la place des noms de colonnes sélectionne toutes les colonnes.
| Clause | Rôle |
|---|---|
DISTINCT | supprime les doublons |
WHERE | filtre les lignes |
GROUP BY (regroupement) | regroupe les lignes pour calculer (COUNT, SUM…) |
HAVING | filtre les groupes |
ORDER BY (ordonnancement) | trie (ASC ou DESC) |
LIMIT | limite le nombre de lignes |
SELECT nom, YEAR(CURDATE()) - YEAR(date_naissance) AS age
FROM clients
WHERE adresse = 'Agadir'
ORDER BY age DESC;SELECT produit.id, produit.designation, produit.pu, categorie.nom_cat
FROM produit
INNER JOIN categorie
ON produit.id_cat = categorie.id;INNER JOIN … ON relie deux tables par leur colonne commune : ici, la clé étrangère produit.id_cat et la clé primaire categorie.id.
Vidéo · À regarder
FRBase de données : MySQL et le langage de manipulation des données
Algomius · YouTube
Ce que tu vas voir (4 min) : les chapitres « Sélectionner dans une table - SELECT ». Le formateur écrit ses premiers SELECT sur une table MySQL.
Vidéo · À regarder
FRBase de données : MySQL et le langage de manipulation des données
Algomius · YouTube
Ce que tu vas voir (10 min) : les chapitres « La clause WHERE », « Exemples de sélections avec WHERE ». Il filtre avec WHERE et montre plusieurs exemples de conditions.
Vidéo · À regarder
FRApprendre SQL pour Débutant - Tutoriel SQL COMPLET
Dataseito · YouTube
Ce que tu vas voir (9 min) : les chapitres « Les jointures SQL », « LEFT JOIN », « RIGHT JOIN », « INNER JOIN », « FULL OUTER JOIN », « CROSS JOIN », « Exemples de jointures SQL ». Les jointures SQL : LEFT, RIGHT, INNER, FULL OUTER et CROSS JOIN, avec des exemples. (La vidéo utilise SQL Server : le TOP N du début s'écrit LIMIT en MySQL.)
Les vues
CREATE VIEW `nom_view` AS requête_select;
CREATE VIEW vw_clients_agadir AS
SELECT * FROM clients
WHERE UPPER(adresse) = UPPER("agadir");
SELECT * FROM vw_clients_agadir; -- on l'utilise comme une tableRemarque : on peut inclure une vue dans une autre requête, comme une table. On peut aussi faire des INSERT, UPDATE et DELETE à travers une vue (cela modifie la table d'origine), à condition que la vue ne contienne pas : MIN, MAX, SUM, AVG, COUNT, DISTINCT, GROUP BY, HAVING, UNION, LEFT JOIN ou OUTER JOIN.
UPDATE vw_clients_agadir SET prenom = 'Fatima' WHERE id = 2; -- modifie la table clientsVidéo · À regarder
FRBase de données : Vues
Algomius · YouTube
Ce que tu vas voir (29 min) : les chapitres « Qu'est-ce qu'une vue ? », « Création d'une vue », « Consulter une vue ». Le formateur explique ce qu'est une vue, en crée une, l'interroge comme une table, puis la modifie.
Les tables temporaires
Une table temporaire stocke un résultat intermédiaire, réutilisable plusieurs fois pendant la même session. Elle est pratique quand une seule requête SELECT avec des JOIN serait impossible ou trop coûteuse : on stocke le premier résultat, puis une autre requête le traite.
| Propriété | Explication |
|---|---|
| supprimée automatiquement | à la fin de la session ou de la connexion (ou avec DROP TEMPORARY TABLE) |
| privée | visible seulement par le client qui l'a créée |
| peut avoir le même nom qu'une table normale | la table normale est alors masquée dans les requêtes |
CREATE TEMPORARY TABLE nom_table (column_1_definition, column_2_definition, ..., table_constraints);
-- ou à partir du résultat d'un SELECT :
CREATE TEMPORARY TABLE temp_nom_table
SELECT * FROM original_table
LIMIT 0; -- LIMIT 0 : copie la structure, sans les lignes
DROP TEMPORARY TABLE nom_table;Leçon 3
Le langage de manipulation de données (LMD)
INSERT
INSERT INTO nom_table (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
INSERT INTO clients (nom, prenom, date_naissance, adresse)
VALUES ("alami", "said", "1980-5-22", "casa");
INSERT INTO clients (nom, prenom, date_naissance)
VALUES ("Zaki", "Fatima", "1986-5-22"); -- adresse prend la valeur par défaut 'Agadir'id n'est pas donné : il est en AUTO_INCREMENT.
UPDATE
UPDATE nom_table
SET colonne1 = valeur1, colonne2 = valeur2, ...
WHERE condition;
UPDATE clients
SET nom = 'Fadani', adresse = "Rabat"
WHERE id = 2;DELETE
DELETE FROM nom_table WHERE condition;
DELETE FROM clients WHERE id = 3;Vidéo · À regarder
FRBase de données : MySQL et le langage de manipulation des données
Algomius · YouTube
Ce que tu vas voir (14 min) : les chapitres « Insérer dans une table - INSERT ». Le formateur insère des lignes avec INSERT INTO … VALUES, avec et sans la liste des colonnes.
Vidéo · À regarder
FRBase de données : MySQL et le langage de manipulation des données
Algomius · YouTube
Ce que tu vas voir (4 min) : les chapitres « Mettre à jour - UPDATE », « Supprimer une ligne - DELETE ». Il modifie des lignes avec UPDATE … SET … WHERE, puis en supprime avec DELETE.
TP · La vue et la table temporaire
(1) Crée la vue vw_produits_complets (id, désignation, prix, stock, nom de la catégorie). (2) Affiche avec cette vue les produits de la catégorie « Informatique ». (3) Crée une table temporaire tmp_stock_faible qui contient les produits dont le stock est inférieur à 10, puis affiche son contenu.
Exercices
QCM : rappel SQL
1
CREATE,ALTERetDROPappartiennent au…2Pour ajouter une colonne
emailà la tableclients:3
MODIFY COLUMNetCHANGE COLUMN: lequel permet de renommer la colonne ?4
CREATE TABLE t2 LIKE t1;copie…5La clause qui filtre les groupes est…
6Une vue stocke…
7On ne peut pas modifier les données à travers une vue qui contient…
8Une table temporaire est supprimée…
9
DELETE FROM clients;(sans WHERE)…
Le LDD
(1) Crée la table commandes : id (clé primaire auto-incrémentée), date_cmd (date, obligatoire), id_client (entier, clé étrangère vers clients.id), montant (décimal 10,2, 0 par défaut). (2) Ajoute la colonne statut VARCHAR(20) DEFAULT 'en cours' après date_cmd. (3) Affiche la structure.
Les requêtes
Écris les requêtes : (1) les produits de plus de 1 000 DH, du plus cher au moins cher ; (2) le nombre de produits par catégorie (nom de la catégorie et nombre) ; (3) les catégories qui ont au moins 2 produits ; (4) les 2 produits les moins chers.
L'essentiel du chapitre
À retenir
- LDD :
CREATE DATABASE/TABLE,DROP,ALTER TABLE … ADD / MODIFY COLUMN / CHANGE COLUMN / DROP COLUMN / RENAME TO,DESCRIBE,CREATE TABLE b LIKE a(structure seule). - Colonnes : type,
NOT NULL,AUTO_INCREMENT,DEFAULT,PRIMARY KEY; moteur InnoDB (transactions, clés étrangères). - LID :
SELECT … FROM … [WHERE] [GROUP BY] [HAVING] [ORDER BY] [LIMIT]; jointureINNER JOIN … ON. - Vue :
CREATE VIEW nom AS SELECT …; s'utilise comme une table ; modifiable seulement sans agrégat,DISTINCT,GROUP BY,HAVING,UNION, jointure externe. - Table temporaire :
CREATE TEMPORARY TABLE; privée et supprimée à la fin de la session. - LMD :
INSERT INTO … VALUES,UPDATE … SET … WHERE,DELETE FROM … WHERE(jamais sansWHEREpar erreur).