Подзапросы в WHERE

Базовый SQL
≈ 1 мин чтения

Результат подзапроса может стать частью условия

В WHERE подзапрос часто вычисляет значение или набор значений, с которыми затем сравниваются строки внешней выборки.

SELECT name
FROM products
WHERE price > (
    SELECT AVG(price)
    FROM products
);

Сначала вычисляется средняя цена, затем внешний запрос оставляет товары дороже этого значения.

Если значений несколько, нужен подходящий оператор

SELECT name
FROM users
WHERE id IN (
    SELECT user_id
    FROM orders
    WHERE status = 'PAID'
);

Внутренний запрос может вернуть много user_id. Оператор IN как раз проверяет, входит ли идентификатор пользователя в этот набор.

Сначала определяй форму результата подзапроса, потом выбирай оператор. Одно значение естественно сравнивается через =, > и похожие операторы; набор значений требует конструкции, которая умеет работать с набором.