Выведите пользователей, у которых нет заказов.

Поиск пользователей без заказов через NOT EXISTS или LEFT JOIN. Пример использует явно заданную учебную схему и учитывает возможные проблемы NULL в альтернативных запросах.

Короткий ответ

Что ответить на собеседовании

При условных таблицах users(id, name) и orders(id, user_id) можно выбрать строки users, для которых NOT EXISTS соответствующий заказ. Альтернатива — LEFT JOIN с проверкой o.id IS NULL, если orders.id является первичным ключом. Схема в источнике отсутствует; ее и смысл выражения «нет заказов» нужно уточнить.

Подробный разбор

Ответ с пояснениями

Схема базы в вопросе отсутствует. Предположим для примера, что есть users(id, name) и orders(id, user_id), идентификаторы id являются первичными ключами, а orders.user_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
);

Для каждого пользователя проверяется отсутствие подходящей строки заказа. Значение 1 внутри подзапроса не является счетчиком: EXISTS интересуется самим наличием строки. Количество заказов у других пользователей на результат не влияет.

Альтернатива — левое соединение:

SELECT u.id, u.name
FROM users AS u
LEFT JOIN orders AS o ON o.user_id = u.id
WHERE o.id IS NULL;

Здесь LEFT JOIN сохраняет пользователя даже без совпадения, заполняя поля правой стороны значениями NULL. Проверять удобно именно первичный ключ заказа: в настоящей строке он не может быть NULL.

Следует осторожно использовать NOT IN: если подзапрос возвращает NULL, результат может оказаться неожиданным из-за трехзначной логики SQL. Также уточните формулировку задачи. «Нет заказов вообще» отличается от «нет оплаченных заказов» или «нет заказов за месяц». Для последних вариантов соответствующие ограничения добавляют внутрь подзапроса NOT EXISTS. При использовании LEFT JOIN условия на учитываемые заказы размещают в ON, чтобы сохранить пользователей без совпадений.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку