Sobes.tech
Junior — Middle

Kako se razlikuju rekurzivne i nerrekurzivne izraze u zajedničkim tabelarnim izrazima (CTE) u SQL?

sobes.tech АИ

Одговор од АИ

Izraz zajedničke tabele (CTE) u SQL-u je privremeni rezultat koji se može koristiti u glavnom upitu. Postoje dve vrste CTE: rekurzivne i nerekurzivne.

  • Nerekurzivni CTE: jednostavno je imenovani privremeni skup podataka definisan jednim upitom. Može se koristiti za pojednostavljenje složenih upita ili za ponovnu upotrebu podupita.

  • Rekurzivni CTE: je CTE koji se odnosi na sebe, omogućavajući izvođenje rekurzivnih operacija, kao što su prolazak kroz hijerarhije ili grafove.

Primer nerekurzivnog CTE:

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

Primer rekurzivnog CTE (pretraživanje svih podređenih zaposlenih):

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

Na ovaj način, rekurzivni CTE omogućavaju građenje lanaca i hijerarhija, dok nerekurzivni samo pojednostavljuju strukturu upita.