Retour à la liste des articles Articles
6 minutes de lecture

Guide illustré du SQL INNER JOIN

Qu'est-ce qu'un INNER JOIN SQL, et comment fonctionne-t-il ? Nous allons le découvrir !

Dans mon dernier article, j'ai abordé la question du Opération CROSS JOIN en SQL. Aujourd'hui, nous allons nous intéresser à INNER JOIN et à la façon de l'utiliser. Est-ce la même chose qu'un JOIN? Combien de tables peut-on relier avec un INNER JOIN?

Ce sont toutes de bonnes questions. Voyons les réponses !

Qu'est-ce qu'une INNER JOIN ?

INNER JOIN combine les données de plusieurs tables en les joignant sur la base d'un enregistrement correspondant. Ce type de jointure nécessite une condition de jointure, que nous allons expliquer dans un instant.

Pour illustrer le fonctionnement de INNER JOIN, nous allons utiliser quelques tableaux simples. Deux d'entre eux, color et shoes sont présentés ci-dessous :

color

id name
1 yellow
2 green
3 pink

shoes

id size color_id
1 seven 2
2 eight 2
3 nine 2
4 seven 1
5 nine 1
6 seven 3
7 ten NULL

La table color stocke un numéro d'identification et un nom pour chaque couleur. La table shoes table stocke un numéro d'identification pour chaque paire de chaussures, la taille de la chaussure et un numéro d'identification qui fait référence à une couleur dans la table. color table.

Comment fonctionne une INNER JOIN

Dans cet exemple, INNER JOIN joint les enregistrements de la table shoes avec les enregistrements de la table color en passant par la colonne color_id de la table shoes de la table. Les valeurs de cette colonne sont les mêmes que celles de la colonne id de la table. color de la table, ce qui permet d'obtenir le jeu de résultats escompté. Jetez un coup d'œil à la requête suivante :

SELECT *  FROM  shoes
INNER JOIN color  ON color.id = shoes.color_id;

L'instruction SELECT prend tous les enregistrements de la table indiquée après la clause FROM - dans ce cas, la table shoes dans ce cas. Ensuite, l'instruction INNER JOIN contient le nom de la table avec laquelle nous souhaitons faire correspondre les enregistrements (c'est-à-dire la table color table). Le prédicat ON énonce la condition de correspondance, que les enregistrements des deux tables doivent avoir. Ici, la condition est que le champ id de la table color et le champ color_id de la table shoes doivent avoir des valeurs correspondantes. Si un enregistrement ne présente pas de correspondance, il ne sera pas pris en compte dans les résultats.

Regardez l'ensemble des résultats de cette requête :

id size color_id id name
1 seven 2 2 green
2 eight 2 2 green
3 nine 2 2 green
4 seven 1 1 yellow
5 nine 1 1 yellow
6 seven 3 3 pink

Nous pouvons maintenant voir la couleur de chaque paire de chaussures, grâce au champ INNER JOIN. shoes l'enregistrement avec NULL dans la colonne color_id n'est pas affiché : il ne correspond à aucun enregistrement de la table. color tableau.

JOIN ou INNER JOIN ?

Vous pouvez omettre la partie INNER de INNER JOIN; JOIN fonctionne de la même manière. Regardez l'instruction ci-dessous.

SELECT *  FROM  shoes
JOIN color  ON color.id = shoes.color_id;

Joindre avec WHERE

Vous pouvez également utiliser une clause WHERE comme une INNER JOIN. (Il s'agit d'une ancienne version de la syntaxe SQL (ANSI-89) ; les commandes JOIN utilisent ANSI-92). Voici comment fonctionne l'utilisation d'une WHERE:

SELECT *  FROM  shoes, color  
WHERE color.id = shoes.color_id ;

Le résultat est le même :

id size color_id id name
1 seven 2 2 green
2 eight 2 2 green
3 nine 2 2 green
4 seven 1 1 yellow
5 nine 1 1 yellow
6 seven 3 3 pink

Utilisation d'un INNER JOIN sur plusieurs tables

INNER JOIN peut être utilisé sur plus de deux tables. Regardez les trois tables ci-dessous :

color

id name
1 yellow
2 green
3 pink

material

id name
1 leather
2 cotton
3 NULL

shoes

id size color_id material_id
1 seven 2 1
4 seven 1 2
5 nine 1 1
6 seven 3 NULL
7 ten NULL 1

Utilisons un INNER JOIN pour combiner les informations dans les trois tables. La requête ci-dessous récupère les enregistrements de toutes les chaussures qui contiennent des informations sur la couleur et le matériau :

SELECT *  FROM  shoes
JOIN color  ON color.id = shoes.color_id
JOIN material  ON material.id = shoes.material_id ;

Remarquez que seules les chaussures dont les colonnes color_id et material_id ne contiennent pas d'enregistrementsNULL sont affichées dans le jeu de résultats.

id size color_id material_id id name id name
1 seven 2 1 2 green 1 leather
4 seven 1 2 1 yellow 2 cotton
5 nine 1 1 1 yellow 1 leather

INNER JOIN vs. CROSS JOIN

Comme nous l'avons vu, INNER JOIN combine les informations de deux ou plusieurs enregistrements dont les champs correspondent. Que se passe-t-il lorsque vous utilisez CROSS JOIN pour joindre les champs shoes et color CROSS JOIN ne prend aucune condition de ON, ce qui signifie qu'il renvoie un produit cartésien. Examinez la requête et l'ensemble de résultats présentés ci-dessous :

SELECT *  FROM  shoes
CROSS JOIN  color ;

Le résultat ?

id size color_id id name
1 seven 2 1 yellow
2 eight 2 1 yellow
3 nine 2 1 yellow
4 seven 1 1 yellow
5 nine 1 1 yellow
6 seven 3 1 yellow
7 ten NULL 1 yellow
1 seven 2 2 green
2 eight 2 2 green
3 nine 2 2 green
4 seven 1 2 green
5 nine 1 2 green
6 seven 3 2 green
7 ten NULL 2 green
1 seven 2 3 pink
2 eight 2 3 pink
3 nine 2 3 pink
4 seven 1 3 pink
5 nine 1 3 pink
6 seven 3 3 pink
7 ten NULL 3 pink

Tous les enregistrements de la table shoes ont été joints à tous les enregistrements de la table color table. Cela crée quelques erreurs. Par exemple, certaines chaussures ne sont pas répertoriées avec la bonne couleur : les chaussures de taille huit ne sont disponibles qu'en vert (leur valeur color_id est 2), mais dans cette instance de jointure, elles sont associées à d'autres couleurs. Les enregistrements NULL de la table shoes sont également associés à des couleurs, même s'ils n'ont pas de valeur comparable dans le champ color_id.

En savoir plus sur les INNER JOINs

INNER JOINsont assez courantes en SQL. L'objectif de cet article était de présenter les concepts de INNER JOIN, mais il y a encore beaucoup à apprendre. Pourquoi ne pas consulter le site LearnSQL SQL pour les débutants cours pour en savoir plus ?