SQL FULL JOIN

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.

Union de 2 ensembles

Union de 2 ensembles

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 :

idprenomnomemailvilleactif
1AiméeMarechalaime.marechal@example.comParis1
2EsméeLefortesmee.lefort@example.comLyon0
3MarinePrevostm.prevost@example.comLille1
4LucRollandlucrolland@example.comMarseille1

Table commande :

utilisateur_iddate_achatnum_factureprix_total
12013-01-23A00103203.14
12013-02-14A00104124.00
22013-02-17A00105149.45
32013-02-21A00106235.35
52013-03-02A0010747.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 :

idprenomnomutilisateur_iddate_achatnum_facture
1AiméeMarechal12013-01-23A00103
1AiméeMarechal12013-02-14A00104
2EsméeLefort22013-02-17A00105
3MarinePrevost32013-02-21A00106
4LucRollandNULLNULLNULL
NULLNULLNULL52013-03-02A00107

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.

Partager