Les jointures tels que INNER JOIN, LEFT JOIN, RIGHT JOIN ou encore FULL JOIN permettent d’associer plusieurs tables de données en SQL. Grâce à cela, vous pouvez exploiter la puissance des Systèmes de Gestion de Base de Donnée Relationnel pour mixer des données et obtenir un résultat plus pertinent.

Comme vous pouvez le constater, il existe plusieurs types de jointures, mais dans cet article, nous allons découvrir en deux : LEFT JOIN et INNER JOIN. Nous allons voir comment fonctionnent-ils et comment les utiliser.

LEFT JOIN : définition

En SQL, la commande LEFT JOIN, appelée aussi LEFT OUTER JOIN, est une manière de jonction entre deux tables. Grâce à cette commande, vous avez la possibilité de lister l’ensemble des résultats de la table du gauche même si aucune correspondance n’existe dans la deuxième table.

left-join-schema

Syntaxe de la jointure LEFT JOIN

Pour lister les résultats de la table du gauche sans avoir besoin d’une éventuelle correspondance dans la deuxième table, il faut écrire l’instruction SQL suivante : 

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

Cette même instruction peut également être écrite de la manière suivante : 

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

La particularité de cette requête réside dans sa manière de récupérer des informations dans la table1 ainsi que les données associées. Et si elles n’existent pas, ces dernières vaudront NULL.

Illustration de la commande

Considérons la base de données d’une application de vente en ligne contenant des informations sur ses utilisateurs ainsi que les informations de commande passée par chaque utilisateur.

Dans cette base de données, nous avons tout d’abord la table utilisateur :

table-utilisateur

Et nous avons aussi la table commande :

table-commande

Effectuons la requête suivante pour sélectionner toutes les lignes correspondantes à la jointure :

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

Le résultat de cette requête est la suivante :

left-join-2-tables

Ici, la clause ON spécifie les champs de chaque table à travers lesquels la jointure s’effectue. Il s’agit en général de la clé étrangère de la table de droite associée à la clé primaire de la table de gauche.

Comme vous pouvez le constater, on obtient la liste des utilisateurs ayant effectué ou non des commandes ainsi que les informations sur leurs commandes respectives. Les deux dernières lignes de la table du résultat ont pour correspondance la valeur NULL, ce qui veut dire que ces clients n’ont effectué aucune commande.

Comment filtrer sur la valeur NULL avec JOIN LEFT ?

Il faut d’abord comprendre que la valeur NULL n’est pas une chaine de caractère. Donc, pour obtenir les lignes ayant des champs avec comme valeur NULL, il faut utiliser la commande IS NULL. Ici, vous pouvez passer par cette valeur pour afficher les utilisateurs qui n’ont effectué aucune commande.

SELECT id, prenom, nom, utilisateur_id FROM utilisateur LEFT JOIN commande ON utilisateur.id = commande.utilisateur_id WHERE utilisateur_id IS NULL
left-join-is-null

Différence entre la commande INNER JOIN et LEFT JOIN

Il existe un point clé qui fait la différence entre ces deux commandes. Avec LEFT JOIN, toute la partie gauche, c’est-à-dire la table de gauche est retournée même si elle n’a pas de correspondance dans la partie droite. Alors qu’INNER JOIN, lui, renvoie toutes les lignes qui remplissent une condition donnée.

Considérons par exemple la requête suivante :

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

Voici le résultat obtenu avec cette dernière :

inner-join

Le résultat ci-dessus montre en effet que les lignes ayant des valeurs NULL, en occurrence celles qui contenaient les utilisateurs n’ayant pas effectué de commande, ne sont pas affichées.

Comment faire une jointure sur plus de deux tables ? 

Dans les exemples précédents, vous avez certainement remarqué que l’on n’a traité que la jointure de deux tables. Mais au cas où vous voulez faire une jointure au-delà de deux tables, voici la syntaxe à utiliser :

SELECT * FROM table_1 LEFT JOIN table_2 ON table_1.une_colonne = table_2.autre_colonne LEFT JOIN table_3 ON table_1.une_colonne = table_3.autre_colonne;

Vous pouvez ajouter autant de tables que vous le souhaitez à condition de suivre toujours les mêmes procédés à savoir utiliser la clause LEFT JOIN suivie de ON et les clés de jointures.

Pour résumer tout ce qui est énuméré ci-haut, il faut retenir que LEFT JOIN commence la jointure par la table de gauche avant d’inclure les correspondances qui se trouvent dans la table de droite. Une ligne de gauche sans correspondant aura pour valeur NULL.

Et voilà, vous savez maintenant utiliser ce type de jointure, mais surtout comprendre son fonctionnement. Ainsi, vous pouvez optimiser vos requêtes jointes.

Pour connaître plus de fonctionnalités et d’instructions SQL, vous pouvez vous rendre sur notre blog. Nous vous invitons également à télécharger ce tutoriel sur Spark avec Scala si vous souhaitez apprendre davantage sur le Big Data.


Juvénal JVC

Juvénal est spécialisé depuis 2011 dans la valorisation à large échelle des données. Son but est d'aider les professionnels de la data à développer les compétences indispensables pour réussir dans le Big Data. Il travaille actuellement comme Lead Data Engineer auprès des grands comptes. Lorsqu'il n'est pas en voyage, Juvénal rédige des livres ou est en train de préparer la sortie d'un de  ses livres. Vous pouvez télécharger un extrait de son dernier livre en date ici : https://www.data-transitionnumerique.com/extrait-ecosystme-hadoop/

>