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
NULLdans le résultat.
Syntaxe
Section titled “Syntaxe”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 table1LEFT JOIN table2 ON table1.id = table2.fk_id;Syntaxe alternative avec LEFT OUTER JOIN
Section titled “Syntaxe alternative avec LEFT OUTER JOIN”La requête peut aussi s’écrire de la façon suivante :
SELECT *FROM table1LEFT 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
table1tout en récupérant les données associées, même s’il n’y a pas de correspondance avectable2.
Exemple concret
Section titled “Exemple concret”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 | 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_totalFROM utilisateurLEFT 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
commandesont àNULL. - L’utilisateur 5 de la table
commanden’existe pas dans la tableutilisateur→ il n’est pas affiché (car la table de gauche estutilisateur).
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_totalFROM utilisateur uLEFT JOIN commande c ON u.id = c.utilisateur_id;LEFT JOIN avec trois tables
Section titled “LEFT JOIN avec trois tables”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_nomFROM utilisateur uLEFT JOIN commande c ON u.id = c.utilisateur_idLEFT JOIN commande_produit cp ON c.id = cp.commande_idLEFT JOIN produit p ON cp.produit_id = p.id;Filtrer sur les valeurs NULL
Section titled “Filtrer sur les valeurs NULL”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_idFROM utilisateur uLEFT JOIN commande c ON u.id = c.utilisateur_idWHERE 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.
Condition dans ON (JOIN)
Section titled “Condition dans ON (JOIN)”SELECT u.id, u.nom, c.date_achat, c.prix_totalFROM utilisateur uLEFT 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 > 150s’applique uniquement à la jointure. Tous les utilisateurs sont conservés, mais seules les commandes de plus de 150€ sont affichées.
Condition dans WHERE
Section titled “Condition dans WHERE”SELECT u.id, u.nom, c.date_achat, c.prix_totalFROM utilisateur uLEFT JOIN commande c ON u.id = c.utilisateur_idWHERE 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
WHEREs’applique sur l’ensemble du résultat. LeLEFT JOINdevient unINNER JOINcar les lignes avecNULLsont filtrées.
Cas d’usage de LEFT JOIN
Section titled “Cas d’usage de LEFT JOIN”| 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 |
Bonnes pratiques
Section titled “Bonnes pratiques”- Comprenez la différence entre INNER JOIN et LEFT JOIN pour choisir le bon type de jointure.
- Faites attention à l’ordre des tables : dans un
LEFT JOIN, la table qui fournit toutes les lignes doit être à gauche. - Utilisez
IS NULLetIS NOT NULLpour filtrer les lignes sans correspondance. - Placez les conditions de filtrage des lignes dans
WHERE, et les conditions de jointure dansON. - Indexez les colonnes de jointure pour de meilleures performances.
Prochain chapitre
Section titled “Prochain chapitre”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