Task Livecoding SQL Users Without Orders

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.

🔥 Теперь можно эффективно находить всех пользователей без заказов!