ВЫБОРКА, ПРИ КОТОРОЙ ВОВЛЕКАЕТСЯ NULL (неопределенное значение)
Допустим, например, что значением в столбце СОСТОЯНИЕ для поставщика S5 является не 30, а неопределенное значение. Выдать номера поставщиков, у которых состояние больше, чем 25:
SELECT НОМЕР_ПОСТАВЩИКА
FROM S
WHERE СОСТОЯНИЕ > 25;
В результате получим:
НОМЕР_ПОСТАВЩИКА
S3
Здесь поставщик S5 не был назван в результате. Если неопределенное значение сравнивается с некоторым другим значением при вычислении предиката, то независимо от используемого оператора сравнения результатом сравнения никогда не является истина, даже если этот другой операнд также является неопределенным значением. Иными словами, если оказывается, что СОСТОЯНИЕ имеет неопределенное значение, то ни одно из следующих сравнений не будет принимать значение истина[12]:
СОСТОЯНИЕ > 25
СОСТОЯНИЕ < = 25
СОСТОЯНИЕ = 25
СОСТОЯНИЕ Ø= 25
СОСТОЯНИЕ = NULL (Это недопустимая синтаксическая конструкция. См. ниже)
СОСТОЯНИЕ Ø= NULL (Это — тоже).
Поэтому если издать запрос:
SELECT НОМЕР_ПОСТАВЩИКА
FROM S
WHERE СОСТОЯНИЕ < = 25;
и сравнить его результат с результатом предыдущего запроса, то можно установить, что поставщик S5 не появляется ни в одном из них. Результат приведенного запроса:
НОМЕР_ПОСТАВЩИКА
S1
S2
S4
Для проверки наличия (или отсутствия) неопределенного значения предусмотрен специальный предикат вида:
имя — столбца IS [NOT] NULL
Например:
SELECT НОМЕР_ПОСТАВЩИКА
FROM S
WHERE СОСТОЯНИЕ IS NULL;
В результате имеем:
НОМЕР_ПОСТАВЩИКА
S5
Синтаксическая конструкция «СОСТОЯНИЕ = NULL» является некорректной, поскольку ничто — и даже само неопределенное значение — не считается равным неопределенному значению. (Несмотря на это, два неопределенных значения рассматриваются, однако, как дубликаты друг друга при исключении дубликатов. Предложение SELECT DISTINCT (ВЫБРАТЬ РАЗЛИЧНЫЕ) даст в результате не более одного неопределенного значения. Аналогичным образом индекс со спецификацией UNIQUE (уникальный) будет допускать в индексируемом столбце не более одного неопределенного значения. Наконец, при упорядочении ORDER BY (УПОРЯДОЧИТЬ ПО) неопределенные значения интерпретируются, как будто бы они больше или равны всем значениям, не являющимся неопределенными).
Заметим, между прочим, что использование символа NULL во фразе SELECT не допускается. Например, следующая конструкция некорректна:
SELECT НОМЕР_ДЕТАЛИ, 'ВЕС = ', NULL
FROM P
WHERE ВЕС IS NULL;