Problème :
Vous souhaitez combiner les données de plus de deux tables à l'aide d'une seule instruction SELECT.
Exemple :
Il y a quatre tables dans notre base de données :student
, teacher
, subject
, et learning
.
L'student
table contient des données dans les colonnes suivantes :id
, first_name
, et last_name
.
identifiant | prénom | nom_de_famille |
---|---|---|
1 | Tom | Miller |
2 | Jean | Printemps |
3 | Lisa | Williams |
4 | Élie | Aboyeur |
5 | James | Moore |
Le teacher
table contient des données dans les colonnes suivantes :id
, first_name
, last_name
, et subject
.
identifiant | prénom | nom_de_famille |
---|---|---|
1 | Milan | Smith |
2 | Charles | Davis |
3 | Marquer | Moore |
Le subject
table contient des données dans les colonnes suivantes :id
et name
.
identifiant | nom |
---|---|
1 | Anglais |
2 | Art |
3 | Musique |
Enfin, l'learning
table contient des données dans les colonnes suivantes :id
, mark
, subject_id
, student_id
, et teacher_id
.
identifiant | marque | id_sujet | identifiant_étudiant | id_enseignant |
---|---|---|---|---|
1 | 4 | 1 | 2 | 1 |
2 | 5 | 2 | 3 | 2 |
3 | 4 | 3 | 1 | 3 |
4 | 3 | 2 | 1 | 2 |
5 | 2 | 3 | 5 | 3 |
6 | 3 | 3 | 4 | 2 |
Nous voulons savoir quels étudiants étudient l'anglais, la musique et l'art, ainsi que les enseignants qui enseignent ces cours. Sélectionnez le sujet du cours, le nom de famille de l'étudiant qui suit ce cours et le nom de famille de l'enseignant qui dispense ce cours.
Solution :
Utiliser plusieurs JOIN
s dans votre requête :
SELECT l.name AS subject_name, t.last_name AS student_last_name, st.last_name AS teacher_last_name FROM learning AS l JOIN subject s ON l.subject_id=s.id JOIN student st ON l.student_id=st.id JOIN teacher t ON l.teacher_id=t.id;
Cette requête renvoie des enregistrements avec le nom du sujet du cours et les noms des étudiants et des enseignants :
subject_name | s_last_name | t_last_name |
---|---|---|
Musique | Moore | Miller |
Art | Davis | Miller |
Anglais | Smith | Printemps |
Art | Davis | Williams |
Musique | Davis | Aboyeur |
Musique | Moore | Moore |
Ces données proviennent de trois tables, nous devons donc joindre toutes ces tables pour obtenir les informations que nous recherchons.
Discussion :
Si vous souhaitez combiner des données stockées dans plusieurs (plus de deux) tables, vous devez utiliser le JOIN
opérateur plusieurs fois. Tout d'abord, vous joignez deux tables comme vous le feriez normalement (en utilisant JOIN
, LEFT JOIN
, RIGHT JOIN
, ou FULL JOIN
, selon le cas). Le JOIN
L'opération crée une "table virtuelle" qui stocke les données combinées des deux tables. Dans notre exemple, le tableau de résultats est une combinaison du learning
et subject
tableaux.
L'étape suivante consiste à joindre cette table de résultats à la troisième table (dans notre exemple, student
). C'est comme un JOIN
normal :vous rejoignez la "table virtuelle" et la troisième table avec une condition appropriée. Cette condition doit généralement inclure une ou plusieurs colonnes de la table supplémentaire (student
) et une ou plusieurs colonnes de la "table virtuelle". Dans notre exemple, nous référençons le student
table dans la seconde condition JOIN.
À ce stade, nous avons une nouvelle table virtuelle avec des données provenant de trois tables. La dernière étape consiste à ajouter les données de la quatrième table (dans notre exemple, teacher
). et joindre en utilisant la clé de ces tables (dans notre exemple, id
du teacher
table et teacher_id
de l'learning
tableau).
Si vous devez rejoindre une autre table, vous pouvez utiliser un autre JOIN
opérateur avec une condition appropriée dans la clause ON. En théorie, vous pouvez rejoindre autant de tables que vous le souhaitez.