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.
Syntaxe
L’utilisation de cette commande SQL s’effectue de la façon suivante:
SELECT *
FROM table1
RIGHT JOIN table2 ON table1.id = table2.fk_id
La syntaxe de cette requête SQL peux aussi s’écrire de la façon suivante :
SELECT * FROM table1 RIGHT OUTER JOIN table2 ON table1.id = table2.fk_id
Cette syntaxe stipule qu’il faut lister toutes les lignes du tableau table2 (tableau de droite) et afficher les données associées du tableau table1 s’il y a une correspondance entre ID de table1 et FK_ID de table2. S’il n’y a pas de correspondance, l’enregistrement de table2 sera affiché et les colonnes de table1 vaudront toutes NULL.
Exemple
Prenons l’exemple d’une base de données qui contient des utilisateurs et un historique d’achat de ces utilisateurs. Cette 2 tables sont reliées entre 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 | aime.marechal@example.com | Paris | 1 |
2 | Esmée | Lefort | esmee.lefort@example.com | Lyon | 0 |
3 | Marine | Prevost | m.prevost@example.com | Lille | 1 |
4 | Luc | Rolland | lucrolland@example.com | 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 en SQL. Malheureusement, si l’utilisateur a été supprimé de la table, alors ça ne retourne 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. Pour cela il convient d’utiliser cette requête:
SELECT id, prenom, nom, utilisateur_id, date_achat, num_facture FROM utilisateur RIGHT JOIN commande ON utilisateur.id = commande.utilisateur_id
Résultats :
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 |
Ce résultat montre que la facture A00107 est liée à l’utilisateur numéro 5. Or, cet utilisateur n’existe pas ou n’existe plus. Grâce à RIGHT JOIN, l’achat est tout de même affiché mais les informations liées à l’utilisateur sont remplacé par NULL.