WITH в Oracle SQL. Введение
Оператор WITH, также известный как Common Table Expression (CTE), позволяет определить временное имя подзапроса, которое можно использовать в основном запросе. Это особенно удобно, когда:
Запрос слишком сложный и громоздкий
Один и тот же подзапрос используется несколько раз
Нужно сделать SQL более читаемым и модульным
🔤 Написание
🧮 Пример:
🔄 Где часто используется
В отчётах
В аналитических запросах
Для модульного подхода к сложным SQL
Для повторного использования результатов подзапроса
В рекурсивных запросах (рекурсивные CTE)
🧪 10 Примеров использования WITH с пояснениями
1️⃣ Базовый CTE
Определили фильтр, использовали его повторно.
2️⃣ Несколько подзапросов в одном WITH
Модульная структура запросов.
3️⃣ Использование WITH перед JOIN
Фильтруем год только один раз.
4️⃣ CTE с агрегацией
Упрощённая агрегация.
5️⃣ CTE + оконная функция
Находим топ-сотрудников в каждом отделе.
6️⃣ Вложенные CTE
Многоуровневая очистка данных.
7️⃣ Рекурсивный CTE (иерархия)
Вывод иерархии сотрудников.
8️⃣ Использование CTE с временными расчётами
Избегаем повторения WHERE.
9️⃣ CTE с DELETE (через MERGE)
Удаление с использованием фильтра через CTE.
🔟 Объединение нескольких уровней анализа
Чистая и понятная аналитика.
🧩 Заключение
Оператор WITH превращает сложные SQL-запросы в читабельные, модульные и масштабируемые конструкции. Это один из самых мощных инструментов в арсенале SQL-разработчика.
💡 Запомни:
WITHсоздаёт временное имя для подзапросаМожет содержать один или несколько CTE
Используется с
SELECT, а также совместно сDELETE,UPDATE,MERGEПоддерживает рекурсию
Повышает читаемость и производительность