Leçon 5.4 : RIGHT JOIN — Inclure tous les enregistrements de la table de droite
Le RIGHT JOIN (ou RIGHT OUTER JOIN) est l'opposé logique du LEFT JOIN. Il garantit que toutes les lignes de la table "droite" (celle mentionnée après le mot-clé JOIN) sont incluses dans le résultat, qu'elles aient ou non une correspondance dans la table "gauche".
Qu'est-ce qu'un RIGHT JOIN ?
Un RIGHT JOIN retourne toutes les lignes de la table de droite et les lignes correspondantes de la table de gauche. Si aucune correspondance n'existe dans la table de gauche, les colonnes de celle-ci seront NULL.
Visualisation :
Table A (customer) Table B (payment)
+----+----------+ +----+----------+
| id | name | | id | amount |
+----+----------+ +----+----------+
| 1 | Alice | <--------> | 1 | 10.00 | (Correspondance !)
| NULL | <--------> | 4 | 50.00 | (Pas de client, paiement conservé !)
+----+----------+ +----+----------+
Dans cet exemple, le paiement avec l'ID 4 est conservé même si aucun client n'y est associé (dans une base bien conçue comme Sakila, cela reste rare à cause des contraintes de clé étrangère).
Syntaxe du RIGHT JOIN
La syntaxe suit le même schéma que les autres types de jointures :
SELECT
table1.column1,
table2.column2
FROM
table1
RIGHT JOIN
table2 ON table1.common_column = table2.common_column;
RIGHT JOIN: garantit que toutes les lignes detable2(la table de droite) sont conservées.ON: spécifie la condition de jointure.
Exemples pratiques (base Sakila)
Le RIGHT JOIN est moins courant que le LEFT JOIN (car tout RIGHT JOIN peut être réécrit en LEFT JOIN en inversant l'ordre des tables), mais il reste important à comprendre.
1. Lister toutes les adresses et leur personnel
Supposons que l'on souhaite voir toutes les adresses et vérifier si un membre du personnel y est affecté.
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
ORDER BY
s.last_name;
Cela retournera toutes les adresses de la table address. Si aucune adresse n'a de personnel, les noms seront NULL.
RIGHT JOIN vs LEFT JOIN
Chaque RIGHT JOIN peut être exprimé comme un LEFT JOIN. La plupart des développeurs SQL préfèrent utiliser uniquement LEFT JOIN et simplement inverser l'ordre des tables pour garder la "table principale" à gauche, ce qui rend la requête plus lisible.
Exemple d'équivalence :
-- Avec RIGHT JOIN
SELECT f.title, i.inventory_id
FROM film f
RIGHT JOIN inventory i ON f.film_id = i.film_id;
-- Avec LEFT JOIN (même résultat)
SELECT f.title, i.inventory_id
FROM inventory i
LEFT JOIN film f ON i.film_id = f.film_id;
Points clés de cette leçon
- RIGHT JOIN retourne toutes les lignes de la table de droite.
- C'est l'image miroir du
LEFT JOIN. - Les colonnes de la table de gauche seront NULL si aucune correspondance n'est trouvée.
- La plupart des développeurs préfèrent le LEFT JOIN pour la cohérence, mais il est essentiel de comprendre les deux pour lire du code existant.