Null Значения в Подзапросе
SQL-оператор на рисунке пытается вывести на экран всех сотрудников, у которых нет подчиненных.

Логически, этот SQL-оператор должен был возвратить 12 строк. Однако, SQL-оператор не возвращает строк. Одно из значений, возвращенных внутренним запросом, является значением null и, поэтому, весь запрос не возвращает строк.
Причина состоит в том, что все условия, которые сравнивают значение null, имеют результатом null. Поэтому, всякий раз, когда значения null, вероятно, могут оказаться частью набора результатов подзапроса, не используйте оператор NOT IN
. Оператор NOT IN
эквивалентен <> ALL
.
Заметьте, что значение null как часть набора результатов подзапроса не является проблемой, если Вы используете оператор IN
. Оператор IN
эквивалентен =ANY
. Например, чтобы вывести на экран сотрудников, у которых есть подчиненные, используйте следующий SQL-оператор:
SELECT emp.last_name |
Альтернативно, предложение WHERE
может быть включено в подзапрос, чтобы вывести на экран всех сотрудников, у которых нет никаких подчиненных:
SELECT last_name FROM employees |