RIGHT JOIN – Jointure droite
Bonne lecture et bon apprentissage !
Junior TSAFACK – 08/08/2026
⏱️ Temps de lecture estimé : 5 minutes
En SQL, la commande RIGHT JOIN (ou RIGHT OUTER JOIN) est un type de jointure entre 2 tables qui permet de retourner tous les enregistrements de la table de droite (RIGHT = droite) même s’il n’y a pas de correspondance avec la table de gauche. S’il y a un enregistrement de la table de droite qui ne trouve pas de correspondance dans la table de gauche, alors les colonnes de la table de gauche auront NULL pour valeur.
Bon à savoir :
RIGHT JOINest l’exact symétrique deLEFT JOIN. En pratique,RIGHT JOINest moins utilisé car on peut généralement obtenir le même résultat en inversant l’ordre des tables et en utilisant unLEFT JOIN.
Syntaxe
Section titled “Syntaxe”L’utilisation de cette commande SQL s’effectue de la façon suivante :
SELECT *FROM table1RIGHT JOIN table2 ON table1.id = table2.fk_id;La syntaxe de cette requête SQL peut aussi s’écrire de la façon suivante :
SELECT *FROM table1RIGHT OUTER JOIN table2 ON table1.id = table2.fk_id;Les deux syntaxes sont équivalentes. Le mot-clé OUTER est optionnel.
Explication : Cette syntaxe stipule qu’il faut lister toutes les lignes du tableau
table2(tableau de droite) et afficher les données associées du tableautable1s’il y a une correspondance entre l’ID detable1et la clé étrangère detable2. S’il n’y a pas de correspondance, l’enregistrement detable2sera affiché et les colonnes detable1vaudront toutesNULL.
Exemple concret
Section titled “Exemple concret”Prenons l’exemple d’une base de données qui contient des utilisateurs et un historique d’achat de ces utilisateurs. Ces 2 tables sont reliées entre elles grâce à la colonne utilisateur_id de la table des commandes. Cela permet de savoir à quel utilisateur est associé un achat.
Table « utilisateur » :
| id | prenom | nom | ville | actif | |
|---|---|---|---|---|---|
| 1 | Aimée | Marechal | [email protected] | Paris | 1 |
| 2 | Esmée | Lefort | [email protected] | Lyon | 0 |
| 3 | Marine | Prevost | [email protected] | Lille | 1 |
| 4 | Luc | Rolland | [email protected] | Marseille | 1 |
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 |
| 3 | 2013-02-21 | A00106 | 235.35 |
| 5 | 2013-03-02 | A00107 | 47.58 |
Pour afficher toutes les commandes avec le nom de l’utilisateur correspondant, il est normalement d’habitude d’utiliser INNER JOIN. Malheureusement, si l’utilisateur a été supprimé de la table (ex: utilisateur 5), l’INNER JOIN ne retournerait pas l’achat. L’utilisation de RIGHT JOIN permet de retourner tous les achats et d’afficher le nom de l’utilisateur s’il existe.
SELECT utilisateur.id, utilisateur.prenom, utilisateur.nom, commande.utilisateur_id, commande.date_achat, commande.num_factureFROM utilisateurRIGHT JOIN commande ON utilisateur.id = commande.utilisateur_id;Résultat :
| id | prenom | nom | utilisateur_id | date_achat | num_facture |
|---|---|---|---|---|---|
| 1 | Aimée | Marechal | 1 | 2013-01-23 | A00103 |
| 1 | Aimée | Marechal | 1 | 2013-02-14 | A00104 |
| 2 | Esmée | Lefort | 2 | 2013-02-17 | A00105 |
| 3 | Marine | Prevost | 3 | 2013-02-21 | A00106 |
| NULL | NULL | NULL | 5 | 2013-03-02 | A00107 |
Observations :
- La facture A00107 est liée à l’utilisateur numéro 5, qui n’existe pas dans la table
utilisateur. - Grâce à
RIGHT JOIN, l’achat est tout de même affiché mais les informations liées à l’utilisateur sont remplacées parNULL. - Toutes les commandes sont affichées, y compris celles dont l’utilisateur a été supprimé.
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.utilisateur_id, c.date_achat, c.num_factureFROM utilisateur uRIGHT JOIN commande c ON u.id = c.utilisateur_id;RIGHT JOIN avec condition supplémentaire (WHERE vs ON)
Section titled “RIGHT JOIN avec condition supplémentaire (WHERE vs ON)”Comme pour LEFT JOIN, 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 uRIGHT 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 | 2013-02-21 | 235.35 |
| NULL | NULL | 2013-03-02 | 47.58 |
Explication : La condition
c.prix_total > 150s’applique uniquement à la jointure. Toutes les commandes sont conservées (y compris celles sans utilisateur), mais seules les commandes de plus de 150€ sont affichées avec les informations de l’utilisateur.
Condition dans WHERE
Section titled “Condition dans WHERE”SELECT u.id, u.nom, c.date_achat, c.prix_totalFROM utilisateur uRIGHT 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 |
| 3 | Marine | 2013-02-21 | 235.35 |
Explication : La condition
WHEREs’applique sur l’ensemble du résultat. La commande du 2013-03-02 (47.58€) est exclue car son prix total n’est pas > 150.
RIGHT JOIN avec trois tables
Section titled “RIGHT JOIN avec trois tables”Il est possible d’enchaîner plusieurs RIGHT JOIN pour lier plusieurs tables :
SELECT u.nom, u.prenom, c.date_achat, c.num_facture, p.nom AS produit_nomFROM utilisateur uRIGHT JOIN commande c ON u.id = c.utilisateur_idRIGHT JOIN commande_produit cp ON c.id = cp.commande_idRIGHT JOIN produit p ON cp.produit_id = p.id;Remarque : Dans la pratique, enchaîner plusieurs
RIGHT JOINpeut devenir difficile à lire. Il est souvent préférable de réorganiser les tables et d’utiliser desLEFT JOINpour une meilleure lisibilité.
Comparaison RIGHT JOIN vs LEFT JOIN
Section titled “Comparaison RIGHT JOIN vs LEFT JOIN”LEFT JOIN |
RIGHT JOIN |
|---|---|
| Table de gauche = source principale | Table de droite = source principale |
| Toutes les lignes de la table de gauche | Toutes les lignes de la table de droite |
| Plus couramment utilisé | Moins courant, souvent remplacé par LEFT JOIN |
Équivalence :
SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.fk_id;est équivalent à :
SELECT * FROM table2 LEFT JOIN table1 ON table2.fk_id = table1.id;Quand utiliser RIGHT JOIN ?
Section titled “Quand utiliser RIGHT JOIN ?”Il y a peu de situations où RIGHT JOIN est préférable à LEFT JOIN. Cependant, il peut être utile dans les cas suivants :
-
Lorsqu’on lit une requête existante et qu’on veut conserver la structure pour des raisons de clarté (par exemple, pour garder l’ordre des tables dans une requête déjà écrite).
-
Dans des requêtes complexes où l’ordre des tables est imposé par d’autres contraintes (par exemple, dans des vues ou des sous-requêtes).
-
Pour des raisons stylistiques quand on veut mettre l’accent sur la table de droite comme table principale.
Bon à savoir : La plupart des développeurs préfèrent utiliser
LEFT JOINsystématiquement pour éviter la confusion. Si vous utilisezRIGHT JOIN, assurez-vous de bien documenter votre requête.
Bonnes pratiques
Section titled “Bonnes pratiques”-
Préférez
LEFT JOINàRIGHT JOIN: il est plus intuitif de lire une requête de gauche à droite. -
Soignez la lisibilité : si vous utilisez
RIGHT JOIN, assurez-vous que l’ordre des tables rend la requête compréhensible. -
Indexez les colonnes de jointure pour de meilleures performances.
-
Utilisez des alias pour simplifier l’écriture des requêtes.
-
Faites attention à la différence entre
ONetWHERE: les conditions dansONaffectent la jointure, tandis que celles dansWHEREfiltrent le résultat final.
Prochain chapitre
Section titled “Prochain chapitre”Vous savez désormais comment utiliser RIGHT JOIN pour conserver toutes les lignes de la table de droite. Mais que faire si vous souhaitez conserver toutes les lignes des deux tables, qu’il y ait correspondance ou non ?
👉 Chapitre 36 : FULL JOIN – Jointure externe complète
Bonne continuation !
Junior TSAFACK – 08/08/2026