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.
Оба запроса возвращают пользователей без заказов.