Aller au contenu
Jointures

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

Modèle
SELECT a.col, b.colFROM table_a aLEFT JOIN table_b b ON b.a_id = a.id;

Exemple

Exemple concret
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

  1. La table de gauche est celle écrite après FROM. LEFT JOIN et LEFT OUTER JOIN sont synonymes.
  2. 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.
  3. 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.
  4. 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