Retour à la liste des articles Articles
6 minutes de lecture

Comment joindre deux tables par plusieurs colonnes en SQL

La jointure SQL est un outil important pour combiner des informations provenant de plusieurs tables. Le plus souvent, vous joindrez des tables sur la base d'une clé primaire d'une table et d'une clé étrangère d'une autre table. Cependant, il est également fréquent que vous ayez besoin de joindre des tables par deux ou plusieurs colonnes. Dans cet article, je vais vous expliquer pourquoi vous souhaitez joindre des tables par plusieurs colonnes et comment le faire en SQL.

La jointure de tables par une seule colonne ne fonctionne pas dans certains cas. Par exemple, vous pouvez rencontrer des cas où il n'y a pas une seule colonne dans la table qui identifie de manière unique les lignes. Ou encore, les tables que vous souhaitez joindre peuvent ne pas avoir une seule colonne commune à utiliser pour la jointure. Dans de telles situations, vous devrez peut-être utiliser plusieurs colonnes pour joindre des tables, par exemple le prénom et le nom de famille, ou le numéro de commande et l'année si la numérotation des commandes recommence chaque année.

Voyons quelques exemples pour comprendre comment cela fonctionne en pratique.

Joindre deux tables sur plusieurs colonnes

Imaginons que nous gérons un réseau de jardins d'enfants. Dans notre base de données, nous avons les tables suivantes :

  • studentsLa base de données des élèves, où nous disposons d'informations sur chaque élève, telles que son nom, l'école maternelle qu'il ou elle a fréquentée, la classe, l'année d'obtention du diplôme et le professeur.
  • teachersDans cette section, vous trouverez le nom et le niveau d'éducation de chaque enseignant.
  • classesLe site Web de l'école, où nous disposons d'informations sur chaque classe, telles que le nom de l'école maternelle, la classe, l'année d'obtention du diplôme et le nom de la salle de classe.
students
idfirst_namelast_namekindergartengraduation_yearclassteacher_first_nameteacher_last_name
1MaryJonesSunshine2021AIsabellaLopez
2JohnSmithLove & Learn2020BMiaGonzalez
3MarkAndersonButterfly2020BSophiaStevenson
4StevenMooreButterfly2021CMariaStuart
5DianaMillerButterfly2021CMariaStuart
6AnnaDavisSunshine2021AEmmaGrey
7HellenBrownSunshine2020BOliviaTaylor
8GracyLeeLove & Learn2020ACharlotteJohnson
9SaraGarciaLove & Learn2021BJasmineHarris
10KateWilsonSunshine2019BOliviaTaylor
teachers
idfirst_namelast_nameeducation
101IsabellaLopezUndergraduate
102MariaStuartUndergraduate
103EmmaGreyGraduate
104OliviaTaylorGraduate
105CharlotteJohnsonGraduate
106MiaGonzalezUndergraduate
107SophiaStevensonUndergraduate
108JasmineHarrisUndergraduate
classes
idkindergartengraduation_yearclassclassroom
201Sunshine2019BIronman
202Butterfly2020BSun
203Love & Learn2020ALove
204Love & Learn2020BHappiness
205Sunshine2020AHulk
206Sunshine2020BSuperman
207Butterfly2021AGarden
208Butterfly2021BIsland
209Butterfly2021CSea
210Love & Learn2021ADream
211Love & Learn2021BLaugh
212Sunshine2021AIronman

Vous remarquerez peut-être que notre base de données n'est pas parfaitement organisée. Typiquement, la table students comprendrait des clés étrangères comme l'ID de l'enseignant et l'ID de la classe au lieu d'informations détaillées sur les enseignants et les classes correspondants. Cependant, même avec des données stockées de cette manière, nous pouvons joindre les tables tant que chaque table possède un ensemble de colonnes qui identifie de manière unique chaque enregistrement.

Il est temps de passer à quelques requêtes SQL !

Exemple 1 : JOIN SQL par deux colonnes

Dans notre premier exemple, nous voulons connaître le niveau d'éducation de l'enseignant pour chaque élève. Pour cela, nous devons combiner les informations des tables students et teachers. Malheureusement, nous ne disposons pas de la colonne ID de l'enseignant dans la table students dans la table . Cependant, nous disposons du nom et du prénom de l'enseignant dans les deux tables. Tant que nous n'avons pas de professeurs avec des noms complets identiques, nous pouvons sans risque joindre ces tables par ces deux colonnes. Voici la requête :

SELECT s.first_name, s.last_name, s.teacher_first_name, s.teacher_last_name, t.education AS teacher_education
FROM students s
JOIN teachers t
ON s.teacher_first_name = t.first_name AND s.teacher_last_name = t.last_name;

Si vous avez besoin de vous rafraîchir la mémoire sur la syntaxe de SQL JOIN, consultez cet excellent aide-mémoire sur les JOIN SQL.

Remarquez les deux conditions dans la clause ON, car nous exigeons que (1) le prénom de la table des professeurs soit égal au prénom du professeur dans la table des élèves et que (2) le nom de famille de la table des professeurs soit égal au nom de famille du professeur dans la table des élèves. Comme vous le voyez, pour spécifier deux conditions, il suffit de les placer dans la clause ON en utilisant le mot-clé AND entre les deux.

Voici le résultat :

first_namelast_nameteacher_first_nameteacher_last_nameteacher_education
MaryJonesIsabellaLopezUndergraduate
StevenMooreMariaStuartUndergraduate
DianaMillerMariaStuartUndergraduate
AnnaDavisEmmaGreyGraduate
HellenBrownOliviaTaylorGraduate
KateWilsonOliviaTaylorGraduate
JohnSmithMiaGonzalezUndergraduate
MarkAndersonSophiaStevensonUndergraduate
GracyLeeCharlotteJohnsonGraduate
SaraGarciaJasmineHarrisUndergraduate

C'est bon ! Nous voyons maintenant le niveau d'éducation de l'enseignant correspondant à chaque étudiant.

Pour vous entraîner davantage à joindre des tables en SQL, consultez ce cours interactif. Les jointures en SQL cours interactif.

Exemple 2 : JOIN SQL par trois colonnes

Dans l'exemple précédent, nous avons vu comment joindre deux tables par deux conditions. Nous pouvons avoir encore plus de conditions si nécessaire. Voyons comment joindre des tables en SQL avec trois conditions.

Nous voulons maintenant connaître le nom de la salle de classe où chaque élève a joué et étudié. Les informations relatives à la salle de classe sont disponibles dans la table classes Les informations relatives à la classe sont disponibles dans la table

Nous n'avons pas l'ID de la classe dans la table students dans la table. Cependant, nous avons trois colonnes qui identifient de manière unique une classe lorsqu'elles sont combinées : kindergarten, graduation_year, class. Les mêmes colonnes sont présentes dans la table classes tableau. Ainsi, nous allons combiner students et classes en utilisant trois colonnes :

SELECT s.first_name, s.last_name, c.kindergarten, c.graduation_year, c.class, c.classroom
FROM students s
JOIN classes c
ON s.kindergarten = c.kindergarten AND s.graduation_year = c.graduation_year AND s.class = c.class;

Comme vous pouvez le voir, nous joignons les tables en utilisant les trois conditions placées dans la clause ON avec les mots-clés AND entre les deux. Voici le résultat :

first_namelast_namekindergartengraduation_yearclassclassroom
MarkAndersonButterfly2020BSun
JohnSmithLove & Learn2020BHappiness
StevenMooreButterfly2021CSea
MaryJonesSunshine2021AIronman
GracyLeeLove & Learn2020ALove
HellenBrownSunshine2020BSuperman
DianaMillerButterfly2021CSea
AnnaDavisSunshine2021AIronman
SaraGarciaLove & Learn2021BIronman
KateWilsonSunshine2019BLaugh

Le site JOIN a fonctionné comme prévu ! Nous avons maintenant la salle de classe correspondante pour chaque étudiant.

Si vous souhaitez voir d'autres exemples, consultez ce livre de recettes sur la jonction de tableaux par plusieurs colonnes.

Pratiquons Les jointures en SQL par plusieurs colonnes !

Le site SQL JOIN est l'un des outils de base des analystes de données travaillant avec SQL. Les bases de données relationnelles sont construites de telle sorte que les rapports analytiques nécessitent généralement de combiner des informations provenant de plusieurs tables. Vous rejoindrez des tables, parfois par une seule colonne, parfois par deux colonnes ou plus.

Comme vous l'avez vu, joindre des tables par plusieurs colonnes est assez simple en SQL. Toutefois, si vous souhaitez vous familiariser avec SQL JOINs, il est essentiel de vous exercer à utiliser des ensembles de données réels.

Je vous recommande de commencer par ce cours interactif Les jointures en SQL qui comprend 93 défis de codage. Il couvre les types de jointures les plus courants, tels que JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, les jointures automatiques et les jointures non équitables.

Pour vous entraîner encore plus avec SQL JOINs et d'autres outils SQL de base, envisagez de suivre la Le SQL de A à Z piste. Il comprend 7 cours interactifs qui couvrent les fonctions SQL standard, les rapports SQL de base, les fonctions de fenêtre, les expressions de table courantes, les requêtes récursives, et bien plus encore.

Merci de votre lecture et bon apprentissage !