Junior — Middle
Kuo skiriasi rekursyvios ir nerrekursvios išraiškos bendrose lentelių išraiškose (CTE) SQL?
sobes.tech AI
Atsakymas iš AI
Bendrojo lentelės išraiška (CTE) SQL yra laikinas rezultatas, kurį galima naudoti pagrindiniame užklausoje. Yra dviejų tipų CTE: rekursiniai ir nerekursiniai.
-
Nerekursinis CTE: tai paprastai pavadinta laikina duomenų rinkinys, apibrėžtas viena užklausa. Jis gali būti naudojamas sudėtingų užklausų supaprastinimui arba pakartotiniam subužklausų naudojimui.
-
Rekursinis CTE: tai CTE, kuris nurodo pats save, leidžiantį atlikti rekursines operacijas, pvz., eilių ar grafų perėjimą.
Nerekursinio CTE pavyzdys:
WITH RecentOrders AS (
SELECT * FROM Orders WHERE OrderDate > '2024-01-01'
)
SELECT * FROM RecentOrders WHERE CustomerID = 123;
Rekursinio CTE pavyzdys (visi pavaldiniai darbuotojai):
WITH RECURSIVE Subordinates AS (
SELECT EmployeeID, ManagerID, Name FROM Employees WHERE EmployeeID = 1 -- vadovas
UNION ALL
SELECT e.EmployeeID, e.ManagerID, e.Name
FROM Employees e
INNER JOIN Subordinates s ON e.ManagerID = s.EmployeeID
)
SELECT * FROM Subordinates;
Šiuo būdu, rekursiniai CTE leidžia kurti grandines ir hierarchijas, o nerekursiniai – tik supaprastina užklausos struktūrą.