Поиск сотрудников, у которых есть хотя бы один подчиненный

Оператор EXISTS обеспечивает прекращение поиска во внутреннем запросе, когда по условию будет найдено хотя бы одно совпадение номеров менеджера и сотрудника:

Использование оператора EXISTS

WHERE manager_id = outer.employee_id.

Обратите внимание, что не требуется, чтобы внутренним запросом возвращалось какое-либо конкретное значение, так что может быть выбрана константа.

Поиск всех отделов, в которых отсутствуют сотрудники

Использование оператора NOT EXISTS

Альтернативное решение

Как показано в следующем примере, в качестве альтернативы оператору NOT EXISTS может использоваться конструкция NOT IN:

SELECT department_id, department_name FROM departments WHERE department_id NOT IN (SELECT department_id         FROM employees);

No rows selected.

Однако оператор NOT IN принимает значение FALSE, если какой-либо элемент набора равен значению NULL. Следовательно, запрос не вернет ни одной строки, даже если в таблице departments существуют строки, удовлетворяющие условию WHERE.

Далее: Подчиненные выражения

Related Posts