Sobes.tech
Junior — Middle

Jak se liší rekurzivní a nerrekurzivní výrazy v běžných tabulkových výrazech (CTE) v SQL?

sobes.tech AI

Odpověď od AI

Výraz společné tabulky (CTE) v SQL je dočasný výsledek, který lze použít v hlavním dotazu. Existují dva typy CTE: rekurzivní a nerrekurzivní.

  • Nerrekurzivní CTE: je jednoduše pojmenovaná dočasná sada dat definovaná jedním dotazem. Může být použita ke zjednodušení složitých dotazů nebo k opětovnému použití poddotazů.

  • Rekurzivní CTE: je CTE, který odkazuje sám na sebe, což umožňuje provádět rekurzivní operace, například procházení hierarchií nebo grafů.

Příklad nerrekurzivního CTE:

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

Příklad rekurzivního CTE (hledání všech podřízených zaměstnanců):

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

Tímto způsobem rekurzivní CTE umožňují vytváření řetězců a hierarchií, zatímco nerrekurzivní pouze zjednodušují strukturu dotazu.