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.
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 :
Et nous avons aussi la 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 :
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
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 :
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.