Упрощение запросов, ключевое слово WITH
Часть раздела Основы путешествия по SQL на Coddy. Урок 49 из 72.
Запросы могут стать слишком запутанными из-за добавления множества внутренних запросов. Например, вот запрос, содержащий много подзапросов:
SELECT * FROM table1
WHERE col2 IN (
SELECT col1 FROM table2
WHERE col3 + col2 > 3 AND col5 LIKE '%test%' AND col6 IN (
SELECT col5 FROM table3
WHERE col1 AND col3 OR col2
)
)Чтобы упростить задачу, мы можем использовать ключевое слово WITH query_name AS (...). Оно позволяет сохранить запрос под именем и использовать его где угодно:
WITH query1 AS (
SELECT col5 FROM table3
WHERE col1 AND col3 OR col2
), query2 AS (
SELECT col1 FROM table2
WHERE col3 + col2 > 3 AND col5 LIKE '%test%' AND col6 IN query1
)
SELECT * FROM table1
WHERE col2 IN (SELECT col1 FROM query2) AND col4 IN (SELECT col5 FROM query1)Здесь мы повторно использовали query1 в query2 и в основном запросе.
Задание
ЛегкоДоступные таблицы и столбцы:
<strong>devices_specs</strong>:<strong>device_id</strong>,<strong>width</strong>,<strong>height</strong>,<strong>num_features</strong>,<strong>opinion</strong><strong>devices_score</strong>:<strong>device_id</strong>,<strong>score</strong>
Напишите запрос, который:
- Сначала определяет «большие устройства» (устройства с
widthбольше 200) - Затем рассчитывает средний балл для этих больших устройств. Назовите этот столбец
average_score
Используйте предложение WITH для решения этой задачи.
Попробуйте сами
-- Шаг 1: назовите временный набор результатов, который сохраняет только интересующие вас устройства
WITH large_devices AS (
SELECT ____
FROM devices_specs
WHERE ____
)
-- Шаг 2: повторно используйте этот временный набор результатов внутри основного запроса
SELECT ____ AS average_score
FROM devices_score
WHERE device_id IN (____);В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Больше ключевых слов
Ключевое слово INКлючевое слово BETWEENКлючевое слово LIKEКлючевое слово ASПовторение - Модели мобильных телефонов2Условия
Основы условийКлючевое слово ANDКлючевое слово ORКлючевое слово NOTКомбинирование нескольких условийСкобкиБулевы значения5Арифметические операции
Математические операторыМатематические столбцыОперация moduloФункция ROUND()3Специальный формат возврата
Значения NULLСортировка результатов, часть 1Сортировка результатов, часть 2Повторение - Фирма по кибербезопасностиОграничение количества записейПовторение - Автозавод6Вводные вызовы
Повторение - Парламентские выборыПовторение - Арест преступника полициейПовторение - Ёмкость для напитков в бареПовторение - Создание новых столбцов9Несколько таблиц
Базовый JOIN, Часть 1Базовый JOIN, Часть 2Повторение - JOINСамосоединениеПовторение - СамосоединениеОбъединениеУпрощение запросов, ключевое слово WITHПовторение - Запросы WITHПовторение - Подрядчик по недвижимостиПотренируйтесь самостоятельно: Песочница SQL