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.

Mis à jour le
15/5/2024

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 :

SELECT * FROM tableA LEFT JOIN tableB ON tableA.column1 = tableB.column2

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 :

SELECT * FROM tableA LEFT OUTER JOIN tableB ON tableA.column1 = tableB.column2

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.

Id Nom Nbr_employes Ville
1 DataBird 20 Paris
2 SQL Corporation 3000 New York
3 SQL Company 2500 Dubaï
4 Python Corp. 10 000 New York
5 SQL Père & Fils 7 Limoges
6 SGBDR Factory 250 Bangkok

Et la table intitulée « sales » indique les chiffres d’affaires de différentes entreprises.

Company_id Revenues Country
9 5 000 000 Chine
1 200 000 France
3 750 000 EAU
11 80 000 Thaïland
2 1 000 000 USA
5 500 000 Mexique

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 :

SELECT * FROM company LEFT JOIN sales ON company.Id = sales.Company_id

Nous obtenons le résultat suivant :

Id Nom Nbr_employes Ville Revenues Country
1 DataBird 20 Paris 200 000 France
2 SQL Corporation 3000 New York 1 000 000 USA
3 SQL Company 2500 Dubaï 750 000 EAU
4 Python Corp. 10 000 New York NULL NULL
5 SQL Père & Fils 7 Limoges 500 000 Mexique
6 SGBDR Factory 250 Bangkok NULL NULL

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 :

SELECT * FROM sales LEFT JOIN company ON sales.Company_id = company.Id

Dans ce cas, on obtient la table suivante :

Id Revenues Country Nom Nbr_employes Ville
9 5 000 000 Chine NULL NULL NULL
1 200 000 France DataBird 20 Paris
3 750 000 EAU SQL Company 2500 Dubaï
11 80 000 Thaïland NULL NULL NULL
2 1 000 000 USA SQL Corporation 3000 New York
5 500 000 Mexique SQL Père & Fils 7 Limoges

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 :

SELECT * FROM company INNER JOIN sales ON company.Id = sales.Company_id

On aurait obtenu :

Id Nom Nbr_employes Ville Country Revenues
1 DataBird 20 Paris Paris 200 000
2 SQL Corporation 3000 New York USA 1 000 000
3 SQL Company 2500 Dubaï EAU 750 000
5 SQL Père & Fils 7 Limoges Mexique 500 000

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 » :

Id Nom Nbr_employes Ville
1 DataBird 20 Paris
2 SQL Corporation 3000 New York
3 SQL Company 2500 Dubaï
4 Python Corp. 10 000 New York
5 SQL Père & Fils 7 Limoges
6 SGBDR Factory 250 Bangkok

Et la table « sales »

Company_id Revenues Country
9 5 000 000 Chine
1 200 000 France
3 750 000 EAU
11 80 000 Thaïland
2 1 000 000 USA
5 500 000 Mexique

On peut utiliser la commande ORDER BY pour trier les résultats de notre jointure par ordre alphabétique.

Avec la requête :

SELECT *
FROM company
LEFT JOIN sales ON company.Id = sales.Company_id
ORDER BY Nom

On obtient alors :

Id Nom Nbr_employes Ville Revenues Country
1 DataBird 20 Paris 200 000 Paris
4 Python Corp. 10 000 New York NULL NULL
3 SQL Company 2500 Dubaï 750 000 EAU
2 SQL Corporation 3000 New York 1 000 000 USA
6 SGBDR Factory 250 Bangkok NULL NULL
5 SQL Père & Fils 7 Limoges 500 000 Mexique

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.

Rejoignez-nous pour notre Journée Portes Ouvertes en live le 27 juin à 18h30
Explorez le bootcamp Databird ainsi que nos programmes de formation data.
Je m'inscris à l'évènement
Faites un premier pas dans la data avec nos cours gratuits
Démarrer

Nos derniers articles sur

SQL

Pour préparer l’année 2024, Databird vous propose une petite révision sur le requêtage SQL. Voici 6 requêtes à connaître obligatoirement en 2024 pour coder en SQL.
Le monde de la data vous intéresse et vous souhaitez en savoir plus ? Découvrez le langage SQL et ses applications dans l’exploitation de base de données.
Le NoSQL est une des bases de données les plus utilisées dans le Big Data. Sa simplicité et sa flexibilité en font un outil puissant pour les Data Analysts.
Difficulté :