logo oujood
🔍

Jointures SQL : Maîtriser INNER JOIN, LEFT JOIN, RIGHT JOIN et FULL JOIN

Guide technique complet avec exemples pratiques commentés pour combiner des données de plusieurs tables avec les jointures SQL.

OUJOOD.COM

Introduction aux jointures SQL : pourquoi combiner plusieurs tables ?

Dans une base de données relationnelle bien conçue, les données sont réparties dans plusieurs tables spécialisées pour éviter la redondance (principe de normalisation). Les jointures SQL (SQL JOINs) permettent de recombiner ces données dispersées en une seule requête cohérente. Que vous travailliez avec MySQL, PostgreSQL, SQL Server ou Oracle, la syntaxe des jointures est fondamentalement la même et constitue l'une des compétences SQL les plus recherchées en 2026.

Une jointure relie deux tables ou plus via une colonne commune appelée clé de jointure, généralement une clé primaire et sa clé étrangère correspondante. Comprendre quand utiliser chaque type de jointure est essentiel pour écrire des requêtes SQL performantes et précises.

Définition technique d'une jointure SQL

Une jointure SQL est une opération ensembliste qui combine les lignes de deux tables ou plus selon une condition logique définie dans la clause ON. Le résultat est un ensemble de résultats (result set) contenant les colonnes sélectionnées des tables jointes. Le type de jointure détermine quelles lignes sont incluses lorsqu'aucune correspondance n'existe entre les tables.

Syntaxe générale des jointures SQL

SELECT
  t1.colonne1,
  t2.colonne2
FROM
  table1 AS t1
  [INNER | LEFT | RIGHT | FULL] JOIN table2 AS t2 ON t1.cle = t2.cle
  [JOIN table3 AS t3 ON t2.cle = t3.cle]
  ...
WHERE condition
ORDER BY colonne;

Les quatre types de jointures SQL fondamentaux sont :

  • INNER JOIN : Retourne uniquement les lignes ayant une correspondance dans les deux tables — le type de jointure le plus courant.
  • LEFT JOIN (LEFT OUTER JOIN) : Retourne toutes les lignes de la table gauche, avec NULL pour les colonnes de la table droite si aucune correspondance n'existe.
  • RIGHT JOIN (RIGHT OUTER JOIN) : Retourne toutes les lignes de la table droite, avec NULL pour les colonnes de la table gauche si aucune correspondance n'existe.
  • FULL JOIN (FULL OUTER JOIN) : Retourne toutes les lignes des deux tables, avec NULL là où il n'y a pas de correspondance.

Exemples pratiques détaillés de jointures SQL

Pour tous les exemples ci-dessous, nous utilisons deux tables liées par la colonne customer_id : la table customers (clients) et la table orders (commandes). Cette relation un-à-plusieurs (1:N) est l'un des cas d'usage les plus fréquents des jointures SQL.

INNER JOIN : récupérer uniquement les clients ayant passé une commande

L'INNER JOIN est la jointure la plus stricte : elle ne retourne que les lignes pour lesquelles la condition ON est vérifiée dans les deux tables. Si un client n'a aucune commande, il est exclu du résultat.

  📋 Copier le code

SELECT
  c.customer_id,       -- Identifiant unique du client
  c.first_name,        -- Prénom depuis la table customers
  c.last_name,         -- Nom de famille depuis la table customers
  o.order_id,          -- Identifiant de la commande
  o.amount             -- Montant de la commande en euros
FROM
  customers AS c       -- Alias 'c' pour alléger la syntaxe
INNER JOIN
  orders AS o          -- Alias 'o' pour la table des commandes
ON
  c.customer_id = o.customer_id; -- Condition de jointure sur la clé commune

Cette requête retourne uniquement les clients qui ont au moins une commande. Les clients sans commande et les commandes sans client associé sont exclus. Utilisez l'INNER JOIN quand vous avez besoin de données cohérentes dans les deux tables.

LEFT JOIN : lister tous les clients, même sans commande

Le LEFT JOIN garantit que toutes les lignes de la table de gauche (customers) apparaissent dans le résultat. Si un client n'a aucune commande, les colonnes de la table orders contiendront NULL. Idéal pour détecter les clients inactifs.

  📋 Copier le code

SELECT
  c.customer_id,
  c.first_name,
  c.last_name,
  o.order_id,          -- NULL si le client n'a aucune commande
  o.amount             -- NULL si aucune correspondance dans orders
FROM
  customers AS c       -- Table gauche : TOUS les clients seront retournés
LEFT JOIN
  orders AS o          -- Table droite : NULL si pas de commande associée
ON
  c.customer_id = o.customer_id;
-- Astuce : ajoutez WHERE o.order_id IS NULL pour trouver les clients sans commande

Le LEFT JOIN SQL est particulièrement utile pour les rapports de données manquantes : en filtrant avec WHERE o.order_id IS NULL, vous obtenez uniquement les clients qui n'ont jamais commandé.

RIGHT JOIN : lister toutes les commandes, même sans client associé

Le RIGHT JOIN est le miroir du LEFT JOIN : il garantit que toutes les lignes de la table de droite (orders) apparaissent, même si aucun client correspondant n'existe. Utile pour détecter des données orphelines ou des incohérences référentielles.

  📋 Copier le code

SELECT
  c.customer_id,       -- NULL si aucun client ne correspond à la commande
  c.first_name,
  c.last_name,
  o.order_id,
  o.amount
FROM
  customers AS c       -- Table gauche : peut retourner NULL
RIGHT JOIN
  orders AS o          -- Table droite : TOUTES les commandes seront retournées
ON
  c.customer_id = o.customer_id;

Note : en pratique, le RIGHT JOIN est moins utilisé car on peut toujours le réécrire en inversant l'ordre des tables avec un LEFT JOIN, ce qui est plus lisible.

FULL JOIN : union complète des deux tables

Le FULL OUTER JOIN retourne l'ensemble total des lignes des deux tables, avec NULL pour les colonnes manquantes de chaque côté. Il permet de voir toutes les correspondances et toutes les non-correspondances en une seule requête. Attention : MySQL ne supporte pas nativement le FULL JOIN — utilisez UNION entre un LEFT et un RIGHT JOIN à la place.

  📋 Copier le code

SELECT
  c.customer_id,
  c.first_name,
  c.last_name,
  o.order_id,
  o.amount
FROM
  customers AS c
FULL JOIN               -- Supporté par PostgreSQL, SQL Server, Oracle
  orders AS o
ON
  c.customer_id = o.customer_id;
-- Équivalent MySQL avec UNION :
-- SELECT ... FROM customers LEFT JOIN orders ON ...
-- UNION
-- SELECT ... FROM customers RIGHT JOIN orders ON ...

Jointure de trois tables ou plus

Il est fréquent de devoir joindre trois tables ou plus dans une même requête. Chaque jointure supplémentaire s'enchaîne avec une nouvelle clause JOIN ... ON. L'ordre logique suit la chaîne des clés étrangères.

  📋 Copier le code

SELECT
  c.first_name,        -- Prénom du client
  c.last_name,
  o.order_id,          -- Numéro de commande
  o.amount,
  p.product_name       -- Nom du produit depuis une 3e table
FROM
  customers AS c
INNER JOIN orders AS o ON c.customer_id = o.customer_id   -- 1re jointure
INNER JOIN products AS p ON o.product_id = p.product_id;  -- 2e jointure enchaînée

Tutoriel pas à pas : créer et interroger des tables avec jointures SQL

Voici un exemple complet reproductible en MySQL/MariaDB qui illustre le cycle complet d'une jointure SQL : création des tables, insertion des données et exécution de la requête de jointure.

Étape 1 — Créer les tables avec clé primaire et clé étrangère

  📋 Copier le code

-- Création de la table principale des clients
CREATE TABLE clients (
  id      INT          NOT NULL AUTO_INCREMENT, -- Clé primaire auto-incrémentée
  nom     VARCHAR(255) NOT NULL,                -- Nom de famille obligatoire
  prenom  VARCHAR(255) NOT NULL,                -- Prénom obligatoire
  PRIMARY KEY (id)                              -- Définition de la clé primaire
);
-- Création de la table des commandes liée aux clients
CREATE TABLE commandes (
  id         INT NOT NULL AUTO_INCREMENT,
  client_id  INT NOT NULL,                      -- Référence vers clients.id
  montant    INT NOT NULL,                      -- Montant en centimes ou euros
  PRIMARY KEY (id),
  FOREIGN KEY (client_id) REFERENCES clients(id) -- Contrainte d'intégrité référentielle
);

Étape 2 — Insérer des données de test

  📋 Copier le code

-- Insertion de 3 clients dans la table clients
INSERT INTO clients (nom, prenom) VALUES
  ('Dupont', 'Jean'),
  ('Martin', 'Marie'),
  ('Durand', 'Pierre');
-- Insertion de commandes associées aux clients (client_id = id dans clients)
INSERT INTO commandes (client_id, montant) VALUES
  (1, 100),  -- Commande de Jean Dupont : 100€
  (2, 200),  -- Commande de Marie Martin : 200€
  (3, 300);  -- Commande de Pierre Durand : 300€

Étape 3 — Exécuter la requête de jointure SQL

  📋 Copier le code

-- INNER JOIN pour associer chaque client à ses commandes
SELECT
  cl.nom,              -- Nom du client depuis la table clients
  cl.prenom,           -- Prénom du client
  co.montant           -- Montant de la commande depuis la table commandes
FROM
  clients AS cl        -- Alias cl pour la table clients
INNER JOIN
  commandes AS co      -- Alias co pour la table commandes
ON
  cl.id = co.client_id; -- Condition : la clé primaire = la clé étrangère

Résultat de la requête

nom     | prenom | montant
--------|--------|--------
Dupont  | Jean   | 100
Martin  | Marie  | 200
Durand  | Pierre | 300

Bonnes pratiques et conseils pour optimiser vos jointures SQL

  • Utilisez toujours des alias de table (AS c, AS o) pour rendre vos requêtes lisibles, surtout avec trois tables ou plus.
  • Indexez les colonnes de jointure : une colonne utilisée dans une clause ON doit avoir un index pour éviter les scans complets de table (full table scan) qui pénalisent les performances.
  • Choisissez le bon type de jointure : INNER JOIN pour des données cohérentes, LEFT JOIN pour inclure les données sans correspondance, FULL JOIN pour une vue exhaustive.
  • Préfixez toujours les colonnes ambiguës avec le nom ou l'alias de la table (c.customer_id au lieu de customer_id) pour éviter les erreurs d'ambiguïté.
  • Testez avec EXPLAIN : utilisez EXPLAIN SELECT ... pour analyser le plan d'exécution de vos jointures et détecter les goulots d'étranglement.

Conclusion : les jointures SQL, compétence clé en 2026

Les jointures SQL restent en 2026 l'une des compétences fondamentales de tout développeur ou analyste de données. Maîtriser les subtilités entre INNER JOIN, LEFT JOIN, RIGHT JOIN et FULL OUTER JOIN vous permet d'extraire des insights précis de bases de données relationnelles complexes, d'optimiser les performances de vos requêtes et de produire des rapports fiables. Pratiquez régulièrement avec des jeux de données réels pour consolider votre compréhension.

Par carabde | Mis à jour le 23 février 2026