Junior — Middle
Как се различават рекурсивните и нерекурсивните изрази в общите таблицени изрази (CTE) в SQL?
sobes.tech AI
Отговор от AI
Общото таблично изразяване (CTE) в SQL е временен резултат, който може да се използва в основната заявка. Има два типа 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 позволяват изграждането на вериги и йерархии, докато нерекурсивните просто опростяват структурата на заявката.