В запросе SELECT u.name FROM users u WHERE EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id) — как работает EXISTS?

AПодзапрос в EXISTS должен вернуть ровно одну строку, иначе запрос вызовет ошибку выполнения
BПодзапрос в EXISTS проверяет наличие хотя бы одной строки: если есть — условие истинно
CПодзапрос в EXISTS возвращает список значений, которые используются как фильтр в основном запросе
DПодзапрос в EXISTS возвращает количество совпавших строк и сравнивает его с порогом
Правильный ответ. EXISTS возвращает TRUE, если подзапрос возвращает хотя бы одну строку, иначе — FALSE.

Разбор

EXISTS не анализирует конкретные значения из подзапроса — важен сам факт наличия строк. Для каждого пользователя из users подзапрос проверяет, есть ли хотя бы один заказ с его user_id. Если есть — строка попадает в результат. Именно поэтому в подзапросе часто пишут SELECT 1 — возвращаемое значение не имеет значения.

Проверь себя · 1/3разбор после ответа
В запросе используется выражение: SELECT user_id, CASE WHEN age < 18 THEN 'подросток' WHEN age < 30 THEN 'молодой' WHEN age < 50 THEN 'средний' ELSE 'старший' END AS segment FROM users. Пользователю 25 лет — какое значение он получит и почему?
Тренировать SQL в Telegram

Ещё вопросы по теме «Основы SQL-запросов»