LEFT JOIN
LEFT JOIN garde toutes les lignes de la table de gauche, avec ou sans correspondance à droite (les colonnes de droite valent alors NULL). Idéal pour compter des zéros ou repérer des absents.
- jointure gauche
- NULL
- optionnel
- orphelins
- LEFT OUTER JOIN
Syntaxe
SELECT a.col, b.colFROM table_a aLEFT JOIN table_b b ON b.a_id = a.id;Exemple
SELECT c.name AS classe, COUNT(s.id) AS nb_elevesFROM classes cLEFT JOIN students s ON s.class_id = c.idGROUP BY c.id, c.nameORDER BY c.name;-- Jeu de données : école-- Résultat attendu :-- 4ème A | 0-- 5ème A | 1-- 6ème A | 2-- 6ème B | 2À retenir
- La table de gauche est celle écrite après FROM. LEFT JOIN et LEFT OUTER JOIN sont synonymes.
- Pour les orphelins, ajoutez WHERE b.id IS NULL : FROM customers c LEFT JOIN orders o ON o.customer_id = c.id WHERE o.id IS NULL donne les clients sans commande.
- Comptez une colonne de droite, COUNT(s.id), et non COUNT(*) : COUNT(*) compterait 1 pour la 4ème A, car la ligne complétée par des NULL existe.
- Piège : un filtre sur la table de droite placé dans WHERE (WHERE s.age = 12) élimine les lignes NULL et transforme le LEFT JOIN en INNER JOIN. Placez-le dans la condition : LEFT JOIN students s ON s.class_id = c.id AND s.age = 12.
Voir aussi
- INNER JOININNER JOIN associe les lignes de deux tables qui se correspondent, en général une clé étrangère et la clé primaire qu'elle référence. Les lignes sans correspondance disparaissent du résultat.
- RIGHT JOINRIGHT JOIN est le miroir du LEFT JOIN : il garde toutes les lignes de la table de droite, complétées par NULL à gauche. Disponible dans SQLite depuis la 3.39, donc dans le playground.
- FULL OUTER JOINFULL OUTER JOIN garde toutes les lignes des deux tables, appariées quand c'est possible et complétées par NULL sinon. C'est l'outil du rapprochement entre deux listes ou deux périodes.
- IS NULL / IS NOT NULLNULL signifie « valeur inconnue » et ne se compare pas avec =. IS NULL et IS NOT NULL sont les seuls tests fiables pour trouver une donnée manquante, comme une classe sans professeur.