21st Jun 2023 8 minutes de lecture Comment écrire plusieurs jointures dans une requête SQL Dominika Florczykowska sql jointures Table des matières Commençons par un exemple Comment fonctionne la jointure de plusieurs tables Tables de jonction Une table de jonction avec des colonnes supplémentaires Une table de jonction à trois voies Joignons quelques tables ! 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. 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 : 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. 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 ? 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 : Apprenez quelques astuces pour pratiquer Les jointures en SQL. Découvrez des exemples de Les jointures en SQL avec des explications détaillées. Comprendre le fonctionnement des JOIN SQL internes. Et pour plus de pratique, n'oubliez pas de consulter notre Les jointures en SQL cours interactif! Tags: sql jointures