Skip to content

LEFT JOIN – Jointure gauche

Bonne lecture et bon apprentissage !
Junior TSAFACK – 08/08/2026
⏱️ Temps de lecture estimé : 6 minutes


Dans le langage SQL, la commande LEFT JOIN (aussi appelée LEFT OUTER JOIN) est un type de jointure entre 2 tables. Cela permet de lister tous les résultats de la table de gauche (LEFT = gauche) même s’il n’y a pas de correspondance dans la deuxième table.

Bon à savoir : Si un enregistrement de la table de gauche n’a pas de correspondance dans la table de droite, les colonnes de la table de droite vaudront NULL dans le résultat.


Pour lister les enregistrements de table1, même s’il n’y a pas de correspondance avec table2, il convient d’effectuer une requête SQL utilisant la syntaxe suivante :

SELECT *
FROM table1
LEFT JOIN table2 ON table1.id = table2.fk_id;

La requête peut aussi s’écrire de la façon suivante :

SELECT *
FROM table1
LEFT OUTER JOIN table2 ON table1.id = table2.fk_id;

Les deux syntaxes sont équivalentes. Le mot-clé OUTER est optionnel.

Bon à savoir : Cette requête est particulièrement intéressante pour récupérer les informations de table1 tout en récupérant les données associées, même s’il n’y a pas de correspondance avec table2.


Imaginons une application contenant des utilisateurs et des commandes pour chacun de ces utilisateurs. La base de données de cette application contient une table pour les utilisateurs et sauvegarde leurs achats dans une seconde table. Les 2 tables sont reliées grâce à la colonne utilisateur_id de la table des commandes.

Table « utilisateur » :

id prenom nom email ville
1 Aimée Marechal [email protected] Paris
2 Esmée Lefort [email protected] Lyon
3 Marine Prevost [email protected] Lille
4 Luc Rolland [email protected] Marseille

Table « commande » :

utilisateur_id date_achat num_facture prix_total
1 2013-01-23 A00103 203.14
1 2013-02-14 A00104 124.00
2 2013-02-17 A00105 149.45
2 2013-02-21 A00106 235.35
5 2013-03-02 A00107 47.58

Pour lister tous les utilisateurs avec leurs commandes, y compris ceux qui n’ont pas effectué d’achats, il est possible d’utiliser la requête suivante :

SELECT utilisateur.id,
utilisateur.prenom,
utilisateur.nom,
commande.date_achat,
commande.num_facture,
commande.prix_total
FROM utilisateur
LEFT JOIN commande ON utilisateur.id = commande.utilisateur_id;

Résultat :

id prenom nom date_achat num_facture prix_total
1 Aimée Marechal 2013-01-23 A00103 203.14
1 Aimée Marechal 2013-02-14 A00104 124.00
2 Esmée Lefort 2013-02-17 A00105 149.45
2 Esmée Lefort 2013-02-21 A00106 235.35
3 Marine Prevost NULL NULL NULL
4 Luc Rolland NULL NULL NULL

Observations :

  • Les utilisateurs 1 et 2 ont des commandes → leurs commandes sont affichées.
  • Les utilisateurs 3 (Marine) et 4 (Luc) n’ont aucune commande → ils apparaissent tout de même, mais les colonnes de commande sont à NULL.
  • L’utilisateur 5 de la table commande n’existe pas dans la table utilisateur → il n’est pas affiché (car la table de gauche est utilisateur).

Utiliser des alias pour simplifier la requête

Section titled “Utiliser des alias pour simplifier la requête”
SELECT u.id, u.prenom, u.nom,
c.date_achat, c.num_facture, c.prix_total
FROM utilisateur u
LEFT JOIN commande c ON u.id = c.utilisateur_id;

On peut enchaîner plusieurs LEFT JOIN pour lier trois tables ou plus :

SELECT u.nom, u.prenom,
c.date_achat, c.num_facture,
p.nom AS produit_nom
FROM utilisateur u
LEFT JOIN commande c ON u.id = c.utilisateur_id
LEFT JOIN commande_produit cp ON c.id = cp.commande_id
LEFT JOIN produit p ON cp.produit_id = p.id;

La valeur NULL n’est pas une chaîne de caractères. Pour filtrer sur ces valeurs, il faut utiliser la commande IS NULL (comme vu au chapitre 10).

Par exemple, pour lister les utilisateurs qui n’ont pas effectué d’achats :

SELECT u.id, u.prenom, u.nom, c.utilisateur_id
FROM utilisateur u
LEFT JOIN commande c ON u.id = c.utilisateur_id
WHERE c.utilisateur_id IS NULL;

Résultat :

id prenom nom utilisateur_id
3 Marine Prevost NULL
4 Luc Rolland NULL

LEFT JOIN avec condition supplémentaire (WHERE vs ON)

Section titled “LEFT JOIN avec condition supplémentaire (WHERE vs ON)”

Il est important de comprendre la différence entre placer une condition dans ON ou dans WHERE.

SELECT u.id, u.nom, c.date_achat, c.prix_total
FROM utilisateur u
LEFT JOIN commande c ON u.id = c.utilisateur_id AND c.prix_total > 150;

Résultat :

id nom date_achat prix_total
1 Aimée 2013-01-23 203.14
1 Aimée NULL NULL
2 Esmée NULL NULL
3 Marine NULL NULL
4 Luc NULL NULL

Explication : La condition c.prix_total > 150 s’applique uniquement à la jointure. Tous les utilisateurs sont conservés, mais seules les commandes de plus de 150€ sont affichées.

SELECT u.id, u.nom, c.date_achat, c.prix_total
FROM utilisateur u
LEFT JOIN commande c ON u.id = c.utilisateur_id
WHERE c.prix_total > 150;

Résultat :

id nom date_achat prix_total
1 Aimée 2013-01-23 203.14
2 Esmée 2013-02-21 235.35

Explication : La condition WHERE s’applique sur l’ensemble du résultat. Le LEFT JOIN devient un INNER JOIN car les lignes avec NULL sont filtrées.


Situation Utilisation recommandée
Récupérer tous les utilisateurs avec leurs commandes, même sans commande LEFT JOIN
Récupérer tous les produits avec leurs catégories, même les produits non catégorisés LEFT JOIN
Vérifier les enregistrements orphelins (sans correspondance) LEFT JOIN ... WHERE fk IS NULL
Créer un rapport complet avec des données manquantes LEFT JOIN

  1. Comprenez la différence entre INNER JOIN et LEFT JOIN pour choisir le bon type de jointure.
  2. Faites attention à l’ordre des tables : dans un LEFT JOIN, la table qui fournit toutes les lignes doit être à gauche.
  3. Utilisez IS NULL et IS NOT NULL pour filtrer les lignes sans correspondance.
  4. Placez les conditions de filtrage des lignes dans WHERE, et les conditions de jointure dans ON.
  5. Indexez les colonnes de jointure pour de meilleures performances.

Vous savez désormais comment utiliser LEFT JOIN pour conserver toutes les lignes de la table de gauche. Mais que faire si vous souhaitez conserver toutes les lignes de la table de droite, même sans correspondance ?

👉 Chapitre 35 : RIGHT JOIN – Jointure droite


Bonne continuation !
Junior TSAFACK – 08/08/2026