Подзапросы
Подзапросы могут применяться в следующих частях основного запроса:
- в операторе
FROM; - в операторе
SELECT(если запрос возвращает один столбец с одним значением); - в операторах
WHEREиHAVING(если запрос возвращает один столбец с одним или несколькими значениями); - в операторе
CASEпри формировании продвинутых условных конструкций.
Примеры:
SELECT column_1
FROM (
SELECT column_1, column_2
FROM table
) AS subquery_1
в FROM для подзапроса обязательно нужно указывать алиас.
Внутри одного запроса может быть сразу несколько подзапросов. Более того, уровней вложенности может быть тоже несколько:
SELECT column_1
FROM (
SELECT column_1, column_2
FROM (
SELECT column_1, column_2, column_3
FROM table
) AS subquery_1
) AS subquery_2
Можно создать табличные выражения с помощью оператора WITH.
На практике подзапрос в SELECT может использоваться для того, чтобы сравнить значения в колонке с каким-нибудь одним расчётным значением (из той же или другой таблицы):
SELECT column_1, column_2, column_2 > (SELECT MAX(column_1) FROM table) AS column_3
FROM table