theory_02__CTE.md

Занятие 28Markdown61 строк

← К репозиторию занятия · 07__SubQuery__CTE/theory_02__CTE.md

CTE (Common Table Expression)

CTE (Общее табличное выражение) — это именованный временный результат запроса, который можно использовать в основном SQL-запросе.

CTE создаётся с помощью ключевого слова WITH и часто используется для улучшения читаемости, для рекурсивных запросов и для повторного использования логики.

✅ Синтаксис

WITH имя_cte (опциональные_поля) AS (
    подзапрос
)
SELECT ...
FROM имя_cte;

Пример CTE

WITH recent_orders AS (
    SELECT *
    FROM orders
    WHERE order_date >= '2024-01-01'
)
SELECT customer_id, COUNT(*) AS order_count
FROM recent_orders
GROUP BY customer_id;

Здесь recent_orders — это временная "таблица", которая существует только во время выполнения запроса.

Преимущества и недостатки CTE

ПреимуществоОписание
Улучшает читаемостьОсобенно для вложенных и многоступенчатых запросов
Повторное использованиеОдин и тот же подзапрос можно использовать несколько раз
Позволяет рекурсиюПоддержка WITH RECURSIVE для иерархических данных
МодулярностьЛегко разбить сложную логику на части
НедостатокОписание
Может быть менее эффективнымИногда хуже оптимизируется, чем подзапросы или временные таблицы
Только во время выполненияCTE нельзя сохранить — она существует только во время запроса
Не всегда заменяет JOINДля некоторых задач JOIN даёт более эффективное решение

Важное дополнение❗

Имейте в виду, что конструкция WITH всегда возвращает таблицу, даже если в ней содержится только одно значение. Поэтому извлекать это единственное значение из таблицы придётся отдельным запросом:

WITH avg_price AS (
	SELECT AVG(unit_price) AS avg_p FROM order_details
)

SELECT
    unit_price
FROM
	order_details
WHERE unit_price > (SELECT avg_p FROM avg_price);