Alors que l'INNER JOIN ne retourne que les lignes avec une correspondance dans les deux tables, il existe de nombreux cas où vous souhaitez conserver toutes les lignes d'une table, même sans correspondance dans l'autre. C'est exactement ce que fait le LEFT JOIN (ou LEFT OUTER JOIN).
Un LEFT JOIN retourne toutes les lignes de la table "de gauche" (celle mentionnée en premier dans la requête) et les lignes correspondantes de la table "de droite" (celle après le mot-clé JOIN).
S'il n'y a pas de correspondance dans la table de droite pour une ligne de la table de gauche, la base retourne quand même la ligne de gauche, mais met NULL dans toutes les colonnes venant de la table de droite.
Visualisation :
Table A (customer) Table B (payment)
+----+----------+ +----+----------+
| id | nom | | id | montant |
+----+----------+ +----+----------+
| 1 | Alice | <--------> | 1 | 10.00 | (Correspondance !)
| 2 | Bob | <--------> | 1 | 15.00 | (Correspondance !)
| 3 | Charlie | <--------? | NULL | (Pas de paiement, Charlie est conservé !)
+----+----------+ +----+----------+
Charlie est inclus dans le résultat même s'il n'a pas de paiement. Le "montant" pour sa ligne sera NULL.
La syntaxe est identique à celle de l'INNER JOIN, mais avec le mot-clé LEFT :
SELECT
table1.colonne1,
table2.colonne2
FROM
table1
LEFT JOIN
table2 ON table1.colonne_commune = table2.colonne_commune;
LEFT JOIN : garantit que toutes les lignes de table1 (la table de gauche) sont conservées.ON : condition de correspondance.Remarque :
LEFT JOINetLEFT OUTER JOINsont équivalents. Le mot-cléOUTERest optionnel.
Supposons qu'on veuille une liste de tous les clients, y compris ceux qui n'ont jamais effectué de paiement. Un INNER JOIN filtrerait les clients sans paiement, mais un LEFT JOIN les conserve.
SELECT
c.first_name,
c.last_name,
p.amount
FROM
customer AS c
LEFT JOIN
payment AS p ON c.customer_id = p.customer_id
ORDER BY
p.amount ASC;
Si vous voyez des lignes où amount est NULL, ce sont des clients sans paiement.
-- Ajoutez ici un exemple adapté à votre base pour illustrer l'utilité du LEFT JOIN pour trouver des enregistrements sans correspondance.
Points clés de cette leçon :
LEFT JOIN conserve toutes les lignes de la table de gauche, même sans correspondance dans la table de droite.