Résumé: dans ce didacticiel, vous apprendrez à interroger les données de plusieurs tables à l’aide de l’instruction SQL INNER JOIN.
Dans le didacticiel précédent, vous avez appris à interroger des données à partir d’une seule table à l’aide de l’instruction SELECT. Cependant, vous souhaitez souvent interroger les données de plusieurs tables pour disposer d’un jeu de résultats complet pour l’analyse. Pour interroger les données de plusieurs tables, vous utilisez des instructions de jointure.
SQL fournit plusieurs types de jointures telles que la jointure interne, les jointures externes (jointure externe gauche ou jointure gauche, jointure externe droite ou jointure droite et jointure externe complète ) et auto-jointure. Dans ce tutoriel, nous allons vous montrer comment utiliser la clause INNER JOIN
.
Syntaxe SQL INNER JOIN
Ce qui suit illustre INNER JOIN
syntaxe pour joindre deux tables:
1
2
3
4
5
|
SELECT
colonne1, colonne2
FROM
table_1
INNER JOIN table_2 ON join_condition;
|
Examinons la syntaxe ci-dessus plus en détail:
- Les
table_1
ettable_2
sont appelés tables jointes. - Pour chaque ligne dans le
table_1
, la requête trouve la ligne correspondante dans letable_2
qui remplit la condition de jointure. Si la ligne correspondante est trouvée, la requête renvoie une ligne qui contient les données des deux tables. Sinon, il examine la ligne suivante detable_1
et ce processus se poursuit jusqu’à ce que toutes les lignes detable_1
soient examinées.
Pour joindre plus de deux tables, la même logique s’applique.
Exemples SQL INNER JOIN
SQL INNER JOIN – exemple d’interrogation de données à partir de deux tables
Dans cet exemple, nous utiliserons les tables products
et categories
dans la base de données exemple. L’image suivante illustre le diagramme de la base de données.
Dans le diagramme ci-dessus:
- Une catégorie peut avoir plusieurs produits.
- Un produit appartient à une et une seule catégorie.
Par conséquent, il existe une relation plusieurs-à-un entre les lignes de categories
table et lignes dans la table products
. Le lien entre les deux tables est la colonne categoryid
.
Nous devons interroger les données suivantes des deux tables:
-
productID
,productName
du tableauproducts
. -
categoryName
de la tablecategories
.
La requête suivante récupère les données des deux tables:
1
2
3
4
5
6
|
SELECT
productID, productName, categoryName
FROM
produits
INNER JOIN
catégories ON categories.categoryID = products.categoryID;
|
La condition de jointure est spécifiée dans la clause INNER JOIN
après le mot clé ON
comme expression:
1
|
categories.categoryID = products.categoryID
|
Pour chaque ligne du products
, la requête trouve une ligne correspondante dans la table categories
qui a le même categoryid.
S’il y a une correspondance entre deux lignes dans les deux tables, il renvoie une ligne qui contient les colonnes spécifiées dans la clause SELECT, c’est-à-dire l’ID du produit, le nom du produit et le nom de la catégorie; sinon, il vérifie la ligne suivante dans la table products
pour trouver la ligne correspondante dans la table categories
. Ce processus se poursuit jusqu’à ce que la dernière ligne de la table products soit examinée.
SQL INNER JOIN – interrogation des données de trois tables
Nous pouvons utiliser les mêmes techniques pour joindre trois tables.La requête suivante sélectionne productID
, productName
, categoryName
et supplier
des tableaux products
, categories
et suppliers
:
1
2
3
4
5
6
7
8
9
10
11
|
SELECT
productID,
productName,
categoryName,
companyName AS fournisseur
FROM
produits
INNER JOIN
catégories ON catégories. categoryID = products.categoryID
INNER JOIN
fournisseurs SUR fournisseurs.supplierID = products.supplierID
|
JOIN INNER SQL implicite
Il existe une autre forme de INNER JOIN
appelée jointure interne implicite comme indiqué ci-dessous:
1
2
3
4
5
6
7
|
SELECT
colonne1, colonne2
FROM
table_1,
table_2
WHERE
join_condition;
|
Dans ce formulaire, vous spécifiez toutes les tables jointes dans la clause FROM
et placez la condition de jointure dans la clause WHERE de l’instruction SELECT
. Nous pouvons réécrire l’exemple de requête ci-dessus en utilisant le INNER JOIN
implicite comme suit:
1
2
3
4
5
6
7
|
SELECT
productID, productName, categoryName
FROM
produits,
catégories
WHERE
products.categoryID = categories.categoryID;
|