0Pricing
SQL Academy · Leçon

CTE récursives pour les hiérarchies

Parcourez des données hiérarchiques (organigrammes, commentaires en fil, parcours de graphes) avec WITH RECURSIVE et des conditions d’arrêt.

CTE récursives pour les hiérarchies est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 4 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.

Pourquoi la récursivité ?

Le SQL classique ne peut pas parcourir un arbre de profondeur inconnue : les parents des parents, les enfants des enfants. Les CTE récursives sont la solution du SQL standard.

Structure

Une CTE récursive comporte deux parties reliées par UNION ALL :

WITH RECURSIVE name AS (
  -- 1. Anchor query: seed rows
  SELECT ...
  UNION ALL
  -- 2. Recursive step: references the CTE itself
  SELECT ...
  FROM name JOIN ...
)
SELECT * FROM name;

Parcourir un organigramme

Trouvez tous les employés qui dépendent (directement ou indirectement) d'un responsable donné :

WITH RECURSIVE reports AS (
  -- anchor: the manager themself
  SELECT id, full_name, manager_id, 0 AS depth
  FROM employees WHERE id = 42

  UNION ALL

  -- recurse: people whose manager is in reports
  SELECT e.id, e.full_name, e.manager_id, r.depth + 1
  FROM employees e
  JOIN reports r ON r.id = e.manager_id
)
SELECT * FROM reports ORDER BY depth, full_name;

Commentaires imbriqués

Parcourez l'arbre d'une discussion à partir d'une racine :

WITH RECURSIVE thread AS (
  SELECT id, parent_id, body, 0 AS depth, ARRAY[id] AS path
  FROM comments WHERE id = $1
  UNION ALL
  SELECT c.id, c.parent_id, c.body, t.depth + 1, t.path || c.id
  FROM comments c
  JOIN thread t ON c.parent_id = t.id
)
SELECT * FROM thread ORDER BY path;

Terminaison

La récursion s'arrête lorsque l'étape récursive ne renvoie plus de nouvelles lignes.

Éviter les boucles infinies

Si votre graphe comporte des cycles, suivez les nœuds déjà visités :

WITH RECURSIVE walk AS (
  SELECT id, ARRAY[id] AS path FROM nodes WHERE id = $1
  UNION ALL
  SELECT e.target_id, w.path || e.target_id
  FROM edges e
  JOIN walk w ON e.source_id = w.id
  WHERE e.target_id <> ALL(w.path)
)
SELECT * FROM walk;

Série numérique

Les CTE récursives peuvent également générer des suites :

WITH RECURSIVE n(i) AS (
  VALUES (1)
  UNION ALL
  SELECT i + 1 FROM n WHERE i < 100
)
SELECT i, i*i AS square FROM n;

Nomenclature

Décomposez un produit en tous ses composants, y compris les sous-ensembles :

WITH RECURSIVE bom AS (
  SELECT part_id, sub_part_id, qty FROM parts WHERE part_id = $1
  UNION ALL
  SELECT p.part_id, p.sub_part_id, p.qty * bom.qty
  FROM parts p
  JOIN bom ON bom.sub_part_id = p.part_id
)
SELECT sub_part_id, SUM(qty) AS total_qty FROM bom GROUP BY sub_part_id;

Limites de profondeur

Pour plus de sécurité, limitez la profondeur de la récursion :

WITH RECURSIVE tree AS (
  SELECT id, parent_id, 0 AS depth FROM nodes WHERE id = $1
  UNION ALL
  SELECT n.id, n.parent_id, t.depth + 1
  FROM nodes n JOIN tree t ON n.parent_id = t.id
  WHERE t.depth < 10
)
SELECT * FROM tree;

UNION contre UNION ALL

UNION ALL est le choix habituel. UNION élimine les doublons — utile lorsqu'un nœud peut être atteint par plusieurs chemins.

Performances

Les CTE récursives sont évaluées de manière itérative. À chaque étape, la « table de travail » contient les lignes produites par l'étape précédente. Indexez les colonnes utilisées pour la jointure.

Récapitulatif

Les CTE récursives parcourent les hiérarchies et les graphes.

  • Point d'ancrage + UNION ALL + étape récursive
  • S'arrête lorsque l'étape récursive ne renvoie aucune ligne
  • Utilisez un tableau de chemins pour interrompre les cycles

Vérification rapide

Quel mot-clé transforme une CTE en CTE récursive ?

Questions Fréquemment Posées

La leçon « CTE récursives pour les hiérarchies » est-elle gratuite ?

Oui — le texte complet de « CTE récursives pour les hiérarchies » 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 « CTE récursives pour les hiérarchies » ?

Parcourez des données hiérarchiques (organigrammes, commentaires en fil, parcours de graphes) avec WITH RECURSIVE et des conditions d’arrêt. 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 4 sur 4.

Combien de temps prend la leçon « CTE récursives pour les hiérarchies » ?

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. Sous-requêtes scalaires, de lignes et de tables
  2. Sous-requêtes corrélées et non corrélées
  3. Expressions de table communes (WITH)
  4. CTE récursives pour les hiérarchies
← Retour à SQL Academy