Retour à la liste des articles Articles
7 minutes de lecture

Comment lier deux tables en SQL

L'interrogation de données provenant de plusieurs tables est très courante lorsqu'on travaille avec des bases de données relationnelles. Ce n'est pas difficile si vous savez comment utiliser les opérateurs SQL dédiés à cette tâche. Dans cet article, vous apprendrez comment lier deux tables en utilisant WHERE et l'opérateur spécial JOIN, et vous verrez comment filtrer les lignes dans le jeu de résultats.

Si vous souhaitez vous entraîner à lier des tables en SQL, consultez notre cours interactif Les jointures en SQL. Il propose plus de 90 exercices pratiques sur différents types de JOIN. Pour d'autres cours pratiques SQL, consultez notre article La pratique du SQL.

Comment interroger une seule table

Tout d'abord, un petit rappel sur la façon de sélectionner des données dans une seule table. Considérons la table suivante, product:

idnameprice
1Smartwatch Erin234.00
2Smartwatch Sun455.00
3Smartband Eli300.00
4Smartband White124.00

Pour sélectionner les données de toutes les colonnes et de toutes les lignes de cette table, vous pouvez utiliser la requête :

SELECT id, name, price
FROM product;

Dans cette requête simple, les noms des colonnes dont vous voulez extraire les données sont énumérés après SELECT. Suivent le mot-clé FROM et le nom de la table dans laquelle les données sont stockées.

Vous pouvez également filtrer les lignes pour ne renvoyer que les enregistrements qui correspondent aux critères donnés. Jetez un coup d'œil au code SQL suivant :

SELECT name, price
FROM product
WHERE price < 250.00;

Dans ce cas, le jeu de résultats ne comprend que deux lignes avec les colonnes nom et price:

nameprice
Smartwatch Erin234.00
Smartband White124.00

Les colonnes sont énumérées après SELECT, puis le mot-clé FROM permet de spécifier la table à partir de laquelle vous récupérez les données. À la fin de la requête, le mot-clé WHERE est suivi de la condition de filtrage. Dans cet exemple, la condition compare la valeur de la colonne price à 250.00. La requête renvoie les détails d'un produit uniquement si le prix de ce produit est inférieur à 250,00.

Interroger des données provenant de plusieurs tables à l'aide de WHERE

Les bases de données relationnelles sont constituées de plusieurs tables qui se réfèrent les unes aux autres. Les lignes d'une table font référence à des lignes spécifiques d'une autre table, qui sont reliées par une ou plusieurs colonnes d'identification. Nous allons maintenant voir comment lier les données d'une table à celles d'une autre table.

Considérez les deux tables suivantes , product et category dans une base de données sur les produits de l'entrepôt :

product

idproduct_namepricecategory_id
1smartwatch235.002
2bricks26.703
3lamp128.002
4sofa3200.001
5desk1350.001
6power strip29.002

category

idcategory_name
1furniture
2electronics
3toys

Disons que vous avez besoin de certains détails de cette base de données de l'entrepôt, comme le nom des produits, le prix et leurs catégories respectives. Vous pouvez lier les lignes de la table product avec les lignes de la table category à l'aide d'une clause WHERE. Jetez un coup d'œil à la requête ci-dessous :

SELECT product.product_name, product.price, category.category_name
FROM product, category
WHERE product.category_id = category.id ;

Voici l'ensemble des résultats :

product_namepricecategory_name
smartwatch235.00electronics
bricks26.70toys
lamp128.00electronics
sofa3200.00furniture
desk1350.00furniture
power strip29.00electronics

Dans cette requête, SELECT répertorie les colonnes des deux tables : product_name et price de la table product et category_name de la table category table. Chaque nom de colonne est précédé du nom de la table correspondante, séparé par un point.

Ensuite, les noms des tables sont énumérés après le mot-clé FROM, séparés par des virgules.

La dernière partie de cette requête est un WHERE, avec une condition qui spécifie comment lier les lignes des deux tables. Ici, les valeurs de la colonne category_id de la table product correspondent aux valeurs de la colonne id de la table category et les lignes sont liées lorsque les valeurs sont égales (product.category_id = category.id). La montre intelligente de la table product a un identifiant de catégorie de 2. La même valeur dans la colonne id de la table category pointe vers "jouets" comme indiqué en bleu ci-dessus.

Si des colonnes portent le même nom dans les deux tables, elles doivent être distinguées lorsque vous les nommez dans SELECT. Pour ce faire, vous nommez la table, suivie d'un point puis du nom de la colonne. Dans notre exemple, cependant, les tables ont des noms de colonnes différents qui n'ont rien en commun. Nous pouvons utiliser uniquement les noms de colonnes dans SELECT sans préciser de quelles tables ils proviennent, comme dans la requête ci-dessous :

SELECT product_name, price, category_name
FROM product, category
WHERE product.category_id = category.id ;

L'utilisation de WHERE est un moyen d'interroger des données provenant de plusieurs tables. Il s'agit d'une ancienne norme SQL ; bien qu'elle soit toujours disponible, elle est rarement utilisée. Dans la section suivante, nous allons examiner une autre méthode.

Interrogation de données à partir de plusieurs tables à l'aide de JOIN

Aujourd'hui, la méthode la plus courante pour lier des données provenant de plusieurs tables consiste à utiliser l'opérateur spécial JOIN, également connu sous le nom de INNER JOIN. Pour voir comment cela fonctionne, nous allons utiliser les deux mêmes tables de la base de données de l'entrepôt, que vous trouverez ci-dessous pour plus de commodité.

product

idnamepricecategory_id
1smart watch235.002
2bricks26.703
3lamp128.002
4sofa3200.001
5desk1350.001
6power strip29.002

category

idname
1furniture
2electronics
3toys

Regardez la requête suivante, qui attribue la catégorie de la table category à chaque nom de produit dans la table product.

SELECT
  product.name AS product_name,
  category.name AS category_name
FROM product
JOIN category ON product.category_id=category.id;

La jointure est effectuée par l'opérateur JOIN. Dans la clause FROM, le nom de la première table (product) est suivi d'un mot-clé JOIN puis du nom de la deuxième table (category). Il est ensuite suivi du mot-clé ON et de la condition permettant de lier les lignes des différentes tables. Le nom de la catégorie est attribué sur la base de la colonne id de la table category, qui est équivalente à category_id dans la table product (product.category_id=category.id).

Voici l'ensemble des résultats :

product_namecategory_name
smart watchelectronics
brickstoys
lampelectronics
sofafurniture
deskfurniture
power stripelectronics

La montre intelligente a la valeur 2 sur category_id. Dans la colonne id de la table category, la valeur 2 est associée à electronics, la montre intelligente est donc affectée à electronics.

L'utilisation de l'opérateur JOIN est la méthode la plus courante pour lier plusieurs tables dans une base de données. Dans l'article "Guide illustré du SQL INNER JOIN", j'en dis plus sur cet opérateur. L'article "SQL INNER JOIN expliqué en termes simples" approfondit également ce sujet. Comme mentionné précédemment, l'opérateur INNER JOIN est équivalent à JOIN; vous pouvez les utiliser de manière interchangeable.

Sélectionner des données dans des tables à l'aide de JOIN et WHERE

L'utilisation des opérateurs JOIN pour extraire des données de plusieurs tables permet également de filtrer plus facilement l'ensemble des résultats. Examinez la requête suivante, qui est une variante de la requête précédente et repose sur les mêmes données :

SELECT
  product.name AS product_name,
  category.name AS category_name
FROM product
JOIN category ON product.category_id=category.id
WHERE category.name != ’toys’;

Voici le résultat :

product_namecategory_name
smart watchelectronics
lampelectronics
sofafurniture
deskfurniture
power stripelectronics

La première partie de cette requête est la même que la précédente. Dans cette requête, cependant, les produits de la catégorie "jouets" sont exclus. Nous filtrons les lignes du jeu de résultats en utilisant une clause WHERE pour vérifier si la catégorie est autre que "jouets" (category.name != ’toys’).

Pour plus d'informations sur les JOIN en SQL, je vous invite à consulter notre cours pratique "Comment utiliser les JOIN ? Les jointures en SQL", à lire l'article "Comment pratiquer les jointures en SQL" ou à regarder la vidéo "SQL JOIN Basics" de la série "We Learn SQL".

Il existe également d'autres opérateurs JOIN. En plus de JOIN ou INNER JOIN, il existe des opérateurs LEFT JOIN, RIGHT JOIN et FULL JOIN. Pour en savoir plus, consultez la vidéo "Les jointures en SQL pour les débutants". Pour plus de pratique du SQL, consultez notre article La pratique du SQL.

Lier des tables en SQL

Nous avons vu comment vous pouvez récupérer des détails complets sur des objets en reliant plusieurs tables qui se réfèrent les unes aux autres dans une base de données relationnelle. Pour ce faire, vous pouvez utiliser WHERE ou JOIN. Pour en savoir plus sur les différences entre ces méthodes, je vous recommande un article très intéressant intitulé "Quelle est la différence entre avoir plusieurs tables dans FROM et utiliser JOIN ?".

Je ne vous ai donné qu'un aperçu de ce sujet ici, alors continuez à apprendre !