cours
SQL INNER JOIN vs. OUTER JOIN : Principales différences
Dans ce tutoriel, j'expliquerai la différence entre SQL INNER JOIN
et OUTER JOIN
et j'utiliserai des exemples. Après avoir résolu ce problème, vous voudrez peut-être suivre notre cours Joining Data in SQL, qui couvre d'autres jointures intéressantes, comme SELF JOIN
et CROSS JOIN
, ainsi que des idées plus larges, comme la théorie des ensembles.
Réponse rapide
INNER JOIN
renvoie uniquement les lignes correspondantes entre les tableaux basés sur une colonne commune, à l'exclusion des lignes non correspondantes. Par exemple, la requête ci-dessous n'affiche les commandes avec les détails du client que lorsqu'il y a une correspondance.
-- Inner Join: Returns only matching rows from both tables
SELECT o.OrderID, c.CustomerName
FROM Orders o
INNER JOIN Customers c ON o.CustomerID = c.CustomerID;
OUTER JOIN
inclut les lignes correspondantes ainsi que les lignes non correspondantes d'un ou des deux tableaux. La requête ci-dessous renvoie tous les clients, y compris ceux qui n'ont pas passé de commande.
-- Left Outer Join: Returns all rows from Customers and matching rows from Orders
SELECT c.CustomerName, o.OrderID
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;
Un examen approfondi de SQL INNER JOIN et OUTER JOIN
Examinons maintenant de plus près SQL INNER JOIN
et OUTER JOIN
, l'un après l'autre. Pour chacun d'entre eux, examinez les deux tableaux suivants :
Exemple de tableau des salariés. Image par l'auteur.
Exemple de tableau des départements. Image par l'auteur.
Fonctionnement de l'INNER JOIN
Une adresse INNER JOIN
permet d'extraire uniquement les lignes correspondant aux deux tableaux en fonction de la condition spécifiée.
La requête suivante sélectionne les fichiers employee_id
, demployee_name
, department_name
, et salary
et renvoie les lignes où department_id
existe.
-- Example: Get employees with matching departments
SELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
INNER JOIN departments
-- Returns only employees assigned to a department
ON employees.department_id = departments.department_id;
Exemple de tableau fusionné à l'aide de SQL INNER JOIN. Image par l'auteur.
Fonctionnement de l'OUTER JOIN
Le site OUTER JOIN
inclut les lignes non appariées d'un ou des deux tableaux, selon le type de OUTER JOIN
utilisé.
JOINTURE EXTERNE GAUCHE (JOINTURE GAUCHE)
Le site LEFT OUTER JOIN
renvoie tous les enregistrements du tableau de gauche et les enregistrements correspondants du tableau de droite. S'il n'y a pas de correspondance, les valeurs NULL
sont renvoyées pour les tableaux de droite.
L'exemple suivant permet de récupérer tous les enregistrements du tableau employees
, même s'il y a des enregistrements non correspondants. L'adresse department_name
manquante pour les salariés est renvoyée sous la forme NULL
.
-- Get all employees, even those without a department
SELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;
Exemple de tableau joint à l'aide de la jointure externe gauche SQL. Image par l'auteur.
LEFT JOIN et LEFT OUTER JOIN sont utilisés de manière interchangeable en SQL car les deux requêtes récupèrent tous les tableaux du tableau de gauche et les tableaux correspondants du tableau de droite.
JOINTURE EXTERNE DROITE (JOINTURE DROITE)
Le site RIGHT OUTER JOIN
renvoie tous les enregistrements du tableau de droite et les enregistrements correspondants du tableau de gauche. Les tableaux non appariés du tableau de gauche renvoient NULL
.
La requête ci-dessous renvoie tous les enregistrements du tableau departments
, même s'il n'y a pas de salariés correspondants.
-- Get all departments, even those without employees
SELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.department_id;
Exemple de conte joint à l'aide de la jointure externe droite SQL. Image par l'auteur.
JOINTURE EXTERNE COMPLÈTE
Le site FULL OUTER JOIN
combine les résultats des jointures externes gauche et droite. Il renvoie tous les enregistrements des deux tableaux, en remplissant NULL
lorsqu'il n'y a pas de correspondance.
La requête ci-dessous renvoie tous les tableaux employees
et departments
, même si les lignes ne sont pas appariées.
-- Combine all employees and departments
SELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
FULL JOIN departments
ON employees.department_id = departments.department_id;
Exemple de tableau joint à l'aide de la jointure externe complète SQL. Image par l'auteur.
INNER JOIN vs. OUTER JOIN : Principales différences
INNER JOIN
et OUTER JOIN
diffèrent fondamentalement dans la façon dont ils traitent les lignes non appariées lors de la fusion des tableaux. Il est important de comprendre ces différences pour choisir le bon type de jointure dans vos requêtes de base de données. Comparons ces différences.
Ce que renvoie la fonction INNER JOIN
INNER JOIN
ne renvoie que les lignes dont les valeurs correspondent dans les deux tableaux. Ce type de jointure est utilisé lorsque vous avez besoin de données dans les deux ensembles de données.
La requête suivante permet d'extraire les enregistrements de employees
dont les tableaux correspondent à ceux de departments
.
-- Example: Get employees with matching departments
SELECT employees.employee_id, employees.employee_name, departments.department_name
FROM employees
INNER JOIN departments
-- Returns only employees assigned to a department
ON employees.department_id = departments.department_id;
Exemple de tableau joint à l'aide de SQL INNER JOIN. Image par l'auteur.
Ce que renvoie l'OUTER JOIN
OUTER JOIN
inclut les lignes non appariées d'un tableau ou des deux tableaux, selon le type de OUTER JOIN
. Par exemple, le site LEFT OUTER JOIN
renvoie tous les tableaux du tableau de gauche et les tableaux correspondants du tableau de droite. Les tableaux non appariés du bon tableau auront des NULL.
La requête suivante permet de récupérer les enregistrements des employés, même ceux qui n'ont pas de département.
-- Get all employees, even those without a department
SELECT employees.employee_id, employees.employee_name, departments.department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;
Exemple de données extraites à l'aide de SQL LEFT OUTER JOIN. Image par l'auteur.
Quand utiliser SQL INNER JOIN et OUTER JOIN ?
INNER JOIN
et OUTER JOIN
diffèrent également dans leurs cas d'utilisation pratique pour la recherche de données.
Quand utiliser INNER JOIN
INNER JOIN
est plus efficace lorsque vous n'avez besoin que des données croisées de deux tableaux. Par exemple, vous pouvez utiliser INNER JOIN
lorsque vous analysez des données de vente pour trouver des produits qui ont été vendus, notamment lorsque les tableaux des produits et des ventes contiennent des entrées correspondantes.
Quand utiliser OUTER JOIN
OUTER JOIN
est approprié lorsque vous avez besoin de renvoyer un jeu de données complet, y compris les lignes non appariées. Par exemple, lorsque vous générez un rapport qui affiche tous les employés, y compris ceux qui n'ont pas d'affectation à un département, ou tous les départements, y compris ceux qui n'ont pas d'employés.
Conclusion
Il est important de comprendre la différence entre INNER JOIN
et OUTER JOIN
pour rédiger des requêtes efficaces. L'apprentissage de ces techniques permet également d'améliorer l'optimisation des requêtes pour une récupération plus rapide des données. Je vous encourage à continuer à vous entraîner pour acquérir de nouvelles compétences en matière de gestion de bases de données.
Je vous recommande d'essayer notre cursus Associate Data Analyst in SQL pour devenir un bon analyste de données. Notre cours Reporting in SQL vous aidera également à maîtriser la création de rapports et de tableaux de bord complexes pour une présentation efficace des données. Si vous vous préparez à un entretien au cours duquel vous devrez démontrer vos compétences en SQL, je vous recommande de consulter notre blog, 20 Top SQL Joins Interview Questions, pour vous aider à vous préparer à l'entretien.
Obtenez une certification SQL de haut niveau
FAQ SQL INNER JOIN et OUTER JOIN
Quelle est la différence entre INNER JOIN et OUTER JOIN en SQL ?
INNER JOIN renvoie uniquement les lignes correspondantes des deux tableaux, tandis que OUTER JOIN inclut les lignes non correspondantes, avec des NULL pour combler les lacunes lorsqu'aucune donnée correspondante n'est trouvée.
Quand dois-je utiliser un INNER JOIN en SQL ?
Utilisez un JION INNER lorsque vous devez récupérer uniquement les lignes dont les valeurs correspondent dans les deux tableaux.
Quels sont les types de JOINTS EXTERNES en SQL ?
Les types de JOINTS EXTERNES sont le JOINTS EXTERNES GAUCHES, le JOINTS EXTERNES DROITS et le JOINTS EXTERNES COMPLETS.
Comment fonctionne un LEFT OUTER JOIN en SQL ?
Une jointure externe gauche renvoie toutes les lignes du tableau de gauche, les lignes correspondantes du tableau de droite et les lignes non correspondantes du tableau de gauche.
Qu'est-ce qu'un FULL OUTER JOIN en SQL ?
Un FULL OUTER JOIN renvoie toutes les lignes des deux tableaux, y compris les lignes non appariées de chaque tableau.
Apprenez SQL avec DataCamp
cours
Introduction à SQL
cours