Le guide ultime pour comprendre les jointures SQL

NicolasBrondinBernard

Auteur
@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 table orders peuvent être reliées via users.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.

right join.png

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.


Vous avez terminé l'article ?
Nos cours complets
Passez à la vitesse supérieure grâce à nos formations !

Des cours complets, des exercices et des certificats pour vraiment apprendre la programmation !

4,8 en moyenne

Commentaires (0)

pour laisser un commentaire

Aucun commentaire pour l'instant

Articles recommandés