Ответ
Общие табличные выражения (CTE, Common Table Expressions) — это именованные временные результирующие наборы, которые определяются в рамках выполнения одного SQL-запроса (инструкции SELECT, INSERT, UPDATE, DELETE или MERGE). CTE существуют только на время выполнения этого запроса.
Ключевые особенности и синтаксис:
- Определяются с помощью ключевого слова
WITH. - Улучшают читаемость и поддерживаемость, позволяя разбивать сложные запросы на логические блоки.
- Могут ссылаться на себя, что позволяет создавать рекурсивные запросы (например, для обхода иерархий).
Базовый пример (нерекурсивный CTE):
WITH HighValueOrders AS (
-- Определение CTE
SELECT OrderID, CustomerID, TotalAmount
FROM Orders
WHERE TotalAmount > 10000
)
-- Основной запрос, использующий CTE как обычную таблицу
SELECT
c.CustomerName,
hvo.TotalAmount
FROM HighValueOrders hvo
JOIN Customers c ON hvo.CustomerID = c.CustomerID
ORDER BY hvo.TotalAmount DESC;
Преимущества использования CTE:
- Улучшенная читаемость: Заменяет вложенные подзапросы, делая логику запроса более линейной и понятной.
- Избегание дублирования: Если один и тот же подзапрос используется в запросе несколько раз, его можно вынести в CTE и ссылаться на него по имени.
- Рекурсивные запросы: Единственный стандартный SQL-способ для рекурсивной обработки данных (например, построение дерева подчинённых из таблицы сотрудников).
CTE — это мощный инструмент для структурирования запросов, особенно когда логика становится сложной.