Comprendre RIGHT JOIN et sa relation avec LEFT JOIN
Le RIGHT JOIN (ou RIGHT OUTER JOIN) est l'inverse du LEFT JOIN. Il retourne toutes les lignes de la table de droite, même si elles n'ont pas de correspondance dans la table de gauche.
Si une ligne de la table de droite n'a pas de correspondance, les colonnes de la table de gauche seront NULL.
SELECT colonnes
FROM table1
RIGHT JOIN table2 ON table1.colonne = table2.colonne;
RIGHT OUTER JOIN est synonyme de RIGHT JOIN.
Ces deux requêtes sont équivalentes :
-- RIGHT JOIN
SELECT e.nom, d.dept_nom
FROM EMPLOYES e
RIGHT JOIN DEPARTEMENTS d ON e.dept_id = d.dept_id;
-- LEFT JOIN inversé
SELECT e.nom, d.dept_nom
FROM DEPARTEMENTS d
LEFT JOIN EMPLOYES e ON d.dept_id = e.dept_id;
La plupart des développeurs préfèrent LEFT JOIN car il est plus intuitif.
SELECT d.dept_nom, e.nom, e.prenom
FROM EMPLOYES e
RIGHT JOIN DEPARTEMENTS d ON e.dept_id = d.dept_id;
Cette requête retourne tous les départements. Si un département n'a pas d'employés, e.nom et e.prenom seront NULL.
Dans la pratique, RIGHT JOIN est rarement utilisé car on peut toujours le remplacer par un LEFT JOIN.
SELECT d.dept_nom
FROM EMPLOYES e
RIGHT JOIN DEPARTEMENTS d ON e.dept_id = d.dept_id
WHERE e.employe_id IS NULL;
Afficher tous les départements avec leurs employés (même sans employés)
Même résultat avec LEFT JOIN (ordre inversé)
Trouver les départements vides avec RIGHT JOIN
Toutes les localisations avec ou sans départements
Nombre d'employés par département (y compris 0)