Lorsque vous travaillez avec votre base de données, vous devrez peut-être rassembler les données de quelques tables différentes. Cet article vous montrera comment.
J'ai déjà écrit sur les jointures SQL ici et ici, mais prenons d'abord un moment pour revoir le fonctionnement d'une jointure, et en particulier la syntaxe spécifique à MySQL.
Instruction de jointure SQL
Join est une instruction qui vous permet d'assembler deux tables, de faire correspondre les lignes qui sont liées les unes aux autres et de ne conserver que les lignes qui peuvent être mises en correspondance, sans conserver les lignes non appariées.
SELECT * FROM table1
INNER JOIN table2
ON table1.id = table2.id;
Le SELECT ... FROM
indique quelle est la première table, puis le nom de la deuxième table est écrit juste après le INNER JOIN
mots clés.
La façon dont les deux tables doivent être jointes est écrite dans le ON
déclaration. Dans ce cas, les deux tables sont jointes à l'aide de la relation table1.id = table2.id
.
Il est possible d'utiliser plusieurs instructions de jointure ensemble pour joindre plusieurs tables en même temps.
SELECT *
FROM table1
INNER JOIN table2
ON table1.id = table2.id
INNER JOIN table3
ON table2.id = table3.id;
Pour ce faire, vous ajoutez un deuxième INNER JOIN
déclaration et un second ON
déclaration pour indiquer la troisième table et la deuxième relation.
Parlons un instant des relations que vous pouvez avoir entre les tables et pourquoi vous pourriez vouloir joindre trois tables ensemble.
Relations entre les tables en SQL
Lorsque vous avez des tables liées les unes aux autres, leurs relations peuvent être de différents types.
un-à-plusieurs
Dans une relation de type un-à-plusieurs, une ligne de la première table peut être liée à plusieurs lignes de la seconde table.
Dans une base de données relationnelle, cela peut être implémenté avec la deuxième table ayant un first_table_id
colonne qui indique à quelle ligne de la première table cette ligne est liée.
plusieurs-à-un
Dans une relation plusieurs-à-un, une ligne de la première table peut être liée à une seule ligne de la seconde table, et une ligne de la seconde table peut être liée à plusieurs lignes de la première table.
Dans une base de données relationnelle, cela peut être implémenté avec la première table ayant un second_table_id
colonne qui indique à quelle ligne de la deuxième table cette ligne est liée.
plusieurs à plusieurs
Dans ce cas, plusieurs lignes sont liées à plusieurs lignes.
Ce type de relation ne peut pas être représenté tel quel avec les tables SQL - vous devez ajouter une table de couplage entre les deux tables afin que seules les relations plusieurs-à-un et un-à-plusieurs soient présentes entre les tables.
Chaque ligne du tableau du milieu représente une relation entre les lignes du tableau de gauche et les lignes du tableau de droite.
En pratique dans MySQL, cette table du milieu aura une colonne pour first_table_id
et une colonne pour second_table_id
, chaque combinaison étant unique.
Joindre des tables SQL en pratique
Imaginons que nous ayons la base de données d'une organisation, où nous avons un tableau avec les équipes (leur nom et d'autres informations d'identification) et un tableau avec les projets (nom, avancement, etc.).
identifiant | nom_équipe | spécialité |
---|---|---|
1 | Lanceurs de bananes | Bananes |
2 | Les rongeurs de bois | Ronger du bois |
3 | Les éléphants roses | Piétiner le sol |
4 | Pommes de terre moelleuses | Travailler et dormir |
identifiant | nom_projet | progrès |
---|---|---|
1 | Construction de barrage | Un peu plus de rongement de bois et de piétinement nécessaire |
2 | Gâteau aux bananes | Quelqu'un mange toutes les bananes |
3 | Recherche sur le sommeil | Trop de sommeil pas assez de recherche |
Comme une équipe peut travailler sur plusieurs projets et qu'un projet peut être travaillé par plusieurs équipes, il existe également un troisième tableau qui permet de suivre les correspondances équipe-projet.
id_projet | group_id |
---|---|
1 | 2 |
1 | 3 |
2 | 1 |
3 | 1 |
3 | 2 |
3 | 3 |
3 | 4 |
Nous pouvons utiliser un JOIN
déclaration pour tout mettre ensemble lorsque nous avons besoin de voir les informations des tables d'une manière lisible par l'homme, comme ceci :
SELECT
teams.team_name AS team_name,
projects.project_name AS project_name
FROM TABLE teams
INNER JOIN matches
ON teams.id = matches.team_id
INNER JOIN matches
ON matches.project_id = projects.id
ORDER BY teams.id;
Nous choisissons les colonnes à afficher dans chaque table avec un SELECT
déclaration.
Nous précisons comment les lignes des tables doivent être combinées avec un ON
déclaration.
Et nous ordonnons les lignes de la manière que nous préférons avec un ORDER BY
déclaration.
Le ON
instructions teams.id = matches.team_id
et matches.projects_id = projects.id
signifie que les lignes sont combinées en utilisant les lignes des matches
table. Chaque ligne de la table de sortie contient le nom du projet et le nom de l'équipe combinés à l'aide des paires d'ID de projet et d'ID d'équipe dans les matches
tableau.
Le tableau de sortie ressemblera à ci-dessous.
Nom_équipe | nom_du_projet |
---|---|
Lanceurs de bananes | Gâteau aux bananes |
Lanceurs de bananes | Recherche sur le sommeil |
Les rongeurs de bois | Construction du barrage |
Les rongeurs de bois | Recherche sur le sommeil |
Les éléphants roses | Construction de barrage |
Les éléphants roses | Construction de barrage |
Pommes de terre moelleuses | Recherche sur le sommeil |
Il n'y a pas de colonne directement à partir des matches
table. Le matches
la table n'est pas affichée dans la sortie mais elle est utilisée comme instructions pour combiner les lignes des teams
et projects
tableaux.
Conclusion
Le JOIN
L'instruction vous permet de joindre une ou plusieurs tables. Il doit être utilisé en conjonction avec le ON
instruction pour déterminer la relation entre les lignes d'une table et les lignes d'une autre table.
Dans cet article, vous avez appris à utiliser le JOIN
déclaration pour joindre trois tables différentes.