Sobes.tech
Junior — Middle

Ako sa líšia rekurzívne a nerrekurzívne výrazy v bežných tabulkových výrazoch (CTE) v SQL?

sobes.tech AI

Odpoveď od AI

Výraz spoločnej tabuľky (CTE) v SQL je dočasný výsledok, ktorý možno použiť v hlavnom dopyte. Existujú dva typy CTE: rekurzívne a nerrekurzívne.

  • Nerrekurzívne CTE: je jednoducho pomenovaný dočasný súbor údajov definovaný jedným dopytom. Môže sa použiť na zjednodušenie zložitých dopytov alebo na opätovné použitie poddopytov.

  • Rekurzívne CTE: je CTE, ktorý sa odvoláva na seba samého, čo umožňuje vykonávať rekurzívne operácie, ako je prechádzanie hierarchiami alebo grafmi.

Príklad nerrekurzívneho CTE:

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

Príklad rekurzívneho CTE (hľadanie všetkých podriadených zamestnancov):

WITH RECURSIVE Subordinates AS (
    SELECT EmployeeID, ManagerID, Name FROM Employees WHERE EmployeeID = 1 -- šéf
    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 spôsobom rekurzívne CTE umožňujú budovanie reťazcov a hierarchií, zatiaľ čo nerrekurzívne iba zjednodušujú štruktúru dopytu.