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