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