🚀 Novembre a commencé ! SQLtest.online reste gratuit grâce aux dons de personnes comme vous. Aidez-nous à atteindre l'objectif de ce mois plus tôt pour que le site fonctionne sans interruption. Soutenir maintenant →
Code SQL copié dans le presse-papiers

SQL RIGHT JOIN : garder toutes les lignes de la table de droite

Leçon 5.4 · Temps de lecture : ~4 min

Le SQL RIGHT JOIN renvoie chaque ligne de la table de droite et les lignes correspondantes de la table de gauche ; en l'absence de correspondance, les colonnes de la table de gauche valent NULL. Dans cette leçon, vous apprendrez la syntaxe de RIGHT JOIN, comment il reflète LEFT JOIN, et pourquoi la plupart des développeurs le réécrivent en LEFT JOIN.

RIGHT JOIN est l'image miroir de LEFT JOIN. La seule différence est la table qui garde toutes ses lignes : avec LEFT JOIN, c'est la table qui suit FROM ; avec RIGHT JOIN, c'est la table qui suit JOIN.

SQL RIGHT JOIN : toutes les lignes de la table de droite sont conservées et les lignes sans correspondance reçoivent NULL dans les colonnes de gauche ; même résultat qu'un LEFT JOIN avec les tables inversées

Ce que renvoie RIGHT JOIN

  • Chaque ligne de la table de droite (celle qui suit RIGHT JOIN) apparaît dans le résultat.
  • Les lignes avec correspondances y sont combinées, comme avec INNER JOIN.
  • Les lignes sans correspondance reçoivent NULL dans toutes les colonnes de la table de gauche.

RIGHT JOIN et RIGHT OUTER JOIN sont identiques.

Syntaxe de base

SELECT left_table.column1, right_table.column2
FROM left_table
RIGHT JOIN right_table ON left_table.key_column = right_table.key_column;

Exemple : toutes les adresses et leurs employés

La table address stocke les adresses des clients, des employés et des magasins. Pour lister toutes les adresses et montrer lesquelles appartiennent à des employés :

SELECT s.first_name, s.last_name, a.address, a.district
FROM staff AS s
RIGHT JOIN address AS a ON s.address_id = a.address_id
ORDER BY s.staff_id IS NULL, a.address
LIMIT 10;

Résultat : les 603 adresses ; les deux adresses des employés viennent en premier avec leurs noms, les autres ont NULL dans first_name et last_name.


RIGHT JOIN sous forme de LEFT JOIN

Tout RIGHT JOIN peut être réécrit en LEFT JOIN en inversant les tables. Ces deux requêtes renvoient les mêmes lignes :

-- RIGHT JOIN : toutes les adresses sont conservées
SELECT s.first_name, s.last_name, a.address
FROM staff AS s
RIGHT JOIN address AS a ON s.address_id = a.address_id;
-- LEFT JOIN avec les tables inversées : même résultat
SELECT s.first_name, s.last_name, a.address
FROM address AS a
LEFT JOIN staff AS s ON s.address_id = a.address_id;

Résultat : les deux requêtes renvoient 603 lignes.

La plupart des développeurs n'utilisent que LEFT JOIN. La requête se lit alors naturellement : la table principale vient en premier après FROM, et chaque jointure suivante ne fait qu'y ajouter des informations. Mélanger LEFT et RIGHT dans une même requête rend difficile de voir quelles lignes sont garanties.


Quand RIGHT JOIN est utile

  • Lire du code existant. Vous rencontrerez RIGHT JOIN dans les requêtes d'autres personnes et dans des requêtes générées par des outils.
  • Ajouter une table à la fin d'une longue requête. Il est parfois plus simple d'ajouter un RIGHT JOIN que de réordonner une longue chaîne de jointures. Même dans ce cas, réécrire la requête avec LEFT JOIN la rend généralement plus claire.

SQLite n'a ajouté RIGHT JOIN qu'à partir de la version 3.39 (2022) ; dans les versions plus anciennes, utilisez LEFT JOIN en inversant les tables.


Points clés :

  • RIGHT JOIN conserve chaque ligne de la table de droite ; les lignes sans correspondance reçoivent NULL dans les colonnes de gauche.
  • A RIGHT JOIN B renvoie les mêmes lignes que B LEFT JOIN A.
  • La plupart des requêtes utilisent LEFT JOIN avec la table principale après FROM : c'est plus lisible.
  • Évitez de mélanger LEFT JOIN et RIGHT JOIN dans une même requête.

Questions fréquentes

Quelle est la différence entre LEFT JOIN et RIGHT JOIN ?

LEFT JOIN conserve toutes les lignes de la table qui suit FROM ; RIGHT JOIN conserve toutes les lignes de la table qui suit JOIN. Inverser les tables transforme l'un en l'autre.

Pourquoi les développeurs utilisent-ils rarement RIGHT JOIN ?

Parce qu'un LEFT JOIN avec les tables inversées donne le même résultat et se lit plus naturellement : la table principale vient en premier, et les tables jointes y ajoutent des détails.

RIGHT JOIN est-il identique à RIGHT OUTER JOIN ?

Oui. Le mot-clé OUTER est facultatif.