ПОДЗАПРОСЫ В WHERE

ПОДЗАПРОСЫ В WHERE

Результаты подзапросов можно использовать в WHERE и в HAVING.

Работает это следующим образом:

select
    column1,
    column2
from
    table1
where column1 in (select column3 from table2)

Подзапросы нужны в WHERE, когда мы хотим создать динамическое условие, то есть, в подзапросе собирается результат, который может меняться, и мы фильтруемся по этому результату.

Важный момент, который мы должны учитывать, чтобы правильно использовать подзапросы в условии WHERE: в подзапросе SELECTмы выбираем тот объем информации, который подходит под операторов или условии. 

Допустим, мы хотим, чтобы column1 входила в результат подзапроса. Это значит, что результатом подзапроса может быть колонка (набор значений) или одно значение:

select
    column1,
    column2
from
    table1
where column1 in (select column3 from table2)

А если мы, например, хотим, чтобы column1 была больше, чем результат подзапроса, значит, результат подзапроса не должен превышать одно значение:

select
    column1,
    column2
from
    table1
where column1 > (select column3 from table2  limit  1)

Тут LIMIT предемонстрирован для подчеркивания, что в этом случае нам нужно одно значение, в реальности его не всегда есть смысл писать. На практике одно значение гарантированно можно получать через агрегацию (MAX, MIN, AVG и т.д.) или через уникальное условие WHERE.

Если резюмировать, подзапрос должен возвращать одно значение, если мы проводим сравнение, т множество, если мы фильтруем по вхождению.