0Pricing
SQL Academy · Leçon

Qu’est-ce qu’une auto-jointure ?

Joignez une table à elle-même avec des alias.

Qu’est-ce qu’une auto-jointure ? est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.

Joindre une table à elle-même

Une auto-jointure consiste à joindre une table à elle-même. Cela peut sembler inhabituel au premier abord, mais il s'agit d'une technique puissante utilisée lorsque des lignes d'une même table sont liées à d'autres lignes de cette table.

L'exemple le plus courant est une table employees où chaque ligne d'employé contient également l'ID de son responsable — qui est lui aussi un employé de la même table.

La table des employés

Considérez une table employees dans laquelle chaque ligne possède un id, un name et un manager_id qui pointe vers une autre ligne de la même table.

Cette structure est appelée une relation autoréférentielle ou récursive. Exécutez la requête ci-dessous pour créer et remplir la table.

CREATE TABLE employees (
  id         INT PRIMARY KEY,
  name       VARCHAR(50),
  manager_id INT
);

INSERT INTO employees VALUES
  (1, 'Alice',   NULL),
  (2, 'Bob',     1),
  (3, 'Carol',   1),
  (4, 'Dave',    2),
  (5, 'Eve',     2),
  (6, 'Frank',   3);

Pourquoi les jointures classiques ne conviennent pas ici

Si vous souhaitez afficher chaque employé avec le nom de son responsable, les deux informations se trouvent dans la même table. Une jointure classique relie deux tables différentes (ou au moins deux sources différentes).

Pour lire deux fois la même table — une fois pour l'employé et une fois pour le responsable — vous devez utiliser une auto-jointure associée à des alias de table.

Présentation des alias

Pour effectuer une auto-jointure, vous écrivez deux fois le nom de la même table dans la clause FROM / JOIN et vous donnez un alias différent à chaque occurrence. Les alias permettent à SQL de les traiter comme deux tables logiques distinctes.

La convention consiste à utiliser des alias courts et descriptifs, comme e pour employé et m pour responsable.

-- Conceptual structure (not yet a full query)
-- FROM employees AS e
-- JOIN employees AS m ON e.manager_id = m.id

Votre première auto-jointure

Voici une auto-jointure complète qui répertorie chaque employé avec le nom de son responsable. La condition ON relie le manager_id de l'employé à l'id du responsable.

Alice n'a pas de responsable, elle est donc exclue par la INNER JOIN : aucune ligne correspondante n'existe du côté du responsable.

SELECT
  e.name   AS employee,
  m.name   AS manager
FROM employees AS e
INNER JOIN employees AS m
  ON e.manager_id = m.id;

Inclure les lignes sans responsable

Lorsque vous utilisez INNER JOIN, les lignes qui ne possèdent aucune correspondance sont supprimées. Alice possède manager_id = NULL, elle disparaît donc des résultats.

Utilisez une LEFT JOIN pour conserver tous les employés et afficher simplement NULL (ou un libellé) lorsqu'il n'y a pas de responsable.

SELECT
  e.name             AS employee,
  COALESCE(m.name, 'No Manager') AS manager
FROM employees AS e
LEFT JOIN employees AS m
  ON e.manager_id = m.id;

Filtrer les résultats de l'auto-jointure

Vous pouvez ajouter une clause WHERE à une auto-jointure, comme dans toute autre requête. L'exemple ci-dessous récupère uniquement les employés dont la responsable directe est Alice (id = 1).

SELECT
  e.name  AS employee,
  m.name  AS manager
FROM employees AS e
INNER JOIN employees AS m
  ON e.manager_id = m.id
WHERE m.name = 'Alice';

Compter les subordonnés directs

Les auto-jointures s'associent naturellement aux fonctions d'agrégation. La requête ci-dessous compte le nombre de subordonnés directs de chaque responsable en regroupant les résultats selon l'alias du responsable.

SELECT
  m.name           AS manager,
  COUNT(e.id)      AS direct_reports
FROM employees AS e
INNER JOIN employees AS m
  ON e.manager_id = m.id
GROUP BY m.name
ORDER BY direct_reports DESC;

Les auto-jointures sur des données non hiérarchiques

Les auto-jointures ne sont pas limitées aux hiérarchies. Dès que des lignes d'une table sont liées à d'autres lignes de cette même table, une auto-jointure peut être utile.

Par exemple, vous pouvez trouver toutes les paires d'employés qui ont le même responsable — en joignant la table à elle-même sur des valeurs manager_id correspondantes, tout en veillant à ne pas associer un employé à lui-même.

SELECT
  a.name AS employee_1,
  b.name AS employee_2,
  a.manager_id
FROM employees AS a
INNER JOIN employees AS b
  ON a.manager_id = b.manager_id
  AND a.id < b.id;

Le rôle de l'alias

Les alias sont obligatoires dans une auto-jointure : sans eux, la base de données ne peut pas déterminer à quelle copie de la table chaque référence de colonne correspond, et vous obtenez une erreur d'ambiguïté.

Vous pouvez utiliser les noms d'alias de votre choix. La règle essentielle est de préfixer chaque référence de colonne avec l'alias correct afin que SQL sache quelle instance de la table consulter.

-- This will fail: column 'name' is ambiguous
-- SELECT name FROM employees JOIN employees ON manager_id = id;

-- This works: aliases remove the ambiguity
SELECT e.name, m.name
FROM employees AS e
JOIN employees AS m ON e.manager_id = m.id;

Cas d'utilisation concrets

Les auto-jointures apparaissent fréquemment dans les bases de données réelles. Voici quelques cas d'utilisation courants :

  • Organigrammes — employés et responsables
  • Arbres de catégories — catégories parentes et enfants
  • Nomenclatures — composants constitués d'autres composants
  • Réseaux sociaux — trouver les amis d'amis dans une table unique de connexions

Repérer une clé étrangère autoréférentielle dans un schéma est le premier indice qu'une auto-jointure peut être nécessaire.

Vérification rapide

Vérifiez votre compréhension des auto-jointures avant de continuer.

Récapitulatif de la leçon

Dans cette leçon, vous avez appris ce qu'est une auto-jointure et quand l'utiliser :

  • Une auto-jointure relie une table à elle-même en la référençant deux fois avec des alias différents
  • Utilisez INNER JOIN pour exclure les lignes sans correspondance (par exemple, les responsables au sommet de la hiérarchie) ou LEFT JOIN pour les conserver
  • Ajoutez WHERE, GROUP BY et des fonctions d'agrégation exactement comme dans toute autre jointure
  • Utilisez a.id < b.id dans la clause ON pour éviter les paires en double lorsque vous comparez des lignes de la même table
  • Les auto-jointures sont l'outil privilégié pour les données hiérarchiques, les arbres de catégories et toute relation autoréférentielle

Ensuite : découvrez les hiérarchies à plusieurs niveaux avec les CTE récursives.

Questions Fréquemment Posées

La leçon « Qu’est-ce qu’une auto-jointure ? » est-elle gratuite ?

Oui — le texte complet de « Qu’est-ce qu’une auto-jointure ? » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Qu’est-ce qu’une auto-jointure ? » ?

Joignez une table à elle-même avec des alias. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer SQL Academy ?

Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Qu’est-ce qu’une auto-jointure ? » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?

Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Qu’est-ce qu’une auto-jointure ?
  2. Employés et responsables
  3. Comparer des lignes d’une même table
  4. Limites des auto-jointures
← Retour à SQL Academy