SQLLab
Подзапросы / CTEСредний

EXISTS

Проверяет, возвращает ли подзапрос хотя бы одну строку — не важно сколько, важен сам факт.

Синтаксис
SELECT ... WHERE EXISTS (SELECT 1 FROM ... WHERE ...);

Объяснение

EXISTS возвращает TRUE, если подзапрос нашёл хотя бы одну строку, и останавливается на первой найденной (short-circuit) — не читает весь результат, в отличие от IN. На больших подзапросах это заметно быстрее. Внутри EXISTS обычно пишут SELECT 1 — конкретная выбираемая колонка не имеет значения, важен только факт существования строки.

Пример

-- Пользователи, сделавшие хотя бы один заказ
SELECT * FROM users u
WHERE EXISTS (
  SELECT 1 FROM orders o WHERE o.user_id = u.id
);