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 tablesSELECT o.OrderID, c.CustomerName
FROM Orders o
INNERJOIN Customers c ON o.CustomerID = c.CustomerID;Propulsé par
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 OrdersSELECT c.CustomerName, o.OrderID
FROM Customers c
LEFTJOIN Orders o ON c.CustomerID = o.CustomerID;Propulsé par
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 departmentsSELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
INNERJOIN departments
-- Returns only employees assigned to a departmentON employees.department_id = departments.department_id;Propulsé par
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 departmentSELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
LEFTJOIN departments
ON employees.department_id = departments.department_id;Propulsé par
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 employeesSELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
RIGHTJOIN departments
ON employees.department_id = departments.department_id;Propulsé par
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 departmentsSELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
FULLJOIN departments
ON employees.department_id = departments.department_id;Propulsé par
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 departmentsSELECT employees.employee_id, employees.employee_name, departments.department_name
FROM employees
INNERJOIN departments
-- Returns only employees assigned to a departmentON employees.department_id = departments.department_id;Propulsé par
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 departmentSELECT employees.employee_id, employees.employee_name, departments.department_name
FROM employees
LEFTJOIN departments
ON employees.department_id = departments.department_id;Propulsé par
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.
Je crée des articles qui simplifient la science des données et l'analyse, en les rendant faciles à comprendre et accessibles.
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 l'essentiel de l'architecture d'un entrepôt de données, des composants clés aux meilleures pratiques, pour construire un système de données évolutif et efficace !
Découvrez les principales différences, les applications et la mise en œuvre de la normalisation et de la standardisation dans le prétraitement des données pour l’apprentissage automatique.
Apprenez à utiliser JSON en Python, notamment la sérialisation, la désérialisation, le formatage, l'optimisation des performances, la gestion des API, ainsi que les limites et les alternatives de JSON.
Débloquez tout le potentiel de vos données grâce à des requêtes SQL avancées et préparez des jeux de données robustes avec PostgreSQL pour la data science.
Dans ce tutoriel, j'expliquerai la différence entre SQL
INNER JOINetOUTER JOINet 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, commeSELF JOINetCROSS JOIN, ainsi que des idées plus larges, comme la théorie des ensembles.Réponse rapide
INNER JOINrenvoie 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.OUTER JOINinclut 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.Un examen approfondi de SQL INNER JOIN et OUTER JOIN
Examinons maintenant de plus près SQL
INNER JOINetOUTER 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 JOINpermet 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, etsalaryet renvoie les lignes oùdepartment_idexiste.Exemple de tableau fusionné à l'aide de SQL INNER JOIN. Image par l'auteur.
Fonctionnement de l'OUTER JOIN
Le site
OUTER JOINinclut les lignes non appariées d'un ou des deux tableaux, selon le type deOUTER JOINutilisé.JOINTURE EXTERNE GAUCHE (JOINTURE GAUCHE)
Le site
LEFT OUTER JOINrenvoie tous les enregistrements du tableau de gauche et les enregistrements correspondants du tableau de droite. S'il n'y a pas de correspondance, les valeursNULLsont 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'adressedepartment_namemanquante pour les salariés est renvoyée sous la formeNULL.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 JOINrenvoie tous les enregistrements du tableau de droite et les enregistrements correspondants du tableau de gauche. Les tableaux non appariés du tableau de gauche renvoientNULL.La requête ci-dessous renvoie tous les enregistrements du tableau
departments, même s'il n'y a pas de salariés correspondants.Exemple de conte joint à l'aide de la jointure externe droite SQL. Image par l'auteur.
JOINTURE EXTERNE COMPLÈTE
Le site
FULL OUTER JOINcombine les résultats des jointures externes gauche et droite. Il renvoie tous les enregistrements des deux tableaux, en remplissantNULLlorsqu'il n'y a pas de correspondance.La requête ci-dessous renvoie tous les tableaux
employeesetdepartments, même si les lignes ne sont pas appariées.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 JOINetOUTER JOINdiffè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 JOINne 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
employeesdont les tableaux correspondent à ceux dedepartments.Exemple de tableau joint à l'aide de SQL INNER JOIN. Image par l'auteur.
Ce que renvoie l'OUTER JOIN
OUTER JOINinclut les lignes non appariées d'un tableau ou des deux tableaux, selon le type deOUTER JOIN. Par exemple, le siteLEFT OUTER JOINrenvoie 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.
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 JOINetOUTER JOINdiffèrent également dans leurs cas d'utilisation pratique pour la recherche de données.Quand utiliser INNER JOIN
INNER JOINest plus efficace lorsque vous n'avez besoin que des données croisées de deux tableaux. Par exemple, vous pouvez utiliserINNER JOINlorsque 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 JOINest 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 JOINetOUTER JOINpour 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.