Task Livecoding SQL Departments Without Employees

63. Найти департаменты без сотрудников #

Условие задачи:
📌 Есть две таблицы:

  • Department(id, name)

  • Employee(id, salary, department_id)

Нужно написать SELECT, который выведет все департаменты, в которых нет ни одного сотрудника.


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

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

Решение

Вариант 1 — через LEFT JOIN (самый популярный) #

SELECT
    d.id,
    d.name
FROM Department d
LEFT JOIN Employee e
    ON e.department_id = d.id
WHERE e.id IS NULL;

Почему работает:

  • LEFT JOIN возвращает все департаменты.

  • Если сотрудников нет, поля Employee будут NULL.

  • WHERE e.id IS NULL оставляет только такие департаменты.


Вариант 2 — через NOT EXISTS #

SELECT
    d.id,
    d.name
FROM Department d
WHERE NOT EXISTS (
    SELECT 1
    FROM Employee e
    WHERE e.department_id = d.id
);

Комментарий:

  • Часто лучше оптимизируется планировщиком.

  • Явно отражает бизнес-смысл: «нет сотрудников».