Значения NULL

Значение NULL указывает на то, что значение неизвестно. Оно отличается от пустого или нулевого значения. Два значения NULL считаются эквивалентными. Сравнения между двумя значениями NULL или между значением NULL и каким-либо иным значением возвращают неизвестную величину, так как значение каждого из значений NULL неизвестно.

Значение NULL обычно указывает на то, что данные неизвестны, неприменимы или что данные будут добавлены позже. Например, на момент размещения клиентом заказа может быть неизвестно его отчество.

К значениям NULL относятся следующие соглашения:

  • для проверки наличия значения NULL в предложении WHERE запроса используются ключевые слова IS NULL или IS NOT NULL;

  • при просмотре результатов запроса в редакторе кода среды Среда SQL Server Management Studio значения NULL отображаются в результирующем наборе как NULL;

  • значения NULL могут появиться в столбце явным указанием значения NULL в инструкции INSERT или UPDATE, пропуском указания столбца в инструкции INSERT, либо при добавлении нового столбца в существующую таблицу инструкцией ALTER TABLE;

  • значения NULL не могут применяться в тех случаях, когда необходимо отличать одну строку таблицы от другой, например в качестве первичного или внешнего ключа.

В программном коде можно реализовать проверку наличия значений NULL так, чтобы определенные вычисления выполнялись только для строк с допустимыми данными, не содержащими значений NULL. Например, в отчете может выводиться столбец социального страхования, если только данные этого столбца не содержат значений NULL. Исключение значений NULL при вычислениях может иметь очень важное значение, так как ряд операций, например подсчет среднего арифметического, могут оказаться неточны, если в этих вычислениях участвуют столбцы, содержащие значения NULL.

Если существует вероятность присутствия в данных значений NULL и это нежелательно, необходимо создавать запросы и инструкции изменения данных так, чтобы они либо удаляли значения NULL, либо преобразовывали их в какие-нибудь другие значения.

Важное примечаниеВажно!

Чтобы упростить сопровождение и снизить вероятность возникновения нежелательных последствий для существующих запросов или отчетов, необходимо свести использование значений NULL к минимуму. Планируйте запросы и инструкции изменения данных таким образом, чтобы значения NULL использовались в минимальной степени.

Если в данных присутствуют значения NULL, логические операторы и операторы сравнения могут возвращать, кроме TRUE или FALSE, также и третий результат — UNKNOWN. Необходимость использования трехзначной логики является причиной многих ошибок в приложениях. Приведенные ниже таблицы показывают, как значения NULL влияют на операции сравнения.

В следующей таблице показаны результаты применения оператора AND к двум логическим операндам.

AND

TRUE

UNKNOWN

FALSE

TRUE

TRUE

UNKNOWN

FALSE

UNKNOWN

UNKNOWN

UNKNOWN

FALSE

FALSE

FALSE

FALSE

FALSE

В следующей таблице показаны результаты применения оператора OR к двум логическим операндам.

OR

TRUE

UNKNOWN

FALSE

TRUE

TRUE

TRUE

TRUE

UNKNOWN

TRUE

UNKNOWN

UNKNOWN

FALSE

TRUE

UNKNOWN

FALSE

В следующей таблице показано, как оператор NOT выполняет логическое отрицание (или обращение) результата логического оператора.

Логическое выражение, к которому применяется оператор NOT

Результат

TRUE

FALSE

UNKNOWN

UNKNOWN

FALSE

TRUE

Для проверки наличия значений NULL стандарт ISO использует ключевые слова IS NULL и IS NOT NULL.

Логическое выражение, к которому применяется оператор IS NULL

применяется

Результат

Логическое выражение, к которому применяется оператор IS NOT NULL

Результат

TRUE

FALSE

TRUE

TRUE

NULL

TRUE

NULL

FALSE

FALSE

FALSE

FALSE

TRUE

В языке Transact-SQL существует также собственное расширение для работы со значениями NULL. Если параметр ANSI_NULLS установлен в OFF, результатом сравнения двух значений NULL (например NULL = NULL) является TRUE. Результатом сравнения значения NULL с любым другим значением является FALSE.