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

Jointure interne SQL - Comment joindre 3 tables en SQL et MySQL

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.