2nd Dec 2022 9 minutes de lecture Quels sont les différents types de jointures SQL ? Dmitri Vaitkun sql apprendre sql sql joins Table des matières INNER JOIN (alias JOIN) JOINTURE EXTERNE GAUCHE JOINTURE EXTERNE DROITE JOINTURE EXTERNE COMPLÈTE CROSS JOIN Entraînez-vous à tous les types de jointures SQL ! On ne peut sous-estimer l'importance de la JOIN dans l'apprentissage de SQL. Non seulement il s'agit de l'une des opérations les plus fondamentales dans les bases de données relationnelles, mais elle est également très polyvalente avec de nombreux types différents. Bien que le JOIN SQL puisse être intimidant au début, il devient un instrument très pratique dans votre arsenal une fois que vous le comprenez. Explorons tous les types de SQL JOIN ! Nous pouvons affirmer sans risque que l'opération JOIN est l'une des fonctionnalités les plus puissantes de SQL. C'est la source d'envie de tous les SGBD (systèmes de gestion de bases de données) non relationnels - c'est un concept très simple et pourtant largement applicable dans les cas où l'on joint deux ensembles de données. En bref, le site JOIN est une opération dans laquelle les tables sont comparées entre elles, ligne par ligne. Cette comparaison vous permet d'éditer les colonnes de n'importe quelle table impliquée dans le JOIN. Un bon endroit pour faire des exercices après avoir lu cet article est notre cours interactif Les jointures en SQL interactif. Il propose plus de 90 exercices pratiques sur les différents types de jointures abordés ici. Maintenant, créons 2 tables pour explorer et maîtriser l'art de JOIN. Notre première table, employeesse compose de 5 colonnes : id - L'identifiant unique de l'employé. name - Le nom de l'employé. specialization - La spécialisation de l'employé dans l'entreprise. coach_id - L'ID du coach/mentor de l'employé. Il s'agit d'un autre employé d'une entreprise. project_id - L'ID du projet en cours dans lequel l'employé est impliqué. idnamespecializationcoach_idproject_id 1Olli WoodwardDeveloper41 2Pete NolanManagerNULL1 3Will BarkerIT Support43 4Uma NormanDeveloperNULL4 5Peggy BergManager24 6Mary SheltonAnalystNULLNULL Le deuxième tableau est projects. Elle contient 3 colonnes : id - L'identifiant unique du projet. name - Le nom du projet. is_external - Une valeur booléenne qui indique si le projet est externe ou interne. idnameis_external 1Website UI/UX DesignTRUE 2Research & DevelopmentFALSE 3SupportFALSE 4Database Architecture DesignTRUE Remarquez qu'il y a un lien logique entre les deux tableaux. Le project_id de employees correspond au id de projects. Les valeurs correspondantes dans les tableaux sont codées en couleur pour une meilleure présentation. Maintenant que nous avons les tables, allons droit au but ! INNER JOIN (alias JOIN) Le premier type de JOIN SQL est le INNER JOIN. Lorsque vous tapez "JOIN" dans votre code SQL, il utilise le INNER JOIN. Ainsi, même si cela ne fait pas de mal, vous n'avez pas besoin d'écrire INNER dans vos requêtes. Un mot-clé ON suit tous les JOIN en SQL. Il indique le début de la condition de connexion. INNER JOINs La jointure, comme toutes les autres jointures, ne produit que les lignes qui satisfont à la condition de connexion. Avant d'aller plus loin, notez que l'opérateur JOIN n'est pas le seul moyen de joindre les données de deux tables. Vous pouvez également utiliser WHERE. Vous souhaitez en savoir plus ? Nous avons l'article qu'il vous faut! Mais laissons la théorie de côté pour l'instant et passons au codage. Utilisons nos deux tables et un INNER JOIN pour savoir quel employé travaille sur quel projet : SELECT employees.name as employee, specialization, projects.name as project FROM employees JOIN projects ON employees.project_id = projects.id Avant de regarder le résultat de cette requête, analysons la requête elle-même. Comme vous pouvez le voir, nous joignons les deux tableaux à l'aide de JOIN. Après JOIN, nous spécifions l'opérateur ON et la condition de la jointure. Ainsi, nous avons joint les tables en nous basant sur la condition que project_id de la table employees est égal à l'identifiant de la table projects. Regardons le résultat de la requête : employeespecializationproject Olli WoodwardDeveloperWebsite UI/UX Design Pete NolanManagerWebsite UI/UX Design Will BarkerIT SupportSupport Uma NormanDeveloperDatabase Architecture Design Peggy BergManagerDatabase Architecture Design Nous voyons qu'Olli Woodward et Pete Nolan ont un projet "Website UI/UX Design". Leur project_id est égal à 1, qui est l'ID de ce projet dans la table. projects. Il en va de même pour les autres lignes du résultat. Cependant, nous ne voyons pas Mary Shelton ici. Son project_id est NULL, et il n'y a aucun projet dont l'ID est égal à NULL. De même, le projet "Recherche et développement" a l'ID 2, mais aucun employé n'a le project_id égal à 2. Nous avons suscité votre intérêt pour le site INNER JOIN et vous souhaitez en savoir plus sur ses subtilités ? Jetez un coup d'œil à notre article consacré à l'INNER JOIN! JOINTURE EXTERNE GAUCHE LEFT OUTER JOIN est l'un des types de jointures externes SQL. Le mot-clé OUTER est facultatif et est souvent omis, ce qui nous laisse avec l'opérateur LEFT JOIN. La différence générale entre OUTER JOIN et INNER JOIN est que la JOIN EXTERNE inclut non seulement les lignes qui satisfont à la condition de connexion, mais aussi les lignes qui ne satisfont pas à la condition d'une (ou plusieurs) des tables. Pour en revenir à LEFT OUTER JOIN, elle inclut les lignes qui satisfont à la condition de connexion (tout comme INNER JOIN) et toutes les autres lignes de la table de gauche (ou la première). Reprenons notre exemple précédent en remplaçant JOIN par LEFT JOIN pour voir la différence : SELECT employees.name as employee, specialization, projects.name as project FROM employees LEFT JOIN projects ON employees.project_id = projects.id Et voici le résultat de la requête : employeespecializationproject Olli WoodwardDeveloperWebsite UI/UX Design Pete NolanManagerWebsite UI/UX Design Will BarkerIT SupportSupport Uma NormanDeveloperDatabase Architecture Design Peggy BergManagerDatabase Architecture Design Mary SheltonAnalystNULL Comme vous pouvez le voir, une ligne supplémentaire a été ajoutée : Mary Shelton avec le projet NULL. Cette ligne particulière ne satisfait pas à la condition employees.project_id = projects.id, car il n'existe aucun projet avec un ID NULL. Mais cette ligne existe dans la table employees et elle est donc ajoutée au résultat. Le nom du projet de Mary Shelton est une valeur NULL pour la même raison puisqu'il n'y a pas d'ID de NULL parmi les projets. Vous comprenez maintenant l'idée principale de LEFT OUTER JOIN. Cela dit, vous pouvez toujours lire notre article sur la LEFT OUTER JOIN pour en savoir plus ou voir d'autres exemples ! INNER et LEFT OUTER JOINs sont les types de JOIN les plus courants en SQL. Veillez donc à les pratiquer de manière approfondie avec notre Les jointures en SQL cours. Pour en savoir plus sur ce cours , cliquez ici. JOINTURE EXTERNE DROITE La jointure RIGHT OUTER JOIN peut être considérée comme le frère jumeau de la jointure LEFT OUTER JOIN. La seule différence entre ces deux types de jointures SQL est la table dans laquelle les enregistrements sont extraits, quelle que soit la condition de la jointure JOIN. Dans le cas de LEFT OUTER JOIN, il s'agit de la première table ou table de gauche ; dans le cas de RIGHT OUTER JOIN, il s'agit de la deuxième table ou table de droite. Reprenons l'exemple précédent, mais changeons maintenant LEFT JOIN en RIGHT JOIN: SELECT employees.name as employee, specialization, projects.name as project FROM employees RIGHT JOIN projects ON employees.project_id = projects.id Maintenant, analysons le résultat de la requête : employeespecializationproject Olli WoodwardDeveloperWebsite UI/UX Design Pete NolanManagerWebsite UI/UX Design Will BarkerIT SupportSupport Uma NormanDeveloperDatabase Architecture Design Peggy BergManagerDatabase Architecture Design NULLNULLResearch & Development Comme nous pouvons le voir, l'enregistrement de Mary Shelton a disparu maintenant. Il ne satisfait pas à la condition ON et n'appartient pas non plus à la table de droite. Il n'est donc pas inclus dans le résultat ici. D'autre part, nous obtenons maintenant le projet "Recherche et développement". Il ne satisfait pas à la condition JOIN, mais il existe dans la table de droite et est donc inclus dans le résultat. Remarquez que cette ligne a NULLs dans les colonnes employé et specialization. Cela s'explique par le fait qu'aucun enregistrement de la table employees n'a project_id égal à 2, l'ID de ce projet. Par conséquent, un NULL est retourné à la place. JOINTURE EXTERNE COMPLÈTE La jointure FULL OUTER JOIN, ou simplement FULL JOIN, est le dernier type de OUTER JOIN. D'une certaine manière, elle combine à la fois LEFT et RIGHT OUTER JOINs. Si elle inclut les enregistrements qui satisfont à la condition JOIN, elle inclut également les lignes des deux tables qui ne satisfont pas à cette condition. Autrement dit, FULL JOIN renvoie toutes les lignes des deux tables. Si une ligne d'une table n'a pas d'enregistrement correspondant dans l'autre table, les données manquantes sont complétées par NULLs. Voyons un exemple de FULL OUTER JOIN: SELECT employees.name as employee, specialization, projects.name as project FROM employees FULL JOIN projects ON employees.project_id = projects.id Voici le résultat : employeespecializationproject Olli WoodwardDeveloperWebsite UI/UX Design Pete NolanManagerWebsite UI/UX Design Will BarkerIT SupportSupport Uma NormanDeveloperDatabase Architecture Design Peggy BergManagerDatabase Architecture Design Mary SheltonAnalystNULL NULLNULLResearch & Development Comme vous pouvez le voir, nous avons ici toutes les lignes des deux tables. Les lignes qui satisfont à la condition ont les données correspondantes des deux tableaux. Pour les lignes qui ne le sont pas, les colonnes de l'autre tableau sont remplies avec NULLs. Si vous souhaitez obtenir une brève description accessible de FULL OUTER JOIN ainsi que d'autres types de jointures SQL, utilisez notre aide-mémoire sur les jointures SQL. CROSS JOIN Ce type de jointure SQL est assez différent de ceux mentionnés jusqu'à présent dans cet article. Non seulement son objectif est différent, mais il a également une syntaxe légèrement différente. Lorsqu'elle est utilisée dans une requête, une CROSS JOIN renvoie un produit cartésien - toutes les combinaisons possibles des lignes des deux tables. Tous les enregistrements d'une table sont automatiquement joints à tous les enregistrements de l'autre table. Il n'y a pas non plus de condition ON. Pour ce JOIN dans une requête, il suffit d'utiliser l'opérateur CROSS JOIN sans le faire suivre du mot-clé ON. Voyons comment tout cela fonctionne dans un exemple : SELECT employees.name as employee, projects.name as project FROM employees CROSS JOIN projects Notez que nous sélectionnons deux colonnes, le nom de l'employé et le nom du projet, suivies de CROSS JOIN. Regardons le résultat : employeeproject Olli WoodwardWebsite UI/UX Design Olli WoodwardResearch & Development Olli WoodwardSupport Olli WoodwardDatabase Architecture Design Pete NolanWebsite UI/UX Design Pete NolanResearch & Development Pete NolanSupport Pete NolanDatabase Architecture Design Will BarkerWebsite UI/UX Design Will BarkerResearch & Development Will BarkerSupport Will BarkerDatabase Architecture Design Uma NormanWebsite UI/UX Design Uma NormanResearch & Development Uma NormanSupport Uma NormanDatabase Architecture Design Peggy BergWebsite UI/UX Design Peggy BergResearch & Development Peggy BergSupport Peggy BergDatabase Architecture Design Mary SheltonWebsite UI/UX Design Mary SheltonResearch & Development Mary SheltonSupport Mary SheltonDatabase Architecture Design Notez le nombre de lignes qu'il retourne. Il est assez facile de le calculer : le nombre de lignes dans le premier tableau * le nombre de lignes dans le second tableau = le nombre de lignes obtenues. Ainsi, chacun des 6 employés est affecté à chacun des 4 projets. Vous avez encore des questions sur le site CROSS JOIN ou vous voulez simplement en savoir plus. Consultez notre Guide illustré du CROSS JOIN SQL! Entraînez-vous à tous les types de jointures SQL ! Vous connaissez maintenant les différents types de JOIN en SQL. C'est une excellente occasion d'approfondir ces nouvelles connaissances ou simplement de revoir ce que vous savez déjà. Dans tous les cas, je vous recommande notre excellent cours interactif SQL JOIN. Avec plus de 90 exercices pratiques, c'est l'occasion de mettre en pratique cet aspect fondamental de SQL ! Tags: sql apprendre sql sql joins