SQL · Requêtes avancées

Guide complet sur les 4 clauses JOIN en SQL

INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN : maîtrisez toutes les façons de combiner vos tables relationnelles. Exemples concrets, schémas et cas d'usage.

Niveau : débutant à intermédiaire | Temps de lecture : 10 min | Mis à jour : avril 2026

Introduction aux JOIN

Les opérations JOIN en SQL sont essentielles pour combiner des données provenant de plusieurs tables en fonction d'une condition de correspondance. Elles permettent de créer des requêtes complexes et d'extraire des informations pertinentes à partir de bases de données relationnelles.

Pourquoi les JOIN sont-ils indispensables ?

Dans une base de données relationnelle, les données sont réparties dans plusieurs tables pour éviter la redondance. Les JOIN permettent de reconnecter ces informations dispersées.

90%
des requêtes analytiques utilisent au moins un JOIN
Stack Overflow Survey, 2025
4
types principaux à maîtriser absolument
INNER, LEFT, RIGHT, FULL

Schéma des 4 types de clauses JOIN

Vue d'ensemble des 4 types de JOIN SQL

Diagramme récapitulatif des 4 JOIN (cercles de Venn)

1. INNER JOIN

Définition :

L'INNER JOIN retourne uniquement les lignes où il y a une correspondance entre les deux tables. Si aucune correspondance n'est trouvée, la ligne est exclue du résultat.

Schéma

INNER JOIN (intersection)
   Table A         Table B
  ┌─────────┐     ┌─────────┐
  │   A1    │     │   B1    │
  │   A2    │  +  │   B2    │  =  [A2, B2]  ← Correspondance trouvée
  │   A3    │     │   B3    │
  └─────────┘     └─────────┘

Résultat de INNER JOIN :
[A2, B2]

Schéma INNER JOIN

Exemple pratique

Clients ayant passé au moins une commande
SELECT c.ClientID, c.Nom, o.OrderID, o.Date
FROM Clients c
INNER JOIN Commandes o
  ON c.ClientID = o.ClientID;

Cas d'utilisation

  • Lister les clients ayant effectué au moins une commande
  • Trouver les produits commandés (exclure ceux jamais vendus)
  • Joindre des tables de référence (ex: produits et catégories)

2. LEFT JOIN (ou LEFT OUTER JOIN)

Définition :

Le LEFT JOIN renvoie toutes les lignes de la table de gauche (première table) et les lignes correspondantes de la table de droite. Si aucune correspondance n'est trouvée, les colonnes de la table de droite contiendront des valeurs NULL.

Schéma

LEFT JOIN (toute la table de gauche)
   Table A         Table B
  ┌─────────┐     ┌─────────┐
  │   A1    │     │         │  ← Pas de correspondance
  │   A2    │  +  │   B2    │  ← Correspondance trouvée
  │   A3    │     │         │  ← Pas de correspondance
  └─────────┘     └─────────┘

Résultat de LEFT JOIN :
[A1, NULL]
[A2, B2]
[A3, NULL]

Exemple pratique

Tous les clients (même sans commande)
SELECT c.ClientID, c.Nom, o.OrderID, o.Date
FROM Clients c
LEFT JOIN Commandes o
  ON c.ClientID = o.ClientID;

Cas d'utilisation

  • Identifier les clients qui n'ont jamais passé de commande
  • Lister tous les produits, même ceux sans vente
  • Conserver toutes les lignes de la table principale (ex: annuaire complet)
Astuce : Pour trouver les clients sans commande, ajoutez WHERE o.OrderID IS NULL.

4. FULL JOIN (ou FULL OUTER JOIN)

Définition :

Le FULL JOIN combine les résultats du LEFT JOIN et du RIGHT JOIN. Il renvoie toutes les lignes des deux tables, en remplissant avec des NULL là où il n'existe pas de correspondance.

Schéma

FULL JOIN (union des deux tables)
   Table A         Table B
  ┌─────────┐     ┌─────────┐
  │   A1    │     │   B1    │  ← Pas de correspondance dans A pour B1
  │   A2    │  +  │   B2    │  ← Correspondance trouvée
  │   A3    │     │   B3    │  ← Pas de correspondance dans A pour B3
  └─────────┘     └─────────┘

Résultat de FULL JOIN :
[A1, NULL]
[A2, B2]
[NULL, B1]
[NULL, B3]

Exemple pratique

Vue complète clients + commandes
SELECT c.ClientID, c.Nom, o.OrderID, o.Date
FROM Clients c
FULL OUTER JOIN Commandes o
  ON c.ClientID = o.ClientID;

Cas d'utilisation

  • Identifier à la fois les clients sans commandes ET les commandes sans clients
  • Fusionner deux tables ayant des données partiellement chevauchantes
  • Audit de qualité des données (incohérences référentielles)

Simulation quand FULL JOIN n'est pas supporté

Alternative avec UNION (MySQL, SQLite)
SELECT c.ClientID, c.Nom, o.OrderID, o.Date
FROM Clients c
LEFT JOIN Commandes o ON c.ClientID = o.ClientID

UNION

SELECT c.ClientID, c.Nom, o.OrderID, o.Date
FROM Clients c
RIGHT JOIN Commandes o ON c.ClientID = o.ClientID;
Support SGBD :

✅ PostgreSQL, SQL Server, Oracle supportent FULL OUTER JOIN.
❌ MySQL, SQLite ne le supportent pas (utiliser l'alternative UNION).

Tableau comparatif des 4 JOIN

JOIN Ce qui est inclus NULL possible Cas d'usage typique
INNER JOIN Uniquement les correspondances Non Clients qui ont commandé
LEFT JOIN Toute la table de gauche + correspondances de droite Oui (côté droit) Tous les clients (même sans commande)
RIGHT JOIN Toute la table de droite + correspondances de gauche Oui (côté gauche) Toutes les commandes (même sans client)
FULL OUTER JOIN Les deux tables complètes Oui (des deux côtés) Fusion complète, audit de cohérence

Diagramme de Venn des 4 types de JOIN SQL

cercles de Venn INNER, LEFT, RIGHT, FULL

JOIN sur plusieurs tables

Il est possible d'enchaîner plusieurs JOIN pour combiner 3 tables ou plus.

3 tables : Clients → Commandes → Produits
SELECT c.Nom, o.Date, p.NomProduit, l.Quantite
FROM Clients c
INNER JOIN Commandes o ON c.ClientID = o.ClientID
INNER JOIN LignesCommande l ON o.OrderID = l.OrderID
INNER JOIN Produits p ON l.ProduitID = p.ProduitID
WHERE o.Date >= '2025-01-01';
Ordre des JOIN :

Dans un INNER JOIN, l'ordre des tables n'affecte pas le résultat. Avec les OUTER JOIN (LEFT/RIGHT), l'ordre est crucial car il détermine quelle table est "préservée".

Performances et bonnes pratiques

1. Indexez les colonnes de jointure

Les colonnes utilisées dans la clause ON doivent être indexées pour accélérer les JOIN.

2. Filtrez avant de joindre quand c'est possible

Utilisez des sous-requêtes ou des CTE pour réduire les volumes avant la jointure.

3. Évitez les JOIN inutiles

Ne joignez que les tables strictement nécessaires. Chaque JOIN ajoute de la complexité.

4. Préférez INNER JOIN à LEFT JOIN quand vous n'avez pas besoin des NULL

INNER JOIN est généralement plus rapide car il exclut les non-correspondances.

Commande utile :

Utilisez EXPLAIN (MySQL, PostgreSQL) ou EXPLAIN PLAN (SQL Server, Oracle) pour analyser le plan d'exécution de vos requêtes et identifier les JOIN coûteux.

FAQ — Les JOIN en SQL

Quelle est la différence entre INNER JOIN et LEFT JOIN ?

INNER JOIN ne retourne que les lignes qui ont une correspondance dans les deux tables. LEFT JOIN retourne toutes les lignes de la table de gauche (première table), même sans correspondance dans la table de droite. Pour trouver les clients sans commande, LEFT JOIN est indispensable.

Quand utiliser RIGHT JOIN plutôt que LEFT JOIN ?

RIGHT JOIN est plus rare. Il peut être utile quand vous voulez préserver toutes les lignes de la table de droite. En pratique, on peut toujours réécrire un RIGHT JOIN en LEFT JOIN en inversant l'ordre des tables. La plupart des développeurs préfèrent LEFT JOIN pour la lisibilité.

Tous les SGBD supportent-ils FULL OUTER JOIN ?

Non. PostgreSQL, SQL Server et Oracle le supportent. MySQL et SQLite ne le supportent pas nativement. Pour MySQL, simulez-le avec UNION entre un LEFT JOIN et un RIGHT JOIN.

Peut-on faire un JOIN sur plus de deux tables ?

Oui, sans limite théorique. On enchaîne les JOIN : FROM A JOIN B ON ... JOIN C ON .... Cependant, trop de JOIN (plus de 5-6) peuvent dégrader les performances et la lisibilité. Dans ce cas, envisagez une refonte du schéma ou des CTE.

Qu'est-ce qu'un self-JOIN ?

Un self-JOIN est un JOIN d'une table avec elle-même. Il nécessite des alias différents. Exemple : trouver les employés et leur manager dans une même table Employes : SELECT e.Nom, m.Nom FROM Employes e LEFT JOIN Employes m ON e.ManagerID = m.EmployeID.

Quelle est la différence entre JOIN et UNION ?

JOIN combine des colonnes de plusieurs tables horizontalement (ajoute des colonnes). UNION combine des lignes de plusieurs requêtes verticalement (ajoute des lignes). Les JOIN sont utilisés pour des données liées par des clés étrangères ; UNION pour concaténer des résultats similaires.

Conclusion

Les JOIN en SQL sont des outils puissants pour combiner des données provenant de plusieurs tables. Voici un résumé des 4 types principaux :

Récapitulatif

  • INNER JOIN : Renvoie uniquement les lignes avec correspondance.
  • LEFT JOIN : Renvoie toutes les lignes de la table de gauche, avec NULL si aucune correspondance.
  • RIGHT JOIN : Renvoie toutes les lignes de la table de droite, avec NULL si aucune correspondance.
  • FULL OUTER JOIN : Renvoie toutes les lignes des deux tables, avec NULL de chaque côté.
Pour aller plus loin : Découvrez notre tutoriel sur les fonctions de fenêtrage SQL pour des analyses encore plus avancées.
Faites parler vos données
Apprenez les méthodes et les outils pour extraire de la valeur stratégique : Data Science : Le guide complet des méthodes et outils.
 

Recevez la veille IA & Data qui compte vraiment

 

    Analyses claires, outils concrets et tendances IA sans bruit.     Rejoignez les lecteurs de IANA Data.