Sobes.tech
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ą.