Общие табличные выражения
Использовать подзапросы — хорошее решение, но зачастую у них очень громоздкий вид. Что будет, если в одном запросе указать несколько подзапросов: пять, шесть и более? Легко запутаться — нужно искать выход.
Решить проблему могут общие табличные выражения, или CTE (от англ. common table expressions). Они помогают структурировать подзапросы и выносить их за пределы основного кода.
Подзапросы указывают после ключевого слова
WITH. Порядок здесь другой, нежели в обычном запросе: сначала псевдоним, затем ключевое слово AS, а потом подзапрос в скобках.Подзапросов после
WITH может быть несколько: их перечисляют через запятую. После последнего подзапроса запятую не ставят — это означает начало основного запроса.SQL
В основном запросе можно обращаться к общему табличному выражению по псевдониму. Но есть одно ограничение.
❗ К общим табличным выражениям нельзя обращаться после оператора
WHERE.Теперь можно переписать запрос, который мы уже писали, но с применением подзапросов и присоединений. Напомним: нужно было получить таблицу с пятью странами, лидирующими по количеству заказов. Для каждой страны нужно было указать число зарегистрированных пользователей.
SQL
Результат не изменился, зато код стал понятным и структурированным.
Без выражений с оператором
WITH можно обойтись, но это удобный инструмент для реализации декомпозиции: одно общее табличное выражение — одна подзадача.В следующем уроке вы потренируетесь использовать общие табличные выражения самостоятельно.