Null Значения в Подзапросе

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

Null Значения в Подзапросе

Логически, этот SQL-оператор должен был возвратить 12 строк. Однако, SQL-оператор не возвращает строк. Одно из значений, возвращенных внутренним запросом, является значением null и, поэтому, весь запрос не возвращает строк.

Причина состоит в том, что все условия, которые сравнивают значение null, имеют результатом null. Поэтому, всякий раз, когда значения null, вероятно, могут оказаться частью набора результатов подзапроса, не используйте оператор NOT IN. Оператор NOT IN эквивалентен <> ALL.

Заметьте, что значение null как часть набора результатов подзапроса не является проблемой, если Вы используете оператор IN. Оператор IN эквивалентен =ANY. Например, чтобы вывести на экран сотрудников, у которых есть подчиненные, используйте следующий SQL-оператор:

    SELECT emp.last_name
FROM employees emp
WHERE emp.employee_id IN
    (SELECT mgr.manager_id
    FROM employees mgr);

Альтернативно, предложение WHERE может быть включено в подзапрос, чтобы вывести на экран всех сотрудников, у которых нет никаких подчиненных:

    SELECT last_name FROM employees
WHERE employee_id NOT IN
    (SELECT manager_id
    FROM employees
    WHERE manager_id IS NOT NULL);

Далее: Оператор MINUS

Смотрите также
Комментарии
Написать

(обязательно)

(обязательно)

Это не спам (обязательно)