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
);
Комментарий:
Часто лучше оптимизируется планировщиком.
Явно отражает бизнес-смысл: «нет сотрудников».