Пользователи без заказов

19. Найти пользователей без заказов

Условие задачи:
Даны две таблицы:

  • users — пользователи;

  • orders — заказы пользователей.

Необходимо вывести id всех пользователей, у которых нет ни одного заказа.

Код:

users

id
orders

userId
orderId

Спойлеры к решению

Подсказки
💡 Можно использовать LEFT JOIN, чтобы сохранить всех пользователей.
💡 Если заказов у пользователя нет, поля таблицы orders будут содержать NULL.
💡 Альтернативный вариант — проверить отсутствие связанных заказов через NOT EXISTS.

Решение

Вариант через LEFT JOIN:

SELECT u.id
FROM users u
LEFT JOIN orders o
    ON o.userId = u.id
WHERE o.orderId IS NULL;

LEFT JOIN сохраняет всех пользователей. Если у пользователя нет заказов, соответствующая запись из orders отсутствует и o.orderId будет равен NULL.

Альтернативный вариант через NOT EXISTS:

SELECT u.id
FROM users u
WHERE NOT EXISTS (
    SELECT 1
    FROM orders o
    WHERE o.userId = u.id
);

NOT EXISTS проверяет, что для пользователя не существует ни одной строки в таблице orders.

Оба запроса возвращают пользователей без заказов.