Отберите salary < 30000 и ненулевой manager_id, которому не соответствует существующий employee_id. Отсутствие начальника изначально не равно увольнению начальника.
SQL‑запрос для получения идентификаторов сотрудников с зарплатой ниже 30 000 и ушедшим менеджером
Отберите salary < 30000 и ненулевой manager_id, которому не соответствует существующий employee_id. Отсутствие начальника изначально не равно увольнению начальника.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Требуется составить запрос SQL, который вернёт идентификаторы сотрудников, чья зарплата строго меньше 30000, а их непосредственный руководитель больше не работает в компании. При увольнении сотрудника его запись удаляется из таблицы Employees, однако у подчинённых сохраняется значение manager_id.
Таблица: Employees
+--------------+--------+
| Column Name | Type |
+--------------+--------+
| employee_id | int |
| name | varchar|
| manager_id | int |
| salary | int |
+--------------+--------+
Поле employee_id является первичным ключом. У некоторых записей manager_id имеет значение NULL, что указывает на отсутствие руководителя. Необходимо вывести таблицу результатов с двумя столбцами (employee_id, salary), упорядочив её по employee_id.
Ответ
Отберите salary < 30000 и ненулевой manager_id, которому не соответствует существующий employee_id. Отсутствие начальника изначально не равно увольнению начальника.
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 в manager_id исключается явно; salary ровно 30000 также не подходит. Первичный ключ employee_id помогает поиску руководителя. Из условия следует возможность «висячих» ссылок, поэтому внешний ключ, запрещающий такую ситуацию, здесь не предполагается.