Sobes.tech
Back to questions
Junior — Middle
84

Как отличаются рекурсивные и нерекурсивные выражения общего табличного выражения (CTE) в SQL?

Answer from AI

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 позволяют строить цепочки и иерархии, а нерекурсивные — просто упрощают структуру запроса.