Cours SQL et MySQL · Module 7: Joindre des tables (JOIN)

Auto-jointure et INNER face à LEFT

2 min de lecture
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 czytelnicy avec wypozyczenia - ce lecteur disparaît, car il n'y a pas de paire.
  • LEFT JOIN czytelnicy avec wypozyczenia - ce lecteur reste, et la date d'emprunt est NULL.
INNER JOINLEFT JOIN
Lignes sans pairedisparaissentrestent (avec NULL)
Quand l'utiliserseulement les paires complètestoutes 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. 1. Quelle est la différence essentielle entre INNER JOIN et LEFT JOIN ?

  2. 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) :