Cours SQL et MySQL · Module 7: Joindre des tables (JOIN)
LEFT JOIN - chaque parchemin du rayon de gauche
Dans cette leçon3
INNER JOIN ne montre que les paires complètes. Parfois, cependant, nous voulons voir toutes les lignes d'un rayon, même si elles n'ont pas de paire dans l'autre. C'est à cela que sert LEFT JOIN.
Ce que fait LEFT JOIN
A LEFT JOIN B retourne :
- toutes les lignes de la table de gauche (
A), - les lignes correspondantes de la table de droite (
B), - et là où il n'y a pas de correspondance, il remplit les colonnes de
Bavec la valeur NULL (le vide).
1SELECT c.nazwisko, w.data_wypozyczenia
2FROM czytelnicy c
3LEFT JOIN wypozyczenia w ON w.czytelnik_id = c.id;Cela signifie : « Montre chaque lecteur, et à côté de lui la date de son emprunt - et s'il n'a jamais rien emprunté, laisse un espace vide (NULL) ».
| nazwisko | data_wypozyczenia |
|---|---|
| z Aleksandrii | 0250-03-01 |
| Nowicjusz | NULL |
Quand l'utiliser
LEFT JOIN est idéal quand nous ne voulons pas perdre de lignes sans paire. L'exemple classique : une liste de lecteurs qui n'ont rien emprunté. Avec INNER JOIN, ces lecteurs disparaîtraient - car ils n'ont aucune ligne dans wypozyczenia.
Le filtre d'absence : IS NULL
Puisque les correspondances manquantes produisent NULL, nous pouvons les filtrer. Pour trouver les lecteurs sans le moindre emprunt, nous cherchons les références croisées vides :
1SELECT c.nazwisko
2FROM czytelnicy c
3LEFT JOIN wypozyczenia w ON w.czytelnik_id = c.id
4WHERE w.id IS NULL;C'est une combinaison puissante : LEFT JOIN garde tout le monde, et WHERE w.id IS NULL ne laisse que ceux sans paire. De la même façon, nous trouvons des catégories vides ou des auteurs sans livres.
Tu as repéré une erreur dans cette leçon ?
Teste tes connaissances
Réponds aux questions de cette leçon. Choisis une réponse pour voir tout de suite si elle est correcte.
1. Que va renvoyer un LEFT JOIN des tables A et B (A LEFT JOIN B) ?
2. Dans quel cas LEFT JOIN est-il meilleur qu'INNER JOIN ?
Voici 2 des 4 questions de cette leçon. Réponds aux autres dans le jeu.
Tâches pratiques dans le jeu
- Éditeur de code
Écris une requête qui affiche le nazwisko de chaque lecteur et la data_wypozyczenia de la table wypozyczenia. Utilise LEFT JOIN pour que les lecteurs sans emprunt soient affichés aussi. Alias : czytelnicy c, wypozyczenia w, condition w.czytelnik_id = c.id.
- Tri horizontal
Ordonne sur une ligne la clause LEFT JOIN correcte qui joint wypozyczenia avec les lecteurs (de gauche à droite) :
- Éditeur de code
Écris une requête qui liste le nazwisko des lecteurs qui n'ont JAMAIS rien emprunté. Utilise czytelnicy c LEFT JOIN wypozyczenia w ON w.czytelnik_id = c.id et ne garde que les lignes où w.id vaut NULL.
- Éditeur de code
Écris une requête qui affiche le nom de chaque catégorie (la colonne nazwa) et le tytul d'un livre de cette catégorie. Utilise LEFT JOIN pour que les catégories sans livre soient affichées aussi. Alias : kategorie kat, ksiazki k, condition k.kategoria_id = kat.id.
- Tri vertical
Ordonne les parties d'une requête qui trouve les lecteurs sans emprunt (de haut en bas) :