Retour à la liste des articles Articles
9 minutes de lecture

Quels sont les différents 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 !