Sobes.tech
Junior — Middle

Ինչպես են տարբերվում ռեկուրսիվ և ռեկուրսիվ չհամապատասխանող արտահայտությունները SQL-ում ընդհանուր աղյուսակային արտահայտությունների (CTE) մեջ։

sobes.tech AI

Պատասխան AI-ից

SQL-ում ընդհանուր սեղանի արտահայտությունը (CTE) ժամանակավոր արդյունք է, որը կարելի է օգտագործել հիմնական հարցում: Կան երկու տեսակի CTE՝ ռեկուրսիվ և ոչ ռեկուրսիվ:

  • Ոչ ռեկուրսիվ CTE՝ պարզապես անվանված ժամանակավոր տվյալների հավաքածու է, որը սահմանվում է մեկ հարցումով: Այն կարող է օգտագործվել բարդ հարցումները պարզեցնելու կամ ենթահարցեր կրկնակի օգտագործման համար:

  • Ռեկուրսիվ CTE՝ դա այն CTE-ն է, որը հղում է իր վրա, թույլ տալով կատարել ռեկուրսիվ գործողություններ, օրինակ՝ հիերարխիաների կամ գրաֆների անցում:

Ոչ ռեկուրսիվ CTE-ի օրինակ՝

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

Ռեկուրսիվ CTE-ի օրինակ՝ (բոլոր ենթական աշխատակիցների որոնում)

WITH RECURSIVE Subordinates AS (
    SELECT EmployeeID, ManagerID, Name FROM Employees WHERE EmployeeID = 1 -- ղեկավար
    UNION ALL
    SELECT e.EmployeeID, e.ManagerID, e.Name
    FROM Employees e
    INNER JOIN Subordinates s ON e.ManagerID = s.EmployeeID
)
SELECT * FROM Subordinates;

Այսպիսով, ռեկուրսիվ CTE-ները թույլ են տալիս կառուցել շղթաներ և հիերարխիաներ, մինչդեռ ոչ ռեկուրսիվները պարզապես պարզեցնում են հարցման կառուցվածքը։