19. Пользователи без заказов #
Условие задачи:
📌 Написать SQL-запрос для получения всех id пользователей из таблицы users, у которых отсутствуют заказы в таблице orders.
- Таблица
usersсодержит полеid. - Таблица
ordersсодержит поляuserIdиorderId. - Задача — найти всех пользователей, у которых нет связанных записей в
orders.
Спойлеры к решению
Подсказки
💡 Для решения задачи можно использовать конструкцию
💡 Альтернативное решение — применить условие
💡 Оба подхода позволяют корректно выбрать пользователей, у которых нет записей в таблице
LEFT JOIN и фильтровать по NULL.💡 Альтернативное решение — применить условие
NOT EXISTS для исключения пользователей с заказами.💡 Оба подхода позволяют корректно выбрать пользователей, у которых нет записей в таблице
orders.Решение
-- Решение 1: Использование LEFT JOIN
SELECT u.id
FROM users u
LEFT JOIN orders o ON u.id = o.userId
WHERE o.userId IS NULL;
-- Решение 2: Использование NOT EXISTS
SELECT u.id
FROM users u
WHERE NOT EXISTS (
SELECT 1
FROM orders o
WHERE o.userId = u.id
);
✅ Объяснение решения:
Решение 1:
Запрос выполняет LEFT JOIN таблицыusersс таблицейorders. Если для пользователя не найдено соответствующей записи, значениеo.userIdбудет NULL, что и используется в условии WHERE для выборки таких пользователей.Решение 2:
Используется подзапрос с конструкциейNOT EXISTS, который проверяет отсутствие записей в таблицеordersдля каждого пользователя из таблицыusers.
🔥 Теперь можно эффективно находить всех пользователей без заказов!