EXISTS и NOT EXISTS
EXISTS проверяет сам факт наличия строки
EXISTS не интересуется конкретным значением из подзапроса. Его вопрос проще: вернул ли внутренний запрос хотя бы одну строку?
SELECT u.id, u.name
FROM users AS u
WHERE EXISTS (
SELECT 1
FROM orders AS o
WHERE o.user_id = u.id
);
Для каждого пользователя проверяется наличие хотя бы одного связанного заказа. Если такая строка существует, пользователь остаётся в результате.
NOT EXISTS проверяет отсутствие совпадения
SELECT u.id, u.name
FROM users AS u
WHERE NOT EXISTS (
SELECT 1
FROM orders AS o
WHERE o.user_id = u.id
);
Теперь остаются пользователи, для которых внутренний запрос не нашёл ни одного заказа.
В EXISTS важен факт строки, а не выражение после SELECT.
Поэтому часто пишут
SELECT 1: это подчёркивает, что значения выбранных столбцов сами по себе не используются.
Проверь себя
Разбор задания
Ментор знает решение и поможет тебе прийти к нему самостоятельно
Войди, чтобы использовать Ментора
Ментор учитывает текущую задачу и историю диалога.
Войти
Проверь важные нюансы и ответ после собственной попытки.
Войди, чтобы посмотреть решение
Решение и разбор доступны после авторизации.
Войти