Skip to content

SELF JOIN – Auto-jointure

Bonne lecture et bon apprentissage !
Junior TSAFACK – 08/08/2026
⏱️ Temps de lecture estimé : 5 minutes


En SQL, un SELF JOIN correspond à une jointure d’une table avec elle-même. Ce type de requête n’est pas si commun mais très pratique dans le cas où une table contient des informations qui font référence à d’autres enregistrements de la même table.

Bon à savoir : Un SELF JOIN n’est pas un mot-clé spécifique en SQL. C’est une technique qui consiste à utiliser n’importe quel type de jointure (INNER JOIN, LEFT JOIN, etc.) en faisant référence à la même table deux fois, avec des alias différents.


Pour effectuer un SELF JOIN, la syntaxe de la requête SQL est la suivante :

SELECT t1.colonne1, t1.colonne2, t2.colonne1, t2.colonne2
FROM table AS t1
LEFT JOIN table AS t2 ON t2.fk_id = t1.id;

Ici, la jointure est effectuée avec un LEFT JOIN, mais il est aussi possible de l’effectuer avec d’autres types de jointures (INNER JOIN, RIGHT JOIN, etc.) selon le besoin.

Remarque : L’utilisation d’alias (AS t1, AS t2) est obligatoire dans un SELF JOIN pour distinguer les deux instances de la même table.


Exemple concret : Hiérarchie des employés

Section titled “Exemple concret : Hiérarchie des employés”

Un exemple potentiel pourrait être une application d’intranet d’entreprise qui possède une table des employés avec la hiérarchie entre eux. Les employés peuvent être dirigés par un supérieur direct qui se trouve lui-même dans la table.

Table « utilisateur » :

id prenom nom email manager_id
1 Sebastian Martin [email protected] NULL
2 Gustave Dubois [email protected] NULL
3 Georgette Leroy [email protected] 1
4 Gregory Roux [email protected] 2

Dans cette table :

  • Les employés 1 et 2 n’ont pas de supérieur (ils sont managers).
  • L’employé 3 (Georgette) a pour manager l’employé 1 (Sebastian).
  • L’employé 4 (Gregory) a pour manager l’employé 2 (Gustave).

Il est possible de lister sur une même ligne les employés avec leurs supérieurs directs, grâce à un SELF JOIN :

SELECT u1.id AS employe_id,
u1.prenom AS employe_prenom,
u1.nom AS employe_nom,
u2.id AS manager_id,
u2.prenom AS manager_prenom,
u2.nom AS manager_nom
FROM utilisateur u1
LEFT JOIN utilisateur u2 ON u1.manager_id = u2.id;

Résultat :

employe_id employe_prenom employe_nom manager_id manager_prenom manager_nom
1 Sebastian Martin NULL NULL NULL
2 Gustave Dubois NULL NULL NULL
3 Georgette Leroy 1 Sebastian Martin
4 Gregory Roux 2 Gustave Dubois

Observations :

  • Les managers (Sebastian et Gustave) apparaissent avec NULL dans les colonnes de manager, car ils n’ont pas de supérieur.
  • Les employés (Georgette et Gregory) sont correctement associés à leur manager respectif.

1. Relations de parenté (catégories, arborescences)

Section titled “1. Relations de parenté (catégories, arborescences)”

Pour des tables avec des relations parent-enfant (ex: catégories de produits, commentaires imbriqués) :

Table « categorie » :

id nom parent_id
1 Informatique NULL
2 Matériel 1
3 Logiciel 1
4 Souris 2
5 Clavier 2

Requête pour lister les sous-catégories avec leur parent :

SELECT c1.nom AS sous_categorie, c2.nom AS categorie_parent
FROM categorie c1
LEFT JOIN categorie c2 ON c1.parent_id = c2.id;

Pour comparer des lignes de la même table (ex: produits avec des prix similaires) :

SELECT p1.nom AS produit1, p2.nom AS produit2, p1.prix
FROM produit p1
INNER JOIN produit p2 ON p1.prix = p2.prix AND p1.id < p2.id;

Remarque : p1.id < p2.id permet d’éviter les doublons et les autojointures (un produit avec lui-même).

Pour trouver les enregistrements en double sur une colonne :

SELECT DISTINCT u1.email
FROM utilisateur u1
INNER JOIN utilisateur u2 ON u1.email = u2.email AND u1.id <> u2.id;

4. Chaînes de relations (recommandation, arbre généalogique)

Section titled “4. Chaînes de relations (recommandation, arbre généalogique)”

Pour remonter une hiérarchie sur plusieurs niveaux, on peut enchaîner plusieurs SELF JOIN (ou utiliser des requêtes récursives avec CTE, mais c’est plus avancé).


Différence entre SELF JOIN et les autres jointures

Section titled “Différence entre SELF JOIN et les autres jointures”
Type de jointure Description
INNER JOIN classique Jointure entre deux tables différentes
SELF JOIN Jointure d’une table avec elle-même, en utilisant des alias
LEFT JOIN sur soi-même Permet de conserver les lignes sans correspondance (ex: managers sans supérieur)

  1. Utilisez toujours des alias explicites pour distinguer les deux instances de la table (t1, t2 ou employe, manager).

  2. Choisissez des alias parlants : dans l’exemple hiérarchique, employe et manager sont plus lisibles que a et b.

  3. Faites attention aux conditions de jointure : pour éviter les auto-jointures (un enregistrement avec lui-même), utilisez AND u1.id <> u2.id si nécessaire.

  4. Pour les hiérarchies profondes, privilégiez les requêtes récursives (CTE avec WITH RECURSIVE) si votre SGBD le supporte.

  5. Testez avec des données représentatives : les SELF JOIN peuvent rapidement devenir complexes.


  • Pour les hiérarchies imbriquées (plus de 2 niveaux), un SELF JOIN multiple peut devenir lourd. Utilisez des CTE récursives (PostgreSQL, SQL Server, Oracle, MySQL 8.0+, SQLite 3.8.3+) pour explorer des arborescences complètes.

  • Si votre SGBD ne supporte pas les CTE récursives, vous pouvez utiliser des boucles en code applicatif ou des requêtes successives.


Vous savez désormais comment joindre une table avec elle-même grâce au SELF JOIN. Mais que faire si vous souhaitez effectuer une jointure automatique basée sur les noms de colonnes identiques ?

👉 Chapitre 38 : NATURAL JOIN – Jointure naturelle


Bonne continuation !
Junior TSAFACK – 08/08/2026