Le guide ultime pour comprendre les jointures SQL

NicolasBrondinBernard
Les jointures SQL permettent de combiner des données issues de plusieurs tables. Voici un guide simple pour les débutants, illustré avec des schémas et des exemples en MySQL.

Article publié le 02/10/2025, dernière mise à jour le 06/10/2025
Qu’est-ce qu’une jointure ?
Dans une base de données, les informations sont souvent réparties dans plusieurs tables.
Une jointure (JOIN) permet de relier ces tables à partir d’une colonne commune (souvent une clé primaire et une clé étrangère).
Exemple : une table
users
et une tableorders
peuvent être reliées viausers.id = orders.user_id
.
Il existe plusieurs types de jointures, qui vont nous permettre de lier ces données, pour leur donner un sens en particulier, les filtrer, etc... Certaines jointures sont natives au SGBD (ici MySQL pour les exemples), et pour d'autres il faudra utiliser de la logique SQL pour les créer !
Les jointures principales
INNER JOIN
Une jointure interne (INNER JOIN
) ne retourne que les lignes de A qui possèdent un lien avec B.
SELECT *
FROM A
INNER JOIN B ON A.key = B.key;
user.id | user.name | order.id | order.user_id | order.total |
---|---|---|---|---|
1 | Alice | 101 | 1 | 49.99 |
2 | Bob | 102 | 2 | 89.00 |
Exemple : Dans un logiciel de e-commerce, on peut utiliser un INNER JOIN entre users et orders pour afficher uniquement les clients qui ont passé une commande.
LEFT JOIN
Une jointure à gauche (LEFT JOIN
ou LEFT OUTER JOIN
) retourne toutes les lignes de A, et les données de B quand il y a correspondance (sinon NULL).
⚠️ Attention : Si plusieurs lignes de B sont en lien avec une ligne de A, alors A apparaitra plusieurs fois !
SELECT *
FROM A
LEFT JOIN B ON A.key = B.key;
project.id | project.name | task.id | task.project_id | task.name |
---|---|---|---|---|
1 | Site Web | 201 | 1 | Page d’accueil |
1 | Site Web | 202 | 1 | Contact |
1 | Site Web | 203 | 1 | Mentions légales |
2 | Application Mobile | NULL | NULL | NULL |
Exemple : dans un logiciel de gestion de projets, un LEFT JOIN entre projects et tasks permet d’afficher tous les projets, même ceux qui n’ont encore aucune tâche assignée.
RIGHT JOIN
Une jointure à droite (RIGHT JOIN
ou RIGHT OUTER JOIN
) retourne toutes les lignes de B, et les données de A quand il y a correspondance (sinon NULL).
ℹ️ Notes : En général, une jointure à droite est utilisée pour simplifier l'écriture d'une requête à la place d'une jointure à gauche, et pour des raisons de performances dans de rares cas.
SELECT *
FROM A
RIGHT JOIN B ON A.key = B.key;
user.id | user.name | booking.id | booking.user_id | booking.date |
---|---|---|---|---|
1 | Alice | 301 | 1 | 2024-10-01 |
NULL | NULL | 302 | NULL | 2024-10-03 |
Exemple : dans un outil de réservation, un RIGHT JOIN entre users et bookings permet d’afficher toutes les réservations, même celles liées à des comptes supprimés.
FULL JOIN
Une jointure externe complète (FULL JOIN
ou FULL OUTER JOIN
) retourne toutes les lignes de A et toutes les lignes de B, qu’elles correspondent ou non.
SELECT *
FROM A
LEFT JOIN B ON A.key = B.key
UNION
SELECT *
FROM A
RIGHT JOIN B ON A.key = B.key;
student.id | student.name | exam.id | exam.student_id | exam.score |
---|---|---|---|---|
1 | Alice | 701 | 1 | 15 |
2 | Bob | NULL | NULL | NULL |
NULL | NULL | 702 | NULL | NULL |
Exemple : dans un logiciel de gestion d’école, un FULL OUTER JOIN entre students et exam_results permettrait d’afficher tous les élèves (même ceux sans note) et tous les examens (même ceux sans participants).
Les jointures spéciales
La plupart des cas d'usages seront couverts par les jointures présentées précédemment, mais il se peut que vous tombiez sur des cas particuliers, qui vous demande des jointures plus complexes.
LEFT ANTI JOIN
Une anti-jointure à gauche (LEFT ANTI JOIN
) retourne toutes les lignes de A, sauf quand elles ont un lien vers B.
SELECT *
FROM A
LEFT JOIN B ON A.key = B.key
WHERE B.key IS NULL;
user.id | user.name | order.id | order.user_id |
---|---|---|---|
3 | Charlie | NULL | NULL |
4 | Diana | NULL | NULL |
Exemple : dans un CRM, trouver les clients qui n’ont jamais passé de commande.
RIGHT ANTI JOIN
Une anti-jointure à droite (RIGHT ANTI JOIN
) retourne toutes les lignes de B, sauf quand elles ont un lien vers A.
SELECT *
FROM A
RIGHT JOIN B ON A.key = B.key
WHERE A.key IS NULL;
employee.id | employee.name | payroll.id | payroll.user_id | payroll.amount |
---|---|---|---|---|
NULL | NULL | 501 | NULL | 3200 |
NULL | NULL | 502 | NULL | 2800 |
Exemple : dans un logiciel RH, afficher les employés enregistrés dans la paie mais pas encore présents dans la base RH principale.
FULL ANTI JOIN
Une anti-jointure complète (FULL ANTI JOIN
) retourne toutes les lignes de A et de B, sauf quand celles qui font un lien entre A et B.
SELECT *
FROM A
FULL OUTER JOIN B ON A.key = B.key
WHERE A.key IS NULL OR B.key IS NULL;
person.id | person.name | animal.id | animal.owner_id | animal.name |
---|---|---|---|---|
1 | Olivier | NULL | NULL | NULL |
2 | Karim | NULL | NULL | NULL |
NULL | NULL | 23 | NULL | Milou |
NULL | NULL | 25 | NULL | Bouli |
Exemple : dans un site de refuge animalier, on veut trouver tous les animaux qui n'ont plus de maîtres, et tous les maîtres qui n'ont plus d'animaux.
Des cours complets, des exercices et des certificats pour vraiment apprendre la programmation !
4,8 en moyenne
Aucun commentaire pour l'instant