Оператор 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
.
Далее: Подчиненные выражения