Jointure · 25 min
LEFT / RIGHT / FULL JOIN : garder tous les lignes d'un cote
Parfois on veut voir TOUTES les lignes d'une table, meme celles sans correspondance dans l'autre.
Contexte
Parfois on veut voir TOUTES les lignes d'une table, meme celles sans correspondance dans l'autre. Par exemple, lister les professeurs qui n'ont aucun cours, ou les etudiants sans inscription. C'est le role des outer joins.
Explication
LEFT JOIN (ou LEFT OUTER JOIN) retourne toutes les lignes de la table de gauche, et les colonnes de la table de droite sont remplis avec NULL si aucune correspondance.
Syntaxe : SELECT ... FROM t1 LEFT JOIN t2 ON t1.cle = t2.cle;
Points cles :
- LEFT JOIN = toutes les lignes de t1 + correspondances de t2 (NULL si pas de correspondance)
- RIGHT JOIN = inverse (toutes les lignes de t2)
- FULL JOIN = toutes les lignes des deux cotes (non disponible en SQLite)
- Pour trouver les absents : LEFT JOIN + WHERE t2.cle IS NULL
Exemple guidé
Objectif : trouver les professeurs sans cours.
1. Table professeurs (toutes les lignes), Table cours (certaines lignes seulement) 2. LEFT JOIN pour garder tous les professeurs 3. WHERE c.id IS NULL pour ne garder que ceux sans cours
SELECT p.prenom, p.nom
FROM professeurs p
LEFT JOIN cours c ON c.professeur_id = p.id
WHERE c.id IS NULL;
| prenom | nom |
|---|---|
| Cheikh | Thiam |
À retenir
LEFT JOIN garde toutes les lignes de la table de gauche. Les colonnes de la table de droite sont NULL si aucune correspondance. Pour trouver les absents : LEFT JOIN + WHERE cote_droite.cle IS NULL. RIGHT JOIN inverse les roles, FULL JOIN n'existe pas en SQLite.