Оператор 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);
|
Однако оператор NOT IN принимает значение FALSE, если какой-либо элемент набора равен значению NULL. Следовательно, запрос не вернет ни одной строки, даже если в таблице departments существуют строки, удовлетворяющие условию WHERE.
Далее: Подчиненные выражения