CodeGym /Cours /SQL SELF /`RIGHT JOIN` et son utilisation

`RIGHT JOIN` et son utilisation

SQL SELF
Niveau 11 , Leçon 3
Disponible

On commence par la définition. RIGHT JOIN, c'est un type de jointure qui retourne toutes les lignes de la table de droite (c'est pour ça qu'on l'appelle "droite"), et seulement les lignes correspondantes de la table de gauche. Si la table de gauche n'a pas de données qui matchent avec une ligne de la table de droite, tu verras des valeurs NULL pour les colonnes de la table de gauche.

Tu connais déjà LEFT JOIN, c'est presque pareil mais en mode "miroir". La différence principale, c'est quelle table est considérée comme principale : la gauche ou la droite.

Syntaxe de RIGHT JOIN

La syntaxe de RIGHT JOIN est quasiment identique à celle de LEFT JOIN. Voilà à quoi ça ressemble :

SELECT
    colonnes
FROM 
    table_gauche RIGHT JOIN table_droite
ON 
    condition_de_jointure;

Fais gaffe à l'ordre des tables :

  1. table de gauche s'écrit avant RIGHT JOIN ;
  2. table de droite vient après le mot RIGHT JOIN.

Imaginons qu'on a deux tables :

students — la liste des étudiants :

student_id name
1 Otto
2 Maria
3 Alex

enrollments — les inscriptions des étudiants aux cours :

enrollment_id course_name student_id
101 Mathématiques 1
102 Informatique 2
103 Biologie NULL

Maintenant, on veut obtenir la liste de toutes les inscriptions, et aussi les infos sur les étudiants s'ils existent. Si l'étudiant n'est pas trouvé, on verra NULL à la place de ses infos.

La requête avec RIGHT JOIN ressemblera à ça :

SELECT
    enrollments.enrollment_id,
    enrollments.course_name,
    students.name AS student_name
FROM 
    students RIGHT JOIN enrollments
    ON 
    students.student_id = enrollments.student_id;

Résultat :

enrollment_id course_name student_name
101 Mathématiques Otto
102 Informatique Maria
103 Biologie NULL

Ici, tu vois que toutes les lignes de la table enrollments (table de droite) sont dans le résultat, même si elles n'ont pas de correspondance dans la table students (table de gauche).

Comparaison RIGHT JOIN et LEFT JOIN

Si tu piges déjà comment marche LEFT JOIN, tu peux te demander : "Mais à quoi ça sert RIGHT JOIN ? Pourquoi pas juste utiliser LEFT JOIN ?" Bonne question ! Voyons les différences et les cas où il vaut mieux choisir RIGHT JOIN.

  1. Sens des données

    • LEFT JOIN : retourne toutes les lignes de la table de gauche, même s'il n'y a pas de correspondance dans la table de droite.
    • RIGHT JOIN : retourne toutes les lignes de la table de droite, même s'il n'y a pas de correspondance dans la table de gauche.
  2. Choix de la table principale En général, tu choisis LEFT ou RIGHT selon la table (gauche ou droite) qui t'intéresse le plus et dans quel ordre tu préfères écrire ta requête.

  3. Équivalence N'importe quel RIGHT JOIN peut être réécrit en LEFT JOIN en inversant l'ordre des tables. Par exemple :

    -- RIGHT JOIN
    SELECT *
    FROM students RIGHT JOIN enrollments
    ON students.student_id = enrollments.student_id;
    
    -- LEFT JOIN équivalent
    SELECT *
    FROM enrollments LEFT JOIN students
    ON students.student_id = enrollments.student_id;

Donc, si t'es pas fan du mot RIGHT JOIN, tu peux toujours l'éviter !

Quand utiliser RIGHT JOIN ?

En vrai, RIGHT JOIN est moins utilisé que LEFT JOIN. Mais il y a des cas où ça peut servir :

  • Si la table de droite est plus importante (genre c'est ta table principale) ;
  • Quand tu veux organiser ta requête dans un ordre où la table de droite vient logiquement après la gauche ;
  • Si tu bosses sur du code existant qui utilise RIGHT JOIN par défaut.

Représentation visuelle de RIGHT JOIN

Pour mieux piger RIGHT JOIN, mate ce schéma :

Table de gauche            Table de droite
   [ A ] --------> [ 1 ] 
   [ B ] --------> [ 2 ]
   [ C ] --------> [ 3 ]
   [ D ]           [ 4 ]

Avec RIGHT JOIN, tu récupères toutes les valeurs de la table de droite avec les données correspondantes de la table de gauche. Ce qui manque dans la table de gauche sera rempli par NULL.

Exercice pratique

On va tester tes connaissances en pratique. Voilà l'exercice :

Tu as deux tables departments avec les départements et employees avec les employés : departments :

department_id department_name
1 IT
2 Ventes
3 Comptabilité

employees :

employee_id name department_id
101 Peter 1
102 Eva 2
103 Ron NULL

Écris une requête avec RIGHT JOIN qui retourne la liste de tous les départements, avec les employés s'ils sont dans un département, ou NULL si y'a pas d'employés.

Essaie de résoudre l'exercice tout seul avant de regarder la réponse.

Réponse à l'exercice

Voilà à quoi ressemble la requête :

SELECT
    departments.department_name,
    employees.name AS employee_name
FROM employees RIGHT JOIN departments
    ON employees.department_id = departments.department_id;

Le résultat sera :

department_name employee_name
IT Peter
Ventes Eva
Comptabilité NULL

Erreurs courantes avec RIGHT JOIN

Quand tu bosses avec RIGHT JOIN, les débutants tombent souvent sur ces soucis :

  1. Ils oublient la condition de jointure ON. Sans condition, tu obtiens le produit cartésien des tables, et là c'est le bazar.
  2. Ils confondent RIGHT JOIN et LEFT JOIN. Si tu mets les tables dans le mauvais ordre, le résultat sera faux.
  3. Ils ne gèrent pas les valeurs NULL. Les requêtes avec RIGHT JOIN ramènent souvent des NULL, qu'il faut bien interpréter ou remplacer avec COALESCE().

Voilà, c'est tout ! Maintenant tu sais utiliser RIGHT JOIN, tu piges la différence entre RIGHT JOIN et LEFT JOIN, et tu peux choisir la bonne jointure pour tes besoins. Dans la prochaine leçon, on parlera plus en détail de FULL OUTER JOIN, où on joint tout-tout des deux tables. Bonne chance avec tes requêtes !

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION