Сотрудники без привязанного отдела

Используйте NOT EXISTS по идентификатору отдела: он вернёт сотрудников и с NULL, и с отсутствующим отделом. При корректно действующем внешнем ключе второй случай невозможен.

Короткий ответ

Что ответить на собеседовании

Используйте NOT EXISTS по идентификатору отдела: он вернёт сотрудников и с NULL, и с отсутствующим отделом. При корректно действующем внешнем ключе второй случай невозможен.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо отобрать всех сотрудников, у которых поле department_id пустое либо значение в этом поле не найдено в таблице departments.

CREATE TABLE departments (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    department_id INT,
    FOREIGN KEY (department_id) REFERENCES departments(id)
);

Ответ

Используйте NOT EXISTS по идентификатору отдела: он вернёт сотрудников и с NULL, и с отсутствующим отделом. При корректно действующем внешнем ключе второй случай невозможен.

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

Сравнение с NULL не находит строку, поэтому сотрудники без назначенного отдела также попадут в результат. При гарантированной целостности из DDL достаточно WHERE department_id IS NULL. Проверка отсутствующего ненулевого ID полезна для наследованных данных или отключённых ограничений; нарушить валидный внешний ключ обычной записью нельзя.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее