0Pricing
SQL Academy · Aula

CTEs RECURSIVE para hierarquias

Percorra dados hierárquicos (organogramas, comentários encadeados e travessia de grafos) com WITH RECURSIVE e condições de parada.

CTEs RECURSIVE para hierarquias é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.

Por que usar recursão?

O SQL comum não consegue percorrer uma árvore de profundidade desconhecida: pais dos pais, filhos dos filhos. CTEs recursivas são a solução do SQL padrão.

Anatomia

Uma CTE recursiva tem duas partes unidas por 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;

Percorrendo um Organograma

Encontre todos os funcionários que respondem, direta ou indiretamente, a um determinado gerente:

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;

Comentários Encadeados

Percorra uma árvore de discussão a partir de uma raiz:

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;

Terminação

A recursão para quando a etapa recursiva não retorna novas linhas.

Evitando Loops Infinitos

Se o seu grafo tiver ciclos, acompanhe os nós visitados:

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érica

CTEs recursivas também podem gerar sequências:

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;

Lista de Materiais

Expanda um produto para obter todos os componentes, incluindo subconjuntos:

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 Profundidade

Por segurança, limite a profundidade da recursão:

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 vs UNION ALL

UNION ALL é a escolha habitual. UNION elimina duplicatas — útil quando um nó pode ser alcançado por vários caminhos.

Desempenho

CTEs recursivas são avaliadas iterativamente. A cada etapa, a "tabela de trabalho" é formada pelas linhas produzidas pela etapa anterior. Crie índices nas colunas usadas no JOIN.

Recapitulação

CTEs recursivas percorrem hierarquias e grafos.

  • Âncora + UNION ALL + etapa recursiva
  • Param quando a etapa recursiva não retorna linhas
  • Use um vetor de caminho para interromper ciclos

Verificação rápida

Qual palavra-chave transforma uma CTE em uma CTE recursiva?

Perguntas Frequentes

A aula “CTEs RECURSIVE para hierarquias” é grátis?

Sim — o texto completo de “CTEs RECURSIVE para hierarquias” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.

O que vou aprender em “CTEs RECURSIVE para hierarquias”?

Percorra dados hierárquicos (organogramas, comentários encadeados e travessia de grafos) com WITH RECURSIVE e condições de parada. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar SQL Academy?

Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “CTEs RECURSIVE para hierarquias”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de SQL Academy?

Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Subconsultas escalares, de linha e de tabela
  2. Subconsultas correlacionadas e não correlacionadas
  3. Expressões de tabela comuns (WITH)
  4. CTEs RECURSIVE para hierarquias
← Voltar para SQL Academy