Jointure · 30 min
Jointures multiples et self-join
Une requête peut croiser trois tables ou plus (etudiants → inscriptions → cours → notes), ou comparer une table a elle-meme (self-join) pour des relations hierarchiques ou des comparaisons entre lignes de la meme table.
Contexte
Une requête peut croiser trois tables ou plus (etudiants → inscriptions → cours → notes), ou comparer une table a elle-meme (self-join) pour des relations hierarchiques ou des comparaisons entre lignes de la meme table.
Explication
On peut enchainer plusieurs JOIN : FROM t1 JOIN t2 ON ... JOIN t3 ON ... Le self-join joint une table a elle-meme en utilisant des alias (t1 et t2). On le utilise pour les relations recuesives ou les comparaisons intra-table.
Exemple avec 3 tables : SELECT ... FROM etudiants e INNER JOIN inscriptions i ON i.etudiant_id = e.id INNER JOIN cours c ON c.id = i.cours_id;
Exemple self-join (table employes avec manager_id) : SELECT e.nom, m.nom AS manager FROM employes e LEFT JOIN employes m ON m.id = e.manager_id;
Exemple guidé
Objectif : afficher les etudiants avec leur cours et leur note.
1. Trois tables : etudiants, inscriptions, cours 2. Deux jointures : e→i (via etudiant_id), i→c (via cours_id) 3. On selectionne les colonnes pertinentes
SELECT e.prenom, e.nom, c.nom AS cours
FROM etudiants e
INNER JOIN inscriptions i ON i.etudiant_id = e.id
INNER JOIN cours c ON c.id = i.cours_id
ORDER BY e.nom, c.nom;
| prenom | nom | cours |
|---|---|---|
| Khadija | Ba | Algèbre linéaire |
| Khadija | Ba | Bases de données |
| Khadija | Ba | Microéconomie |
| Mariama | Cissé | Microéconomie |
| Mariama | Cissé | Réseaux |
| Awa | Diop | Analyse 2 |
| Awa | Diop | Macroéconomie |
| Awa | Diop | Réseaux |
| Pape | Diouf | Bases de données |
| Pape | Diouf | Littérature moderne |
| Pape | Diouf | Programmation Python |
| Ibrahima | Fall | Analyse 2 |
| Ibrahima | Fall | Programmation Python |
| Ousmane | Gueye | Mécanique classique |
| Ousmane | Gueye | Programmation Python |
| Ndeye | Mbaye | Analyse 2 |
| Ndeye | Mbaye | Mécanique classique |
| Moussa | Ndiaye | Algèbre linéaire |
| Moussa | Ndiaye | Bases de données |
| Moussa | Ndiaye | Programmation Python |
| Fatou | Sarr | Bases de données |
| Fatou | Sarr | Macroéconomie |
| Fatou | Sarr | Mécanique classique |
| Aminata | Sow | Algèbre linéaire |
| Aminata | Sow | Bases de données |
| Aminata | Sow | Microéconomie |
| Aminata | Sow | Réseaux |
| Cheikh | Sy | Bases de données |
| Cheikh | Sy | Littérature moderne |
À retenir
On peut chainer 3 JOIN ou plus pour croiser plusieurs tables. Chaque JOIN a sa propre condition ON. Le self-join utilise deux alias de la meme table. Attention a la condition de jointure : incomplet = resultat incorrect (produit cartesien).