Retour à la liste des articles Articles
8 minutes de lecture

Comment écrire plusieurs jointures dans une requête SQL

Vous êtes-vous déjà demandé comment fonctionnent les jointures multiples ? Vous voulez savoir comment joindre plusieurs tables dans une seule requête ? Lisez cet article pour le découvrir !

Si vous commencez tout juste à vous familiariser avec SQL, vous avez peut-être eu du mal à comprendre le concept de SQL JOINs, surtout si vous devez joindre plus de deux tables dans une même requête. Ne vous inquiétez pas ! Dans cet article, nous allons explorer le fonctionnement de JOIN et résoudre tous ses mystères !

La meilleure façon d'apprendre le langage SQL est la pratique. Si vous souhaitez maîtriser la jonction de tables en SQL, consultez notre cours interactif. Les jointures en SQL cours interactif. Il propose plus de 90 exercices pratiques qui vous permettront d'écrire de nombreux types de JOIN.

Commençons par un exemple

Imaginez que vous disposez des trois tables suivantes player, team, et coach.

Comment écrire plusieurs jointures dans une seule requête SQL

Construisons une requête qui listera les noms de tous les joueurs, le nom de leur équipe et le nom de leur entraîneur. Vous pouvez obtenir toutes ces informations à l'aide de la requête suivante :

SELECT 
  player.name, 
  team.name, 
  coach.name
FROM player
JOIN team
ON player.team_id = team.id
JOIN coach
ON team.coach_id = coach.id;

Nous avons ici deux opérations JOIN différentes. Les tables player et team sont d'abord jointes, puis la table coach est également jointe.

Pour créer une condition de jointure, il faut que les deux tables jointes aient une colonne contenant la même information. La colonne team_id de la table player contient la valeur team_id; il s'agit de la même valeur que la colonne id de la table team de la table. La première condition de jointure est donc ON player.team_id = team.id

De même, la jointure entre la table team et la table coach est ON team.coach_id = coach.id.

Si vous avez du mal à vous souvenir de la syntaxe exacte de Les jointures en SQL, n'oubliez pas d'ajouter à vos favoris notre excellente feuille d'aide sur les jointures SQL!

Comment fonctionne la jointure de plusieurs tables

Supposons que nos tables contiennent les données suivantes :

coach
idname
1Mark Swanson
2Alice Wright
team
idnamecoach_id
1Ambitious Raptors2
2Fire Pandas1
3Steel Cats2
player
idnameteam_id
1John Rodger1
2Paul Smith1
3David McDonald2
4Sarah Grey3
5Sophie Brown3

Exécutons maintenant la requête qui listera les noms de tous les joueurs, le nom de leur équipe et le nom de leur entraîneur :

SELECT player.name, team.name, coach.name
FROM player
JOIN team
ON player.team_id = team.id
JOIN coach
ON team.coach_id = coach.id;

Nous obtiendrons le tableau suivant comme résultat :

player.nameteam.namecoach.name
John RodgerAmbitious RaptorsAlice Wright
Paul SmithAmbitious RaptorsAlice Wright
David McDonaldFire PandasMark Swanson
Sarah GreySteel CatsAlice Wright
Sophie BrownSteel CatsAlice Wright

D'accord, mais que se passe-t-il réellement "sous le capot" lorsque deux tables sont jointes ? Examinons notre exemple de plus près.

Tout d'abord, l'adresse JOIN des tables player et team forme une "table virtuelle". Elle ressemble à ceci :

player.idplayer.nameplayer.team_idteam.idteam.nameteam.coach_id
1John Rodger11Ambitious Raptors2
2Paul Smith11Ambitious Raptors2
3David McDonald22Fire Pandas1
4Sarah Grey33Steel Cats2
5Sophie Brown33Steel Cats2

Comme vous pouvez le voir, cette "table virtuelle" contient toutes les colonnes des tableaux player et team .

Nous avons joint 3 tables dans cet exemple de requête ! Qu'est-il arrivé à la table coach ? C'est très simple ! Nous avons déjà une "table virtuelle" composée des tables player et team Il semble donc que nous soyons à nouveau confrontés à une jointure de deux tables - mais cette fois-ci, nous joindrons la table coach à la "table virtuelle". La table jointe finale se présentera donc comme suit :

player.idplayer.nameplayer.team_idteam.idteam.nameteam.coach_idcoach.idcoach.name
1John Rodger11Ambitious Raptors22Alice Wright
2Paul Smith11Ambitious Raptors22Alice Wright
3David McDonald22Fire Pandas11Mark Swanson
4Sarah Grey33Steel Cats22Alice Wright
5Sophie Brown33Steel Cats22Alice Wright

Les colonnes qui appartiennent à la "table virtuelle" (la jointure des tables player et team) sont indiquées en orange ; les colonnes de la table coach sont indiquées en bleu.

Important: lorsque nous joignons une autre table, la condition de jonction doit inclure une colonne qui correspond à une colonne de l'une des tables précédemment jointes. Dans notre exemple, la table coach est jointe à la table virtuelle à l'aide de l'ID de l'entraîneur, qui est présent dans la table coach et dans la table team table. Il était donc présent dans la "table virtuelle". Vous pouvez imaginer que les tables jointes sont "liées" l'une à l'autre par des conditions de jointure :

Comment écrire plusieurs jointures dans une seule requête SQL

Bien entendu, il n'est pas nécessaire d'afficher toutes les colonnes de la table jointe. Dans les requêtes JOIN, nous spécifions généralement les colonnes que nous souhaitons afficher. Notez que c'est ce que nous avons fait dans l'exemple de requête ci-dessus : seuls le nom du joueur, le nom de l'équipe et le nom de l'entraîneur ont été affichés.

Tables de jonction

Une table de jonction est une table qui relie deux tables ou plus. De nombreuses jointures de plusieurs tables impliquent l'utilisation d'une table de jonction. Cela vous semble vague ? Voyons ce qu'il en est.

Imaginez que vous disposiez des tables author et book. Un auteur peut avoir écrit plusieurs livres et un livre peut avoir plusieurs auteurs. Pour modéliser une telle relation (nous l'appelons une relation de plusieurs à plusieurs), nous avons besoin d'une troisième table : author_book. Le seul but de cette table est de relier les tableaux author et book entre elles. La table author_book est un exemple de table de jonction.

Comment écrire plusieurs jointures dans une seule requête SQL

Supposons que nos tables contiennent les données suivantes :

author
idname
1Sarah Green
2Martin Davis
3Steve Johnson
book
idname
1The Translucent Door
2Whisper of Dawn
3To Catch a Dream
author_book
author_idbook_id
11
21
12
32
23

Si vous voulez joindre les tables author et book vous devez également utiliser la table de jonction author_book. Par exemple, pour dresser la liste de tous les auteurs et de leurs livres, vous pouvez écrire une requête comme celle-ci :

SELECT 
  author.name, 
  book.name
FROM author
JOIN author_book
ON author.id = author_book.author_id
JOIN book
ON book.id = author_book.book_id
ORDER BY author.name;

Tout d'abord, la table author_book est jointe à la table author pour former une "table virtuelle". Ensuite, la book est jointe à la "table virtuelle".

Lorsque vous joignez des tables liées par une table de jonction, veillez à joindre les tables qui ne sont pas liées à la table de jonction. Dans notre exemple, author est jointe à author_book. Puis book est également joint. Si vous disposez d'une table de jonction dans votre base de données, les jointures impliquant ces tables impliqueront généralement trois tables ou plus.

Le résultat de la requête ressemblera à ceci. Nous ne voyons aucune des colonnes de la table de jonction dans le résultat, mais il est essentiel de la joindre pour que la requête fonctionne correctement :

author.namebook.name
Sarah GreenThe Translucent Door
Martin DavisThe Translucent Door
Sarah GreenWhisper of Dawn
Steve JohnsonWhisper of Dawn
Martin DavisTo Catch a Dream

Une table de jonction avec des colonnes supplémentaires

Dans l'exemple ci-dessus, les seules colonnes présentes dans la table de jonction sont celles qui font référence à d'autres tables. Mais ce n'est pas forcément le cas ! La table de jonction peut également contenir d'autres champs. Ces champs stockent des informations supplémentaires sur la relation.

Prenons un exemple. Cette fois-ci, nous avons les trois tables suivantes : doctor, patient et appointment. Pouvez-vous deviner quelle table est la table de jonction ici ?

Comment écrire plusieurs jointures dans une seule requête SQL

C'est exact ! La table de jonction est la appointment table. Elle relie les médecins à leurs patients pour créer des rendez-vous. Cependant, la table appointment a également besoin de colonnes supplémentaires, telles que la date et l'heure du rendez-vous.

Supposons que nos tables contiennent les données suivantes :

doctor
idname
1Ann Johnson
2Marlene Smith
3John West
patient
idname
1Mary Brown
2Sally Rodgers
3Mark Jackson
appointment
iddoctor_idpatient_iddatetime
11116/04/20238:00
21316/04/20239:00
32217/04/20238:00
42117/04/20239:00
53317/04/202316:00

Construisons maintenant une requête qui aidera les médecins à gérer leur emploi du temps : pour chaque médecin, nous aimerions voir toutes les dates et heures de ses rendez-vous, ainsi que le nom du patient concerné. Vous pouvez obtenir toutes ces informations à l'aide de la requête suivante :

SELECT 
  doctor.name, 
  appointment.date, 
  appointment.time, 
  patient.name
FROM doctor
JOIN appointment
ON doctor.id = appointment.doctor_id
JOIN patient
ON appointment.patient_id = patient.id;

Tout d'abord, la table appointment est jointe à la table doctor pour former une "table virtuelle". Ensuite, la patient est jointe à la "table virtuelle" en faisant référence à la table de jonction appointment.

Le résultat de la requête se présente comme suit :

doctor.nameappointment.dateappointment.timepatient.name
Ann Johnson16/04/20238:00Mary Brown
Ann Johnson16/04/20239:00Mark Jackson
Marlene Smith17/04/20238:00Sally Rodgers
Marlene Smith17/04/20239:00Mary Brown
John West17/04/202316:00Mark Jackson

Une table de jonction à trois voies

Les tables de jonction peuvent également relier trois tables ou plus. Imaginons par exemple qu'un médecin travaille dans plusieurs cliniques. Lorsque vous prenez rendez-vous, un médecin vous est attribué, mais vous devez également choisir la clinique où le rendez-vous aura lieu. Ainsi, notre tableau appointment relie désormais trois tables : doctor, patientet clinic.

Dans ce scénario, de nombreuses requêtes nécessiteront de joindre les quatre tables. Dans certaines situations, les tables de jonction peuvent relier encore plus de tables.

Joignons quelques tables !

Bravo ! Vous venez d'apprendre à utiliser plusieurs JOIN dans une requête SQL.

Résumons ce que nous venons d'apprendre :

  • Une JOIN à trois tables est une JOIN de deux tables avec une autre jointure. La jointure de deux tables forme une "table virtuelle" à laquelle l'autre table est jointe.
  • La condition de jointure est généralement une égalité entre certaines colonnes d'une table qui partagent des valeurs avec des colonnes de l'autre table.
  • Lorsque vous joignez plus de deux tables, vous devez, dans la plupart des cas, vous assurer que la condition de jointure est "liée" aux tables qui ont déjà été jointes.
  • Une table de jonction est une table qui relie deux ou plusieurs autres tables en faisant référence aux ID des tables concernées. Lorsqu'une table de jonction est impliquée, vous devrez probablement utiliser une jointure multi-table.

Si vous souhaitez en savoir plus sur Les jointures en SQL, consultez les articles suivants sur notre blog :

Et pour plus de pratique, n'oubliez pas de consulter notre Les jointures en SQL cours interactif!