INSERT INTO Etudiant (id, nom, age, id_dep)
VALUES (1, 'Alami', 19, 1);
UPDATE Etudiant SET age = 22 WHERE id = 3;
DELETE FROM Etudiant WHERE age < 18;
Danger. UPDATE / DELETE sans WHERE modifient TOUTES les lignes.
7 / 17
SELECT : projection & sélection6
SELECT nom, prenom -- projection π (colonnes)FROM Etudiant
WHERE age >= 20; -- sélection σ (lignes)
π (projection) = choisir des colonnes ; * = toutes.
σ (sélection) = choisir des lignes via WHERE.
DISTINCT = enlever les doublons.
8 / 17
Opérateurs de condition6
Opérateur
Exemple
= != < > <= >=
age >= 20
AND OR NOT
age > 18 AND id_dep = 1
IN
id_dep IN (1, 3)
BETWEEN … AND …
age BETWEEN 19 AND 21
LIKE
nom LIKE 'A%'
LIKE : % = toute suite de caractères, _ = un seul caractère.
9 / 17
Opérateurs ensemblistes7
SQL
Ensemble
Résultat
UNION
A ∪ B
l'un ou l'autre (sans doublon)
INTERSECT
A ∩ B
présent dans les deux
EXCEPT
A − B
dans A, pas dans B
Les deux SELECT doivent avoir le même nombre de colonnes, de types compatibles.
10 / 17
Produit cartésien → jointure7-8
-- produit cartésien : m × n lignes, souvent sans sensSELECT * FROM Etudiant, Departement;
-- jointure interne : produit cartésien FILTRÉSELECT Etudiant.nom, Departement.nom
FROM Etudiant
JOIN Departement ON Etudiant.id_dep = Departement.id;
Jointure = relier deux tables via clé étrangère = clé primaire.
11 / 17
Jointure sur 3 tables + AS8-9
SELECT E.nom AS etudiant, M.intitule, I.note
FROM Inscription AS I
JOIN Etudiant AS E ON I.id_etudiant = E.id
JOIN Module AS M ON I.code_module = M.code;
AS = alias temporaire d'une colonne ou d'une table.
Lisibilité + indispensable pour l'auto-jointure.
12 / 17
Agrégats & GROUP BY10
COUNT, SUM, AVG, MIN, MAX calculent une valeur sur un ensemble de lignes.
-- sur toute la table (1 seul groupe)SELECT COUNT(*), AVG(age) FROM Etudiant;
-- un agrégat par groupeSELECT code_module, AVG(note) AS moyenne
FROM Inscription
GROUP BY code_module;
13 / 17
HAVING : filtrer les groupes11
SELECT code_module, AVG(note) AS moyenne
FROM Inscription
GROUP BY code_module
HAVING AVG(note) > 12;
WHERE
HAVING
avant regroupement
après regroupement
filtre des lignes
filtre des groupes
pas d'agrégat
agrégat autorisé
14 / 17
ORDER BY, LIMIT, OFFSET12
SELECT nom, age FROM Etudiant
ORDER BY age DESC, nom ASCLIMIT 5 OFFSET 2;
ORDER BY : tri ASC (défaut) / DESC, multi-colonnes.
LIMIT : nombre max de lignes ; OFFSET : sauter le début.
15 / 17
Requêtes imbriquées13
-- comparaison à une valeur calculéeSELECT nom FROM Etudiant
WHERE age > (SELECT AVG(age) FROM Etudiant);
-- appartenance à un ensembleSELECT nom FROM Etudiant
WHERE id IN (SELECT id_etudiant FROM Inscription);
Opérateurs : =,<,>…, IN / NOT IN, EXISTS / NOT EXISTS. Une sous-requête vit dans WHERE, FROM ou HAVING.