SQL : Left Join
LEFT JOIN sert à fusionner des tables sans perdre certaines données. Découvrez la mise en œuvre de cette commande avec des exemples concrets.
Parmi les diverses requêtes SQL, LEFT JOIN est un incontournable. En effet, combien de fois vous êtes-vous demandé comment manipuler les données de deux tables distinctes, tout en conservant l’intégralité des informations de l’une des tables ? Si la réponse est : « de nombreuses fois », rassurez-vous, la commande LEFT JOIN est justement là pour répondre à vos besoins ! Quelques sceptiques pourront toujours s’inquiéter de la complexité liée à la diversité des jointures existantes… Les équipes de DataBird vous ont justement concocté un article qui vise à comprendre en détail le fonctionnement et la mise en œuvre de la commande LEFT JOIN tout en évitant les confusions qui peuvent exister entre les différentes jointures !
Qu’est-ce que la commande LEFT JOIN ?
Comme son nom l’indique, LEFT JOIN est un type de jointure au même titre que INNER JOIN ou RIGHT JOIN. L’idée derrière la commande LEFT JOIN est de pouvoir fusionner deux tables tout en conservant l’intégralité des lignes de l’une des tables.
Ainsi on pourra lister toutes les lignes de l’une des tables (celle placée à gauche dans la requête comme le laisse entendre la dénomination de la commande) même en l’absence de correspondance avec la seconde table.
Comme souvent en SQL, plusieurs syntaxes nous permettent d’arriver au même résultat. La façon « classique » d’exprimer une requête avec la commande LEFT JOIN est la suivante :
Détaillons cette requête.
Pour rappel SELECT * est une puissante commande de SQL qui vous permet de récupérer toutes les colonnes sans avoir à les mentionner une par une.
Le bloc FROM tableA LEFT JOIN tableB spécifie que nous réalisons une jointure entre les tables « tableA » et « tableB ». La spécificité de la commande LEFT JOIN est que nous allons récupérer toutes les données de « tableA » même s’il n’y a pas de correspondance avec « tableB ».
Nous verrons dans l’exemple qui suit que dans le cas où il n’y a pas de correspondance, les colonnes de « tableB » seront remplies de NULL.
Le bloc ON tableA.column1 = tableB.column2 stipule que la jointure doit se faire sur la colonne « column1 » de « tableA » et la colonne « column2 » de « tableB ». En général, on associe la clé primaire de la table de gauche avec la clé étrangère de la table de gauche dans la requête.
La seconde façon d’exprimer la requête est la suivante :
En effet, les commandes LEFT OUTER JOIN et LEFT JOIN sont équivalentes.
PS : Si vous êtes perdu, n’hésitez pas à regarder du côté de nos formations gratuites en ligne. Nous proposons énormément de ressources en ligne pour aider tous les Data Analysts débutants et confirmés.
Un exemple concret d’application de la commande LEFT JOIN
Prenons un cas d’application concret afin de rendre la partie précédente plus claire. Dans nos exemples, nous allons nous appuyer sur les deux tables suivantes :
La table intitulée « company » fournit des informations générales sur diverses entreprises.
Et la table intitulée « sales » indique les chiffres d’affaires de différentes entreprises.
Vous l’avez compris, l'utilité de la commande LEFT JOIN est de ne pas perdre d’information sur l’une des tables, même en l’absence de correspondance avec l’autre table.
Imaginons ainsi que vous souhaitiez compléter les informations que vous possédez sur la table « company » avec les informations de la table « sales ». Tout cela sans perdre une seule ligne de la table « company » même si une entreprise de cette table n’est pas présente dans la table « sales ».
Alors la requête s’exprime alors :
Nous obtenons le résultat suivant :
Que constatons-nous ?
- On a bien récupéré toutes les lignes de table « company », même lorsque les entreprises présentes dans cette table ne sont pas présentes dans la table « sales »
- Dans le cas où les entreprises dont l’id apparaît dans la table « company », mais pas dans la table « sales », alors dans la nouvelle table fusionnée, les colonnes relatives à la table « sales » sont remplies de NULL.
- Dans notre exemple c’est le cas pour les entreprises dont l’id est 4 et
- Dernier point, mais non des moindres : l'opération permet d'identifier certaines incohérences entre les tables (Limoges au Mexique ?!). En réalité, sans vérification préalable de la véracité des informations dans chacune des tables, rien ne s'oppose à l'apparition d’incohérences.
Les plus curieux se demandent sans doute ce qu’il se passe lorsque l’on inverse l’ordre des tables dans la requête et que cette dernière devient :
Dans ce cas, on obtient la table suivante :
On constate encore une fois que l’on n’a perdu aucune ligne de la table « sales » qui est désormais à gauche dans la requête. Ce sont ainsi les entreprises dont l’id n’était pas dans la table « company » pour lesquelles les colonnes relatives à la table « company » sont vides.
Si vous voulez aller encore plus loin, n’hésitez pas à découvrir nos formations en présentiel à Paris ou à distance. En 8 semaines (à temps plein) ou 12 semaines (en temps partiel), vous apprendrez à manier les données et pourrez approfondir vos compétences analytiques pour devenir incollables en data analyse.
LEFT JOIN et INNER JOIN, quelle différence ?
Pour ceux qui ont suivi notre cours sur INNER JOIN, vous pouvez peut-être vous demander ce qui différencie ces deux types de jointures.
Pour rappel, INNER JOIN est un type de jointure qui ne conserve que les lignes des tables pour lesquelles on retrouve une correspondance dans les deux tables. Ainsi, à l’inverse de LEFT JOIN, INNER JOIN fournit un ensemble de résultats minimal.
Dans l’exemple précédent, avec la requête :
On aurait obtenu :
On constate bien que les entreprises avec les id 4, 6, 9, 11, qui ne sont pas présentes dans les deux tables, ne sont pas représentées à travers cette jointure INNER JOIN.
{{banniere-article}}
Un exemple plus poussé de la commande INNER JOIN avec ORDER BY
Une fois que l’utilisation de la commande INNER JOIN est bien assimilée, il est tout à fait possible de la combiner pour réaliser des requêtes plus poussées. Nous vous en proposons un exemple ci-dessous.
On considère à nouveau les tables « company » :
Et la table « sales »
On peut utiliser la commande ORDER BY pour trier les résultats de notre jointure par ordre alphabétique.
Avec la requête :
On obtient alors :
Ainsi on obtient la même jointure que dans la partie précédente, mais avec les résultats triés par ordre alphabétique selon la colonne « Nom ».
Conclusion
Grâce à la commande LEFT JOIN vous êtes désormais capable de faire des jointures sans perdre les informations d’une table.
Si vous souhaitez être incollable sur le langage SQL, suivez notre formation SQL d’une durée de 6 semaines.