SQL LEFT JOIN

Dans le langage SQL, la commande LEFT JOIN (aussi appelée LEFT OUTER JOIN) est un type de jointure entre 2 tables. Cela permet de lister tous les résultats de la table de gauche (left = gauche) même s’il n’y a pas de correspondance dans la deuxième tables.

Jointure gauche (LEFT JOINT)

Jointure gauche (LEFT JOINT)

Syntaxe

Pour lister les enregistrement de table1, même s’il n’y a pas de correspondance avec table2, il convient d’effectuer une requête SQL utilisant la syntaxe suivante.

SELECT *
FROM table1
LEFT JOIN table2 ON table1.id = table2.fk_id

La requête peux aussi s’écrire de la façon suivante :

SELECT *
FROM table1
LEFT OUTER JOIN table2 ON table1.id = table2.fk_id

Cette requête est particulièrement intéressante pour récupérer les informations de table1 tout en récupérant les données associées, même s’il n’y a pas de correspondance avec table2. A savoir, s’il n’y a pas de correspondance les colonnes de table2 vaudront toutes NULL.

Exemple

Imaginons une application contenant des utilisateurs et des commandes pour chacun de ces utilisateurs. La base de données de cette application contient une table pour les utilisateurs et sauvegarde leurs achats dans une seconde table. Les 2 tables sont reliées grâce à la colonne utilisateur_id de la table des commandes. Cela permet d’associer une commande à un utilisateur.

Table utilisateur :

idprenomnomemailville
1AiméeMarechalaime.marechal@example.comParis
2EsméeLefortesmee.lefort@example.comLyon
3MarinePrevostm.prevost@example.comLille
4LucRollandlucrolland@example.comMarseille

Table commande :

utilisateur_iddate_achatnum_factureprix_total
12013-01-23A00103203.14
12013-02-14A00104124.00
22013-02-17A00105149.45
22013-02-21A00106235.35
52013-03-02A0010747.58

Pour lister tous les utilisateurs avec leurs commandes et afficher également les utilisateurs qui n’ont pas effectuées d’achats, il est possible d’utiliser la requête suivante:

SELECT *
FROM utilisateur
LEFT JOIN commande ON utilisateur.id = commande.utilisateur_id

Résultats :

idprenomnomdate_achatnum_factureprix_total
1AiméeMarechal2013-01-23A00103203.14
1AiméeMarechal2013-02-14A00104124.00
2EsméeLefort2013-02-17A00105149.45
2EsméeLefort2013-02-21A00106235.35
3MarinePrevostNULLNULLNULL
4LucRollandNULLNULLNULL

Les dernières lignes montrent des utilisateurs qui n’ont effectuée aucune commande. La ligne retourne la valeur NULL pour les colonnes concernant les achats qu’ils n’ont pas effectués.

Filtrer sur la valeur NULL

Attention, la valeur NULL n’est pas une chaîne de caractère. Pour filtrer sur ces caractères il faut utiliser la commande IS NULL. Par exemple, pour lister les utilisateurs qui n’ont pas effectués d’achats  il est possible d’utiliser la requête suivante.

SELECT id, prenom, nom, utilisateur_id
FROM utilisateur
LEFT JOIN commande ON utilisateur.id = commande.utilisateur_id
WHERE utilisateur_id IS NULL

Résultats :

idprenomnomutilisateur_id
3MarinePrevostNULL
4LucRollandNULL
Partager