CodeGym /Cours /SQL SELF /Auto-jointure des données avec SELF JOIN

Auto-jointure des données avec SELF JOIN

SQL SELF
Niveau 12 , Leçon 3
Disponible

SELF JOIN — c'est une façon de joindre une table avec elle-même. Ça peut paraître bizarre au début : pourquoi joindre une table avec elle-même ? Mais dans la vraie vie, ce genre de truc arrive assez souvent. Par exemple, imagine que t'as une table d'employés, et chaque employé a un manager. Le manager est aussi un employé, donc ses infos sont dans la même table. SELF JOIN va nous aider à relier les employés à leurs managers.

Si on parle formellement, SELF JOIN — c'est juste un JOIN classique, mais on utilise la même table deux fois, en lui donnant des alias différents pour distinguer ses "versions".

Tu peux utiliser SELF JOIN pour :

  • Les relations hiérarchiques : établir des liens "parent-enfant", genre employé et son manager.
  • L'analyse de données dans la même table : comparer des lignes, par exemple pour trouver des produits ou des événements similaires.
  • Des requêtes complexes sur des structures avec de la logique dupliquée.

Syntaxe de SELF JOIN

Pour que ce soit plus clair, regarde direct la syntaxe simplifiée de SELF JOIN :

SELECT
    A.column_name,
    B.column_name
FROM 
    table_name A
JOIN 
    table_name B
ON 
    A.common_column = B.common_column;

Ici :

  • table_name A et table_name B — c'est la même table, mais avec des alias différents.
  • A.common_column et B.common_column — les colonnes qu'on utilise pour joindre les lignes.

Les alias (A et B) servent à ce que le SGBD "comprenne" avec quelle "copie" de la table tu bosses.

Exemples d'utilisation de SELF JOIN

Exemple 1 : liste des employés et leurs managers

Alors, imaginons qu'on a une table employees qui ressemble à ça :

employee_id name manager_id
1 Alex Lin NULL
2 Maria Chi 1
3 Otto Song 1
4 Nina Zhao 2

Dans cette table :

  • employee_id — identifiant de l'employé.
  • name — nom de l'employé.
  • manager_id — identifiant du manager, qui est aussi le employee_id d'un autre employé.

Objectif : obtenir la liste des employés et de leurs managers.

Voilà comment on fait ça avec SELF JOIN :

SELECT
    e.name AS employee_name,
    m.name AS manager_name
FROM 
    employees e
LEFT JOIN 
    employees m
ON 
    e.manager_id = m.employee_id;

Résultat :

employee_name manager_name
Alex Lin NULL
Maria Chi Alex Lin
Otto Song Alex Lin
Nina Zhao Maria Chi

Ici :

  • La table e — c'est les "employés".
  • La table m — c'est aussi les "employés", mais dans le rôle de "managers".

Alex Lin n'a pas de manager (manager_id = NULL), donc dans le résultat le champ manager_name est vide.

Exemple 2 : Trouver des produits similaires

Imaginons qu'on a une table products :

product_id product_name category
1 Réfrigérateur Technika
2 Machine à laver Technika
3 Smartphone Gadzhety
4 Tablette Gadzhety

Objectif : trouver les paires de produits qui sont dans la même catégorie.

Solution avec SELF JOIN :

SELECT
    p1.product_name AS product_1,
    p2.product_name AS product_2
FROM 
    products p1
JOIN 
    products p2
ON 
    p1.category = p2.category
AND 
    p1.product_id < p2.product_id;

Résultat :

product_1 product_2
Réfrigérateur Machine à laver
Smartphone Tablette

Fais gaffe à la condition p1.product_id < p2.product_id. Ça évite de dupliquer les paires, genre pour pas avoir à la fois Réfrigérateur — Machine à laver et Machine à laver — Réfrigérateur dans les résultats.

Exemple 3 : Analyse des hiérarchies (parents et enfants)

Encore un exemple. Imaginons qu'on a une table categories :

category_id category_name parent_id
1 Technika NULL
2 Gadzhety 1
3 Kompyutery 1
4 Smartfony 2

Ici :

  • category_id — identifiant de la catégorie.
  • category_name — nom de la catégorie.
  • parent_id — identifiant de la catégorie parente.

Objectif : relier les catégories à leurs catégories parentes.

Requête :

SELECT
    c1.category_name AS child_category,
    c2.category_name AS parent_category
FROM 
    categories c1
LEFT JOIN 
    categories c2
ON 
    c1.parent_id = c2.category_id;

Résultat :

child_category parent_category
Technika NULL
Gadzhety Technika
Kompyutery Technika
Smartfony Gadzhety

Erreurs classiques avec SELF JOIN

Oubli des alias : si tu utilises pas d'alias, c'est impossible de distinguer une "copie" de la table de l'autre.

Références cycliques : si les données ont des références cycliques (genre un employé est son propre manager), ça peut donner des résultats chelous.

Duplication des résultats : pense à filtrer les résultats (par exemple avec p1.product_id < p2.product_id) pour éviter les doublons.

SELF JOIN — c'est un outil puissant pour bosser avec les données, et bien l'utiliser permet de gérer des trucs complexes avec des hiérarchies, des liens dans les tables et de l'analyse de données. J'espère que maintenant tu vois à quel point ce "selfie" est utile dans l'univers SQL !

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION