Выберите сотрудников с salary < 30000 и ненулевым manager_id, для которого нет строки руководителя. Условие manager_id IS NOT NULL исключит сотрудников без назначенного начальника.
Сотрудники с отсутствующим в базе менеджером
Выберите сотрудников с salary < 30000 и ненулевым manager_id, для которого нет строки руководителя. Условие manager_id IS NOT NULL исключит сотрудников без назначенного начальника.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Сформулируйте SQL‑запрос, который вернёт идентификаторы работников, получающих зарплату менее 30 000 единиц, а их непосредственный руководитель уже не работает в компании. При уходе сотрудника его запись удаляется из таблицы Employees, однако у подчинённых остаётся прежний manager_id.
В таблице employee_id выступает в роли первичного ключа. Таблица хранит сведения о работниках, их заработной плате и идентификаторе руководителя. Для некоторых записей значение manager_id равно NULL, что указывает на отсутствие руководителя.
Необходимо вывести результат в виде столбцов (employee_id, salary), отсортированных по employee_id.
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| employee_id | int |
| name | varchar |
| manager_id | int |
| salary | int |
+-------------+---------+
Ответ
Выберите сотрудников с salary < 30000 и ненулевым manager_id, для которого нет строки руководителя. Условие manager_id IS NOT NULL исключит сотрудников без назначенного начальника.
SELECT e.employee_id, e.salary
FROM Employees e
WHERE e.salary < 30000
AND e.manager_id IS NOT NULL
AND NOT EXISTS (
SELECT 1
FROM Employees manager
WHERE manager.employee_id = e.manager_id
)
ORDER BY e.employee_id;
NOT EXISTS проверяет отсутствие конкретного руководителя и не страдает от ловушки NULL, характерной для NOT IN. Первичный ключ employee_id поддерживает поиск руководителя. Зарплата ровно 30000 не проходит фильтр; NULL в salary также не проходит сравнение.