Sobes.tech
Junior — Middle

Como diferem as expressões recursivas e não recursivas em expressões de tabela comum (CTE) em SQL?

sobes.tech IA

Resposta da IA

A expressão de tabela comum (CTE) em SQL é um resultado temporário que pode ser usado na consulta principal. Existem dois tipos de CTE: recursivos e não recursivos.

  • CTE não recursivo: é simplesmente um conjunto de dados temporários com nome definido por uma única consulta. Pode ser usado para simplificar consultas complexas ou reutilizar subconsultas.

  • CTE recursivo: é um CTE que se refere a si mesmo, permitindo realizar operações recursivas, como percorrer hierarquias ou grafos.

Exemplo de CTE não recursivo:

WITH RecentOrders AS (
    SELECT * FROM Orders WHERE OrderDate > '2024-01-01'
)
SELECT * FROM RecentOrders WHERE CustomerID = 123;

Exemplo de CTE recursivo (busca de todos os subordinados de um funcionário):

WITH RECURSIVE Subordinates AS (
    SELECT EmployeeID, ManagerID, Name FROM Employees WHERE EmployeeID = 1 -- chefe
    UNION ALL
    SELECT e.EmployeeID, e.ManagerID, e.Name
    FROM Employees e
    INNER JOIN Subordinates s ON e.ManagerID = s.EmployeeID
)
SELECT * FROM Subordinates;

Assim, os CTE recursivos permitem construir cadeias e hierarquias, enquanto os não recursivos simplesmente simplificam a estrutura da consulta.