Dans le langage SQL, la commande FULL JOIN (ou FULL OUTER JOIN) permet de faire une jointure entre 2 tables. L’utilisation de cette commande permet de combiner les résultats des 2 tables, les associer entre eux grâce à une condition et remplir avec des valeurs NULL si la condition n’est pas respectée.
Syntaxe
Pour retourner les enregistrements de table1 et table2, il convient d’utiliser une requête SQL avec une syntaxe telle que celle-ci:
SELECT * FROM table1 FULL JOIN table2 ON table1.id = table2.fk_id
Cette requête peut aussi être conçu de cette façon :
SELECT * FROM table1 FULL OUTER JOIN table2 ON table1.id = table2.fk_id
La condition présentée ici consiste à lier les tables sur un identifiant, mais la condition peut être définie sur d’autres champs.
Exemple
Prenons l’exemple d’une base de données qui contient une table utilisateur ainsi qu’une table commande qui contient toutes les ventes.
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 |
Il est possible d’utiliser FULL JOIN pour lister tous les utilisateurs ayant effectué ou non une vente, et de lister toutes les ventes qui sont associées ou non à un utilisateur. La requête SQL est la suivante :
SELECT id, prenom, nom, utilisateur_id, date_achat, num_facture FROM utilisateur FULL JOIN commande ON utilisateur.id = commande.utilisateur_id
Résultat :
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 |
4 | Luc | Rolland | NULL | NULL | NULL |
NULL | NULL | NULL | 5 | 2013-03-02 | A00107 |
Ce résultat affiche bien l’utilisateur numéro 4 qui n’a effectué aucun achat. Le résultat retourne également la facture A00107 qui est associée à un utilisateur qui n’existe pas (ou qui n’existe plus). Dans les cas où il n’y a pas de correspondance avec l’autre table, les valeurs des colonnes valent NULL.