CodeGym /Cours /SQL SELF /Utilisation de LEFT JOIN : inclure toutes l...

Utilisation de LEFT JOIN : inclure toutes les données de la table de gauche

SQL SELF
Niveau 11, Leçon 2
Disponible

Imagine que tu as deux tables : une liste d'étudiants et une liste de leurs inscriptions aux cours. Tous les étudiants ne sont pas inscrits à des cours, et tu veux voir la liste complète de tous les étudiants, y compris ceux qui, pour une raison ou une autre, n'ont pas encore choisi de cours. Avec INNER JOIN, tu ne verras que ceux qui sont inscrits à des cours, mais qu'en est-il des autres étudiants ? C'est là qu'intervient le LEFT JOIN.

LEFT JOIN renvoie toutes les lignes de la table de gauche (celle qui est indiquée en premier dans la requête) et les lignes correspondantes de la table de droite. S'il n'y a pas de correspondance, les colonnes de la table de droite auront la valeur NULL.

Syntaxe de LEFT JOIN

SELECT
    table1.colonne1,
    table1.colonne2,
    table2.colonne1,
    table2.colonne2    
FROM 
    table1 LEFT JOIN table2
ON 
    table1.colonne_commune = table2.colonne_commune;
  • table1 — c'est la table "de gauche".
  • table2 — c'est la table "de droite".
  • colonne_commune — la colonne commune sur laquelle on fait la jointure.

Exemple simple

Si la table students ressemble à ça :

student_id name
1 Otto
2 Anna
3 Peter

Et la table enrollments ressemble à ça :

enrollment_id student_id course
1 1 Mathématiques
2 1 Physique
3 2 Biologie

Alors la requête :

SELECT
    students.name, 
    enrollments.course
FROM 
    students LEFT JOIN enrollments
ON 
    students.student_id = enrollments.student_id;

donnera :

name course
Otto Mathématiques
Otto Physique
Anna Biologie
Peter NULL

Comme tu peux le voir, tous les étudiants restent dans le résultat, même Peter, qui ne s'est pas encore inscrit à un cours. Pour Peter, dans la colonne course, tu as NULL.

Exemples d'utilisation de LEFT JOIN

Exemple 1 : Obtenir la liste de tous les étudiants et leurs cours

Regardons le cas où tu veux la liste complète des étudiants avec les cours auxquels ils sont inscrits, s'il y en a. Si un étudiant n'a pas encore choisi de cours, ça doit aussi apparaître.

La même requête :

SELECT
    students.name, 
    enrollments.course
FROM 
    students LEFT JOIN enrollments
ON 
    students.student_id = enrollments.student_id;

Résultat :

name course
Otto Mathématiques
Otto Physique
Anna Biologie
Peter NULL

C'est un exemple classique d'utilisation de LEFT JOIN.

Exemple 2 : Afficher les produits et leurs ventes

Imaginons que tu as deux tables :

La table products, qui contient tous les produits :

product_id product_name
1 Smartphone
2 Tablette
3 Ordinateur portable

La table sales, qui contient les données de ventes :

sale_id product_id quantity
1 1 5
2 1 3
3 2 2

Maintenant tu veux voir tous les produits et la quantité vendue, y compris ceux qui n'ont pas encore été vendus.

SELECT
    products.product_name, 
    SUM(sales.quantity) AS total_sold
FROM 
    products LEFT JOIN sales
    ON 
    products.product_id = sales.product_id
GROUP BY 
    products.product_name;

Résultat :

product_name total_sold
Smartphone 8
Tablette 2
Ordinateur portable NULL

Particularités et problèmes avec LEFT JOIN

Est-ce qu'on veut toujours du NULL ?
Parfois, LEFT JOIN ajoute du NULL là où tu ne t'y attends pas. Dans ces cas-là, tu peux remplacer NULL par une valeur plus parlante avec la fonction COALESCE().

SELECT
    students.name, 
    COALESCE(enrollments.course, 'Cours non choisi') AS course
FROM 
    students LEFT JOIN enrollments
ON 
    students.student_id = enrollments.student_id;

Résultat :

name course
Otto Mathématiques
Otto Physique
Anna Biologie
Peter Cours non choisi

Doublons inutiles
Si les données dans la table de droite contiennent des doublons, le résultat de la requête aura plus de lignes que tu ne t'y attends. Fais bien attention aux données avec lesquelles tu bosses, et utilise DISTINCT si tu ne veux pas de doublons.

2
Mission
SQL SELF, niveau 11, leçon 2
Bloqué
Liste complète des étudiants et de leurs cours
Liste complète des étudiants et de leurs cours
2
Mission
SQL SELF, niveau 11, leçon 2
Bloqué
Liste complète des produits et de leurs ventes
Liste complète des produits et de leurs ventes
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION