Les opérations INNER JOIN et LEFT JOIN en SQL sont couramment utilisées dans les requêtes de bases de données. Ces opérations, indispensables pour l’intégration des données et la personnalisation des résultats de recherche, ont des caractéristiques distinctes et sont utilisées dans des contextes différents. Cet article explique en détail les différences entre INNER JOIN et LEFT JOIN, avec des exemples concrets et une discussion sur les cas d’utilisation appropriés.
Qu’est-ce que INNER JOIN
INNER JOIN est une opération SQL utilisée pour combiner deux tables ou plus. Cette opération inclut uniquement les enregistrements qui correspondent à la condition de jointure dans le jeu de résultats. Par exemple, lorsqu’il existe deux tables, INNER JOIN renvoie uniquement les lignes qui correspondent à une clé commune présente dans les deux tables. Cela permet d’extraire uniquement les données pertinentes. INNER JOIN est particulièrement utile pour clarifier les relations entre les tables et exclure les données non pertinentes.
Exemple d’utilisation d’INNER JOIN
Voici un exemple d’utilisation d’INNER JOIN à l’aide d’une requête SQL. Nous utiliserons les tables customers
pour gérer les informations des clients et orders
pour gérer les informations des commandes.
Exemple : Jointure entre clients et commandes
La requête SQL suivante combine les informations des clients et leurs commandes. La clé commune utilisée est l’ID client (customer_id
).
SELECT
customers.customer_id,
customers.customer_name,
orders.order_id,
orders.order_date
FROM
customers
INNER JOIN
orders
ON
customers.customer_id = orders.customer_id;
Cette requête combine les enregistrements des colonnes customer_id
des tables customers
et orders
, et renvoie un jeu de résultats incluant l’ID client, le nom du client, l’ID de commande et la date de commande. Grâce à INNER JOIN, les clients sans commande et les commandes sans client ne sont pas inclus dans le jeu de résultats.
Qu’est-ce que LEFT JOIN
LEFT JOIN est une opération SQL utilisée pour combiner deux tables ou plus, en incluant tous les enregistrements de la table de gauche dans le jeu de résultats, ainsi que les enregistrements correspondants de la table de droite. Si aucun enregistrement correspondant n’existe dans la table de droite, la requête retourne des valeurs NULL pour cette partie. LEFT JOIN est principalement utilisé lorsque l’on souhaite conserver toutes les données de la table de gauche tout en ajoutant des informations de la table de droite.
Exemple d’utilisation de LEFT JOIN
Voici un exemple d’utilisation de LEFT JOIN à l’aide d’une requête SQL. Nous utiliserons à nouveau les tables customers
et orders
comme exemple.
Exemple : Jointure entre clients et commandes
La requête SQL suivante combine tous les clients avec leurs commandes. La clé commune utilisée est l’ID client (customer_id
).
SELECT
customers.customer_id,
customers.customer_name,
orders.order_id,
orders.order_date
FROM
customers
LEFT JOIN
orders
ON
customers.customer_id = orders.customer_id;
Cette requête combine tous les enregistrements de la table customers
et ceux de la table orders
dont la colonne customer_id
correspond. Elle renvoie un jeu de résultats incluant l’ID client, le nom du client, l’ID de commande et la date de commande. Grâce à LEFT JOIN, même les clients sans commande sont inclus dans le jeu de résultats, et dans ce cas, les informations sur les commandes sont retournées sous forme de valeurs NULL.
Différences entre INNER JOIN et LEFT JOIN
Pour comprendre la différence entre INNER JOIN et LEFT JOIN, nous allons illustrer le comportement de chacune des opérations.
Comportement de INNER JOIN
INNER JOIN ne renvoie que les enregistrements communs aux deux tables. Par exemple, lorsque nous combinons les tables customers
et orders
, seules les lignes où l’ID client est présent dans les deux tables sont renvoyées.
customers table:
+-------------+----------------+
| customer_id | customer_name |
+-------------+----------------+
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
+-------------+----------------+
orders table:
+-------------+----------+------------+
| order_id | customer_id | order_date |
+-------------+----------+------------+
| 101 | 1 | 2023-01-10 |
| 102 | 3 | 2023-01-15 |
+-------------+----------+------------+
Résultat de INNER JOIN:
+-------------+----------------+----------+------------+
| customer_id | customer_name | order_id | order_date |
+-------------+----------------+----------+------------+
| 1 | Alice | 101 | 2023-01-10 |
| 3 | Charlie | 102 | 2023-01-15 |
+-------------+----------------+----------+------------+
Comportement de LEFT JOIN
LEFT JOIN renvoie tous les enregistrements de la table de gauche et, si des enregistrements correspondants existent dans la table de droite, ils sont ajoutés. Si aucune correspondance n’existe dans la table de droite, les valeurs de cette dernière seront NULL.
Résultat de LEFT JOIN:
+-------------+----------------+----------+------------+
| customer_id | customer_name | order_id | order_date |
+-------------+----------------+----------+------------+
| 1 | Alice | 101 | 2023-01-10 |
| 2 | Bob | NULL | NULL |
| 3 | Charlie | 102 | 2023-01-15 |
+-------------+----------------+----------+------------+
Ainsi, INNER JOIN renvoie uniquement les enregistrements communs aux deux tables, tandis que LEFT JOIN renvoie tous les enregistrements de la table de gauche et retourne des valeurs NULL pour ceux de la table de droite qui ne correspondent pas.
Quand utiliser INNER JOIN et LEFT JOIN
Le choix entre INNER JOIN et LEFT JOIN dépend des données et des objectifs recherchés. Examinons de plus près les situations où chacun d’eux est approprié.
Quand utiliser INNER JOIN
INNER JOIN est approprié lorsque seules les données communes aux deux tables sont nécessaires. Il est utilisé dans les cas suivants :
Obtenir les données correspondantes entre clients et commandes
INNER JOIN est utilisé lorsqu’il est nécessaire d’obtenir les informations des clients ayant passé une commande. Par exemple, pour obtenir les informations des clients ayant acheté un produit spécifique.
SELECT
customers.customer_name,
orders.order_id
FROM
customers
INNER JOIN
orders
ON
customers.customer_id = orders.customer_id
WHERE
orders.product_id = 123;
Quand utiliser LEFT JOIN
LEFT JOIN est approprié lorsque l’on souhaite conserver toutes les données de la table de gauche tout en ajoutant des informations supplémentaires provenant de la table de droite. Voici quelques exemples de situations :
Afficher tous les clients avec leurs commandes
LEFT JOIN est utilisé lorsqu’il est nécessaire d’afficher une liste complète des clients, y compris ceux qui n’ont pas passé de commande, afin de voir si des informations sur les commandes existent.
SELECT
customers.customer_name,
orders.order_id
FROM
customers
LEFT JOIN
orders
ON
customers.customer_id = orders.customer_id;
Identifier les clients sans commande
LEFT JOIN peut également être utilisé pour identifier les clients qui n’ont passé aucune commande. En utilisant une condition de vérification NULL, on peut extraire ces clients.
SELECT
customers.customer_name
FROM
customers
LEFT JOIN
orders
ON
customers.customer_id = orders.customer_id
WHERE
orders.order_id IS NULL;
Ainsi, INNER JOIN est idéal pour extraire des données communes, tandis que LEFT JOIN est utilisé pour conserver l’intégrité des données de la table de gauche tout en ajoutant des informations supplémentaires de la table de droite.
Conclusion
INNER JOIN et LEFT JOIN sont deux opérations SQL essentielles utilisées pour des objectifs différents. INNER JOIN extrait uniquement les données communes aux deux tables, en filtrant strictement les informations pertinentes. En revanche, LEFT JOIN conserve toutes les données de la table de gauche et ajoute les données correspondantes de la table de droite, ce qui permet d’éviter les lacunes dans les données tout en obtenant les informations nécessaires. En comprenant les caractéristiques de chaque opération JOIN, vous pouvez créer des requêtes de base de données plus efficaces et mieux adaptées à vos besoins.