16th Dec 2024 8 minutes de lecture INNER JOIN vs. OUTER JOIN : Quelle est la différence ? Gustavo du Mortier join Table des matières Qu'est-ce qu'un JOIN en SQL ? Qu'est-ce qu'une JOIN INNER ? Qu'est-ce qu'un OUTER JOIN ? JOINTURE EXTERNE GAUCHE JOINTURE EXTERNE DROITE JOINTURE EXTERNE COMPLÈTE Résumé de INNER JOIN vs OUTER JOIN Où en savoir plus sur les JOIN INNER et OUTER Décider quand utiliser INNER JOIN ou OUTER JOIN est souvent un défi pour les débutants. Dans cet article, vous trouverez des explications et des exemples qui vous aideront à mieux comprendre la différence entre ces deux jointures. En SQL, JOINs vous permet de combiner des données provenant de différentes tables ; INNER JOIN et OUTER JOIN sont simplement des types d'instructions JOIN. Il est essentiel de comprendre leurs différences si vous travaillez avec des bases de données relationnelles. Elle est également cruciale si vous passez un entretien d'embauche en SQL : la différence entre INNER JOIN et OUTER JOIN fait partie des questions les plus fréquemment posées lors d'un entretien d'embauche en SQL. Pour réviser vos connaissances sur JOINs, je vous recommande notre cours interactif Les jointures en SQL. Vous y trouverez 93 exercices pratiques couvrant tous les cas d'utilisation de INNER JOIN par rapport à OUTER JOIN. En outre, vous apprendrez à filtrer correctement les données avec les différentes variantes de JOIN et à combiner des tables avec des colonnes non clés. Qu'est-ce qu'un JOIN en SQL ? Commençons par examiner une base SQL JOIN. Imaginons que vous disposiez d'une base de données universitaire avec les tables student et lecturer. Dans la table student nous avons le champ optionnel advisor_id qui stocke l'ID du professeur qui est le conseiller de thèse de l'étudiant. Un étudiant peut ne pas avoir de conseiller s'il n'a pas encore rédigé sa thèse. Pour afficher les noms des étudiants et de leurs conseillers, nous utilisons l'instruction JOIN: SELECT student.full_name AS student_name, lecturer.full_name AS advisor_name FROM student JOIN lecturer ON student.advisor_id = lecturer.id; Les données résultantes pourraient ressembler à ceci : student_nameadvisor_name Alice JohnsonAmina Patel Michael SmithSantiago Rivera Bob SmithJessica Martinez Charlie BrownJessica Martinez L'instruction JOIN vient après la clause FROM: vous placez le nom de la première table après FROM, puis le mot-clé JOIN, puis le nom de l'autre table, suivi du mot-clé ON et de la condition JOIN. Dans notre cas, la condition JOIN est student.advisor_id = lecturer.id. Cette requête renvoie les lignes où le advisor_id de la table student correspond à id dans la table lecturer table. En fait, elle renvoie les noms des étudiants ainsi que les noms de leurs conseillers. Pour toute référence ultérieure sur tous les types de JOIN, nous vous recommandons de mettre en signet ou d'imprimer notre fiche d'aide sur les JOIN SQL. Qu'est-ce qu'une JOIN INNER ? Lorsque vous utilisez le mot-clé JOIN en SQL, vous effectuez en fait une recherche sur INNER JOIN. Une recherche sur INNER JOIN renvoie toutes les combinaisons de lignes des deux tables qui satisfont à la condition ON. Dans notre exemple, il renvoie les noms des étudiants et de leurs conseillers. Cependant, un INNER JOIN n'est pas suffisant si vous souhaitez inclure des lignes qui n'ont pas de correspondance dans l'autre table. Par exemple, vous pouvez vouloir afficher les noms de tous les étudiants, même ceux qui n'ont pas encore de conseiller. Ou bien vous voulez inclure les noms de tous les professeurs, même ceux qui ne conseillent aucun étudiant. C'est là que OUTER JOIN entre en jeu. Qu'est-ce qu'un OUTER JOIN ? Un OUTER JOIN est le type de JOIN qui renvoie les lignes correspondantes des deux tables plus toutes les lignes non correspondantes de l'une des tables (ou parfois des deux). OUTER JOIN a trois variantes : LEFT OUTER JOIN, RIGHT OUTER JOIN, et FULL OUTER JOIN. Examinons chacune d'entre elles. JOINTURE EXTERNE GAUCHE LEFT OUTER JOIN (ou simplement LEFT JOIN) renvoie toutes les lignes de la table de gauche (la table à gauche de l'instruction JOIN, c'est-à-dire immédiatement après FROM) avec les données correspondantes de la table de droite (la table à droite de (c'est-à-dire immédiatement après) l'instruction JOIN ). S'il n'y a pas de correspondance, les colonnes provenant du tableau de droite sont remplies avec NULL. En utilisant les commandes student et lecturer nous pouvons utiliser LEFT JOIN pour obtenir une liste de tous les étudiants avec les données de leur conseiller. Nous voulons inclure tous les étudiants, même ceux qui n'ont pas encore de conseiller. La requête ressemblerait à ceci : SELECT student.full_name AS student_name, lecturer.full_name AS advisor_name FROM student LEFT JOIN lecturer ON student.advisor_id = lecturer.id; Les résultats sont les suivants : student_nameadvisor_name Alice JohnsonAmina Patel Michael SmithSantiago Rivera Bob SmithJessica Martinez Charlie BrownJessica Martinez Diana PrinceNULL Dans les résultats, nous pouvons voir une ligne qui n'a pas été incluse précédemment. L'étudiante Diana Prince n'a pas de conseiller, elle n'a donc pas été incluse dans le résultat de la requête INNER JOIN. Cependant, avec une requête LEFT JOIN, elle est incluse. LEFT JOIN inclut toutes les lignes du tableau de gauche, même celles qui n'ont pas de ligne correspondante dans le tableau de droite. Les colonnes provenant du tableau lecturer sont affichées sous la forme NULL. Lisez cet article sur les JOINTS EXTERNES GAUCHES en SQL si vous avez besoin de plus d'informations. JOINTURE EXTERNE DROITE RIGHT OUTER JOIN (ou simplement RIGHT JOIN) renvoie toutes les lignes de la table de droite (la deuxième table) avec les données correspondantes de la table de gauche (la première table). S'il n'y a pas de correspondance, les colonnes provenant de la table de gauche sont remplies de zéros. Supposons que nous souhaitions dresser la liste des professeurs avec les données relatives aux étudiants qu'ils conseillent. Nous voulons inclure tous les professeurs, même ceux qui ne conseillent aucun étudiant. Nous écrirons donc une requête comme celle-ci : SELECT student.full_name AS student_name, lecturer.full_name AS lecturer_name FROM student RIGHT JOIN lecturer ON student.advisor_id = lecturer.id; Le résultat de cette requête est le suivant : student_namelecturer_name Alice JohnsonAmina Patel Michael SmithSantiago Rivera Bob SmithJessica Martinez Charlie BrownJessica Martinez NULLKeiko Tanaka NULLJamal Al-Fayed NULLNadia Kowalski L'utilisation de RIGHT JOIN dans la requête nous permet d'obtenir une liste de tous les chargés de cours, qu'ils soient affectés à des étudiants ou non. Si un enseignant est affecté à un étudiant, il est listé avec le nom de l'étudiant. Si un enseignant n'est associé à aucun étudiant, les données relatives aux étudiants dans l'ensemble de résultats sont NULL. Consultez ce guide complet sur les jointures SQL pour obtenir toutes les ressources dont vous avez besoin pour bien comprendre ce sujet. JOINTURE EXTERNE COMPLÈTE FULL OUTER JOIN (ou simplement FULL JOIN) nous permet d'obtenir toutes les données des deux tables, qu'il y ait ou non une correspondance entre leurs lignes. Dans notre exemple, l'utilisation de FULL JOIN entre student et lecturer permet d'obtenir tous les étudiants et tous les professeurs. La requête ressemblerait à ceci : SELECT student.full_name AS student_name, lecturer.full_name AS advisor_name FROM student FULL JOIN lecturer ON student.advisor_id = lecturer.id; Et les résultats seraient les suivants : student_nameadvisor_name Alice JohnsonAmina Patel Michael SmithSantiago Rivera Bob SmithJessica Martinez Charlie BrownJessica Martinez Diana PrinceNULL NULLKeiko Tanaka NULLJamal Al-Fayed NULLNadia Kowalski Dans le résultat, vous pouvez voir tous les étudiants et tous les professeurs. Si un étudiant n'a pas de conseiller, les données relatives au conseiller sont NULL. Si un enseignant n'est affecté à aucun étudiant, les données relatives à l'étudiant correspondant sont NULL. Trouvez d'autres exemples et mettez vos connaissances à l'épreuve avec ces 12 questions d'entraînement SQL JOIN. Certains systèmes de gestion de bases de données relationnelles (SGBDR), tels que MySQL et MariaDB, ne prennent pas en charge FULL JOIN. Vous pouvez obtenir le même résultat dans ces SGBD, mais la requête est un peu plus longue. La façon de créer un FULL JOIN dans les versions de SQL qui ne supportent pas cette commande est d'utiliser UNION entre le INNER JOIN, le LEFT JOIN et le RIGHT JOIN: SELECT student.full_name AS student_name, lecturer.full_name AS advisor_name FROM student LEFT JOIN lecturer ON student.advisor_id = lecturer.id UNION SELECT student.full_name AS student_name, lecturer.full_name AS advisor_name FROM student JOIN lecturer ON student.advisor_id = lecturer.id SELECT student.full_name AS student_name, lecturer.full_name AS advisor_name FROM student RIGHT JOIN lecturer ON student.advisor_id = lecturer.id; Dans le script ci-dessus, l'union des trois formes de JOIN - LEFT JOIN, INNER JOIN et RIGHT JOIN - produit les mêmes données que le FULL JOIN dans les SGBDR qui le supportent. Lorsque vous aurez acquis la maîtrise de Les jointures en SQL, lisez ces questions et réponses d'entretien SQL JOIN pour vérifier si vous êtes prêt pour un entretien d'embauche. Résumé de INNER JOIN vs OUTER JOIN Nous pouvons synthétiser ce que nous avons appris sur INNER JOIN et OUTER JOIN dans le tableau suivant : INNER JOIN OUTER JOIN Explication Renvoie les lignes des deux tables où la condition ON est satisfaite Renvoie les lignes des deux tables où la condition ON est satisfaite ET également les enregistrements sans correspondance d'une ou des deux tables, en les remplissant avec des valeurs nulles là où aucune correspondance n'existe. Types 1 type: JOIN 3 types différents: LEFT JOIN, RIGHT JOIN, FULL JOIN Abréviation JOIN = INNER JOIN LEFT JOIN = LEFT OUTER JOIN RIGHT JOIN = RIGHT OUTER JOIN FULL JOIN = FULL OUTER JOIN Exemple SELECT student.full_name, lecturer.full_name FROM student JOIN lecturer ON student.advisor_id = lecturer.id; SELECT student.full_name, lecturer.full_name FROM student LEFT JOIN lecturer ON student.advisor_id = lecturer.id; Pour plus de détails, consultez cette liste de sept exemples de JOIN SQL accompagnés d'explications. Où en savoir plus sur les JOIN INNER et OUTER Maintenant que vous connaissez les différences entre INNER JOIN et OUTER JOIN, vous pouvez écrire des requêtes précises qui génèrent des informations fiables et exactes. Avec de l'entraînement, vous serez en mesure de répondre à n'importe quelle question d'entretien SQL sur les différences entre INNER JOIN et OUTER JOIN. Avant d'aller plus loin, je vous recommande notre cours Les jointures en SQL si vous souhaitez approfondir vos connaissances. À la fin du cours, vous connaîtrez les différentes façons d'obtenir des données combinées à partir de plusieurs tables. Et vous saurez comment choisir la meilleure option pour chaque scénario. Maintenant, c'est à vous de commencer à vous informer sur les différences entre INNER JOIN et OUTER JOIN. Bon apprentissage ! Tags: join