Database
 sql >> Base de données >  >> RDS >> Database

Comment joindre plusieurs tables (3+) dans une seule déclaration

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.