L'ordre des clauses, qui ne se discute pas
SELECT quelles colonnes
FROM quelle table
JOIN quelles autres tables
WHERE quelles lignes garder (avant regroupement)
GROUP BY comment les regrouper
HAVING quels groupes garder (après regroupement)
ORDER BY dans quel ordre les rendre
LIMIT combien en garder
Choisir les colonnes
| Écrire | Ce que ça fait |
|---|
SELECT * | Toutes les colonnes. Commode pour explorer, à éviter ensuite. |
SELECT nom, service | Seulement celles-là. |
SELECT DISTINCT service | Sans les doublons. |
SELECT salaire * 12 AS annuel | Une colonne calculée, renommée. |
SELECT nom || ' ' || prenom | Coller deux textes. |
Garder certaines lignes
| Écrire | Ce que ça fait |
|---|
WHERE salaire >= 2500 | Comparer. |
WHERE nom = 'Girard' | Guillemets simples pour le texte. |
WHERE service IN ('Etudes', 'Support') | Dans une liste de valeurs. |
WHERE salaire BETWEEN 2000 AND 3000 | Bornes comprises. |
WHERE nom LIKE 'G%' | Commence par G. % remplace n'importe quelle suite. |
WHERE salaire IS NULL | Valeur absente. Jamais = NULL. |
AND OR NOT | Combiner. Les parenthèses évitent les surprises. |
Compter, sommer, moyenner
| Écrire | Ce que ça fait |
|---|
COUNT(*) | Le nombre de lignes. |
COUNT(colonne) | Le nombre de valeurs non nulles de cette colonne. |
SUM(x) AVG(x) | Somme, moyenne. |
MIN(x) MAX(x) | Le plus petit, le plus grand. |
ROUND(AVG(x), 2) | Arrondir le résultat. |
Regrouper
| Écrire | Ce que ça fait |
|---|
GROUP BY service | Un paquet par valeur de service. |
GROUP BY a, b | Un paquet par couple de valeurs. |
HAVING COUNT(*) > 5 | Ne garder que les paquets d'au moins six lignes. |
SELECT service, COUNT(*) | Toute colonne du SELECT doit être regroupée ou agrégée. |
ORDER BY COUNT(*) DESC | Trier les paquets par leur taille. |
Relier deux tables
| Écrire | Ce que ça fait |
|---|
JOIN … ON … | Garde les lignes qui se correspondent des deux côtés. |
LEFT JOIN | Garde toutes les lignes de gauche, avec des NULL à droite quand rien ne correspond. |
FROM Employe e | Un alias, qui rend la requête lisible dès deux tables. |
Modifier les données
| Écrire | Ce que ça fait |
|---|
INSERT INTO t (a, b) VALUES (…) | Ajouter une ligne. |
UPDATE t SET a = … WHERE … | Modifier. Sans WHERE, toutes les lignes. |
DELETE FROM t WHERE … | Supprimer. Sans WHERE, la table entière. |
BEGIN ; … ; COMMIT ; | Tout ou rien. ROLLBACK annule. |
Ce qui se trompe le plus souvent
| Le piège | Ce qu'il faut faire |
|---|
= NULL ne vaut jamais vrai | IS NULL, IS NOT NULL |
COUNT(colonne) ignore les valeurs absentes | COUNT(*) pour compter les lignes |
Une jointure sans ON produit toutes les paires | toujours écrire la condition de jointure |
Une agrégation dans WHERE échoue | la mettre dans HAVING |
UPDATE ou DELETE sans WHERE touche tout | écrire d'abord le SELECT équivalent |
AVG ignore les NULL, pas les zéros | COALESCE(x, 0) si l'absence vaut zéro |