Подзапросы
1410 мин
Подзапрос (subquery) — запрос, записанный в скобках внутри другого запроса. Он выполняется первым и отдаёт результат внешнему запросу.
Подзапрос, возвращающий одно значение
«Преподаватели с зарплатой выше средней» — среднюю мы заранее не знаем, но база может её посчитать:
Подзапрос возвращает одно число, внешний запрос сравнивает с ним.
Подзапрос, возвращающий список: IN
«Студенты, получившие хотя бы одну оценку 95+»:
Если подзапрос возвращает несколько строк, используйте
IN, а не=. С=база выдаст ошибку «subquery returns more than one row».
EXISTS — «есть ли?»
EXISTS истинно, если подзапрос вернул хотя бы одну строку. Обычно он ссылается на внешнюю строку:
Товары, которые ни разу не продавались. SELECT 1 — неважно, что вернётся, важно лишь, есть ли строки.
Коррелированный подзапрос
Подзапрос использует значение внешней строки и выполняется заново для каждой строки. «Товары дороже средней цены в своей категории»:
Подзапрос во FROM
Результат можно использовать как временную таблицу. Ей обязательно даётся псевдоним:
Выведите name и credits предметов, у которых кредитов больше среднего.
Сколько пассажиров совершили хотя бы одну поездку? Используйте IN или EXISTS.
Запомните
- Одно значение — сравнение через
=,>; список — черезIN. EXISTS/NOT EXISTSпроверяют наличие строк.- Подзапросу во
FROMобязательно нужен псевдоним.