ML Vault
All notes

Подзапросы

Подзапросы могут применяться в следующих частях основного запроса:

  • в операторе 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