Code SQL copié dans le presse-papiers
Apprenez à utiliser le LEFT JOIN SQL pour inclure toutes les lignes d'une table, même sans correspondance dans l'autre. Cette leçon explique la logique, la syntaxe et propose des exemples pratiques pour comprendre comment LEFT JOIN permet d'identifier les données manquantes ou "orphelines". Maîtrisez cette technique pour des analyses relationnelles complètes.
RU EN PT

Leçon 5.3 : LEFT JOIN — Inclure toutes les lignes de la table de gauche

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).

Qu'est-ce qu'un LEFT 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.

Syntaxe du LEFT JOIN

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 JOIN et LEFT OUTER JOIN sont équivalents. Le mot-clé OUTER est optionnel.

Exemples pratiques (base Sakila)

1. Trouver tous les clients et leurs paiements

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.

2. Identifier les stocks "morts"

-- 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 :

  • Le LEFT JOIN conserve toutes les lignes de la table de gauche, même sans correspondance dans la table de droite.
  • Les colonnes de la table de droite sont NULL si aucune correspondance n'est trouvée.
  • Utile pour trouver des "données orphelines" ou pour des rapports complets.