Retour à la liste des articles Articles
7 minutes de lecture

Qu'est-ce que LEFT JOIN en SQL ?

Découvrez les détails du LEFT JOIN, l'un des types de jointures SQL les plus courants.

Le langage SQL consiste principalement à extraire des données des bases de données. Très souvent, vous aurez besoin de combiner des données provenant de plusieurs tables de votre base de données. C'est là que les jointures entrent en jeu.

Le LEFT JOIN est l'un des types de JOIN que vous êtes susceptible d'utiliser très souvent. Dans cet article, je vais vous expliquer la syntaxe du LEFT JOIN et son fonctionnement à l'aide de plusieurs exemples et illustrations.

JOIN en SQL

En SQL, vous utilisez JOIN pour combiner les données de deux tables sur la base d'une colonne dont les valeurs correspondent. Par exemple, si vous disposez d'une table contenant des informations sur les clients (ID client, prénom, nom, etc.) et d'une autre table contenant les données relatives aux commandes pour une période spécifique (ID commande, date, ID client, ID produit, etc.), vous pouvez joindre ces deux tables sur la base des colonnes qui stockent les numéros d'identification des clients. Vous obtiendrez ainsi les détails de la commande et du client pour chaque client.

Toutefois, il est important de savoir qu'il existe différents types de jointures en SQL. Vous devrez choisir le bon type en fonction des lignes que vous souhaitez conserver dans le jeu de résultats. Si vous vous intéressez aux clients qui n'ont passé des commandes que pendant une période donnée, vous utiliserez une simple JOIN (également appelée INNER JOIN). Ce type de jointure SQL ne conserve que les lignes présentes dans les deux tables ; dans notre cas, vous ne verrez une ligne dans le jeu de résultats que si l'ID du client figure dans la table customers ainsi que dans la table orders et dans la table

Il existe des cas où vous souhaitez conserver des lignes de la première table qui n'ont pas d'enregistrements correspondants dans la deuxième table. Nous pouvons vouloir voir des informations sur tous les clients de notre ensemble de résultats, même s'ils n'ont pas passé de commande au cours d'une période spécifique. Dans ce cas, vous utiliserez un LEFT JOIN, qui combine les données de deux tables de sorte que toutes les lignes de la table de gauche (la première) soient incluses dans le résultat.

C'est le type de JOIN sur lequel nous allons nous concentrer dans cet article. Si vous n'êtes pas sûr du type de jointure dont vous avez besoin dans un cas particulier, consultez notre tutoriel vidéo sur les jointures SQL LEFT, RIGHT et FULL.

Explication du LEFT JOIN

LEFT JOINLa jointure gauche, également appelée LEFT OUTER JOIN, renvoie tous les enregistrements de la table de gauche (première) et les enregistrements correspondants de la table de droite (deuxième). S'il n'y a pas de correspondance pour un enregistrement spécifique, vous obtiendrez NULLs dans les colonnes correspondantes de la table de droite. Voyons comment cela fonctionne avec l'exemple des clients et des commandes mentionné ci-dessus.

Voici nos customers et orders .

customers
idfirst_namelast_name
1SteveBrown
2HelenStewart
3JaneSmith
4JackBond

orders
iddatecustomer_idproduct_idamount
12020-12-20323213.99
22020-12-20312412.45
32020-12-2111889.95
42020-12-224854.60

Pour joindre ces deux tables tout en conservant tous les enregistrements de la table customers table, vous pouvez utiliser la requête SQL suivante :

SELECT *
FROM customers
LEFT JOIN orders
ON customers.id = orders.customer_id
ORDER BY customers.id;

Passons en revue la syntaxe du LEFT JOIN:

  • SELECT - Commencez par énumérer les colonnes (des deux tables) que vous souhaitez voir apparaître dans le jeu de résultats (ici, nous sélectionnons toutes les colonnes en utilisant *) ;
  • FROM - Mettez le nom de la table de gauche, celle où vous voulez garder tous les enregistrements (c'est à dire customers) ;
  • LEFT JOIN - Mettez le nom de la deuxième table (droite) (c'est-à-dire orders) ;
  • ON - Utilisez ce mot-clé pour indiquer les colonnes qui seront utilisées pour joindre les tables, c'est-à-dire celles qui ont les valeurs correspondantes. (Ici, il s'agit de id à partir de customers et customer_id de orders).

Dans cette requête, nous utilisons également ORDER BY pour ordonner le résultat par l'ID du client, mais ceci est facultatif.

Après avoir exécuté cette requête, vous obtiendrez le tableau suivant.

customersorders
idfirst_namelast_nameiddatecustomer_idproduct_idamount
1SteveBrown12020-12-2111889.95
2HelenStewart[NULL][NULL][NULL][NULL][NULL]
3JaneSmith32020-12-20323213.99
3JaneSmith32020-12-20312412.45
4JackBond42020-12-224854.60

Jetez un coup d'œil à l'animation :

Gif montrant comment fonctionne LEFT JOIN

Comment fonctionne le LEFT JOIN ?

Tout d'abord, la base de données examine chaque ligne de la table de gauche et recherche une correspondance dans la table de droite en fonction des colonnes associées. S'il y a une correspondance, elle ajoute les données de la table de droite à la ligne correspondante de la table de gauche. S'il y a plusieurs correspondances (comme dans notre cas avec le client n° 3), il duplique la ligne dans la table de gauche pour inclure tous les enregistrements de la table de droite. S'il n'y a pas de correspondance, il conserve la ligne de la table de gauche et place NULL dans les colonnes correspondantes de la table de droite (client n° 2 dans notre exemple).

C'est simple, n'est-ce pas ? Vous pouvez vous entraîner aux LEFT JOINs dans ce cours interactif Les jointures en SQL . Voyons maintenant d'autres exemples d'utilisation des LEFT JOIN.

Utilisation des LEFT JOINs en SQL

Exemple avec des employés

Nous avons une table contenant employees info et nous voulons la joindre à la table qui répertorie toutes les primes versées en janvier (jan_bonuses).

employees
idfirst_namelast_name
1JoeBiden
2BernieSanders
3PeterButtigieg
4ElizabethWarren
5MichaelBloomberg

jan_bonuses
idemployee_idamount
10113460.00
10222340.00
10341800.00

Nous voulons joindre ces tables afin de voir qui a reçu des primes en janvier. Notre résultat doit inclure tous les employés, qu'ils aient reçu une prime ou non. Nous allons donc utiliser une LEFT JOIN:

SELECT *
FROM employees
LEFT JOIN jan_bonuses
ON employees.id = jan_bonuses.employee_id;
employeesjan_bonuses
idfirst_namelast_nameidemployee_idamount
1JoeBiden10113460.00
2BernieSanders10222340.00
3PeterButtigieg[NULL][NULL][NULL]
4ElizabethWarren10341800.00
5MichaelBloomberg[NULL][NULL][NULL]

Comme prévu, le résultat inclut tous les employés. Si un employé n'est pas trouvé dans le tableau contenant les informations sur les primes, les colonnes correspondantes du second tableau sont remplies avec les valeurs NULL.

Vous souhaitez savoir comment fonctionnent les autres OUTER JOIN ? Lisez ce guide illustré sur le SQL OUTER JOIN pour apprendre comment RIGHT OUTER JOIN et FULL OUTER JOIN diffèrent de LEFT OUTER JOIN.

Exemple avec des pays

Dans notre dernier exemple, nous allons joindre deux tables à l'aide de LEFT JOIN, mais nous n'inclurons que certaines colonnes dans le résultat final.

Nous avons une liste de pays avec quelques informations de base et nous voulons la compléter avec les données du PIB pour 2019, lorsqu'elles sont disponibles.

countries
idnamepopulationcurrencyarea
201United States330,770,244USD9,525,067
202China1,405,631,120CNY9,596,961
203Japan125,770,000JPY377,975
204Germany83,122,889EUR357,114
205India1,370,521,240INR3,287,263

gdp_2019
rankcountry_idgdp_nominal_MUSD
120121,427,700
220214,342,903
32035,081,770

Dans notre résultat, nous n'avons pas besoin de toutes les informations sur chaque pays - seulement l'ID du pays, son nom, sa population et son PIB nominal pour 2019. Voici la requête que nous utiliserons :

SELECT id, name, population, gdp_nominal_MUSD
FROM countries
LEFT JOIN gdp_2019
ON countries.id = gdp_2019.country_id;
countriesgdp_2019
idnamepopulationgdp_nominal_MUSD
201United States330,770,24421,427,700
202China1,405,631,12014,342,903
203Japan125,770,0005,081,770
204Germany83,122,889[NULL]
205India1,370,521,240[NULL]

La table comprend trois colonnes de la table countries et une colonne de la table gdp_2019 et une colonne de la table info. Comme prévu, LEFT JOIN conserve tous les enregistrements de la première table et introduit les valeurs NULL pour les enregistrements non appariés.

Notez que dans cette déclaration SELECT, nous avons simplement énuméré les noms des colonnes que nous voulons voir apparaître dans le résultat. Cela ne fonctionne que si nous n'avons pas de colonnes portant le même nom dans les deux tables. L'approche la plus sûre consiste à spécifier la table pour chaque colonne demandée, par exemple countries.id, countries.name, countries.population, gdp_2019.gdp_nominal_MUSD.

Si vous devez effectuer une jointure gauche (LEFT JOIN) pour plus de deux tables, lisez mon guide sur la jointure gauche de plusieurs tables en SQL.

Il est temps de pratiquer le LEFT JOIN !

Vous avez appris la syntaxe de LEFT JOIN et savez quand et comment utiliser ce type de jointure SQL. Vous êtes prêt pour l'étape suivante - écrire vos propres requêtes SQL avec des LEFT JOINs.

Je vous recommande de commencer par notre Les jointures en SQL qui comprend 93 exercices interactifs couvrant les jointures INNER JOIN, OUTER JOIN, les jointures non égales et bien plus encore. Après avoir terminé ce cours, vous saurez comment choisir le bon type de JOIN, comment joindre plusieurs tables, comment joindre une table avec elle-même et comment joindre des tables en utilisant des opérateurs conditionnels autres que l'égalité.

Vous n'êtes pas sûr de vouloir pratiquer Les jointures en SQL en ligne ? Consultez cet article qui présente les meilleures approches pour s'exercer à différents types de Les jointures en SQL.

Merci de votre lecture et bon apprentissage !