Cours SQL et MySQL · Module 7: Joindre des tables (JOIN)
Auto-jointure et INNER face à LEFT
Dans cette leçon2
Avant de quitter le pont, tu apprendras deux subtilités de la jointure des rayons : la différence entre INNER et LEFT en pratique, et une astuce appelée l'auto-jointure (self-join).
INNER face à LEFT - sur un exemple
Imagine un lecteur qui vient de s'inscrire et n'a encore rien emprunté.
- INNER JOIN
czytelnicyavecwypozyczenia- ce lecteur disparaît, car il n'y a pas de paire. - LEFT JOIN
czytelnicyavecwypozyczenia- ce lecteur reste, et la date d'emprunt est NULL.
| INNER JOIN | LEFT JOIN | |
|---|---|---|
| Lignes sans paire | disparaissent | restent (avec NULL) |
| Quand l'utiliser | seulement les paires complètes | toutes les lignes de gauche |
C'est la seule différence - mais vraiment fondamentale - entre ces deux ponts.
Auto-jointure - un rayon relié à lui-même
Parfois, nous joignons une table avec elle-même (self-join). Nous lui donnons alors deux alias différents, comme s'il s'agissait de deux rayons séparés :
1SELECT a1.nazwisko, a2.nazwisko
2FROM autorzy a1
3INNER JOIN autorzy a2 ON a1.kraj = a2.kraj;Cette requête associe par paires les auteurs du même pays. Les alias a1 et a2 sont deux « copies » de la même table autorzy - grâce à elles, MySQL sait quelle ligne est visée dans la condition ON et dans SELECT.
L'auto-jointure est utile partout où nous comparons des lignes au sein d'une seule table - par exemple des auteurs du même pays ou des livres publiés la même année. C'est une astuce de pont avancée mais puissante.
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. Quelle est la différence essentielle entre INNER JOIN et LEFT JOIN ?
2. Qu'est-ce qu'une auto-jointure (self-join) ?
Voici 2 des 4 questions de cette leçon. Réponds aux autres dans le jeu.
Tâches pratiques dans le jeu
- Tri horizontal
Ordonne sur une ligne la clause d'auto-jointure correcte pour la table autorzy (de gauche à droite) :
- Éditeur de code
Écris une requête qui affiche les noms des paires d'auteurs venant du même pays. Joins autorzy a1 avec autorzy a2 grâce à INNER JOIN sur a1.kraj = a2.kraj. Sélectionne a1.nazwisko et a2.nazwisko.
- Tri vertical
Ordonne les parties d'une auto-jointure de la table autorzy (de haut en bas) :
- Clique dans l'ordre
Clique sur les éléments dans l'ordre pour construire une requête qui joint les trois tables des emprunts :
- Éditeur de code
Écris une requête qui affiche data_wypozyczenia, le nazwisko du lecteur, le tytul du livre et le nom de la catégorie (nazwa). Joins wypozyczenia w avec czytelnicy c (sur w.czytelnik_id = c.id), avec ksiazki k (sur w.ksiazka_id = k.id) et avec kategorie kat (sur k.kategoria_id = kat.id), grâce à INNER JOIN.
- Tri horizontal
Ordonne sur une ligne la condition de jointure correcte pour la troisième table ksiazki dans le rapport d'emprunts (de gauche à droite) :
- Éditeur de code
Écris une requête qui affiche le tytul du livre, le nazwisko de l'auteur et son kraj. Joins ksiazki (alias k) avec autorzy (alias a) grâce à INNER JOIN sur k.autor_id = a.id.
- Clique dans l'ordre
Clique sur les éléments dans l'ordre pour construire une requête avec RIGHT JOIN qui joint ksiazki avec autorzy :
- Tri vertical
Ordonne les parties d'une requête qui joint trois tables : le livre, l'auteur et la catégorie (de haut en bas) :