20. Пользователи без заказов #
Условие задачи:
📌 Написать 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
.
🔥 Теперь можно эффективно находить всех пользователей без заказов!