Перейти к содержимому
Последнее обновление

NULL

Основные сведения о NULL​

Если столбец в строке не содержит значения, считается, что он имеет значение NULL. NULL может встречаться в любом столбце, для которого не задано ограничение "NOT NULL". Используйте NULL, когда фактическое значение неизвестно или когда значение не имеет смысла.

Не используйте NULL для обозначения числового нуля или пустой строки. Эти значения не эквивалентны.

Любое арифметическое выражение, содержащее NULL, всегда возвращает NULL. Например, прибавление NULL к 10 по-прежнему даёт NULL. В действительности все операторы возвращают NULL, если получают NULL в качестве операнда.

NULL в качестве аргумента функции​

Если в качестве аргумента передаётся NULL, большинство агрегатных функций возвращают NULL. Чтобы вернуть значение при появлении NULL, можно использовать функцию IFNULL. Например, выражение IFNULL(arg, 0) возвращает 0, если arg равен NULL, и значение arg, если arg не равен NULL. Подробное описание поведения каждой функции см. в разделе «Функции».

NULL и операторы сравнения​

Для проверки результата на NULL можно использовать только условия сравнения IS NULL и IS NOT NULL. Если используется условие, результат которого зависит от NULL, оно возвращает UNKNOWN. Поскольку NULL обозначает отсутствие данных, NULL не может быть ни равен, ни не равен какому-либо значению или другому NULL.

В случаях, когда сравнение возможно (например, при сравнении вложенных типов, если внутреннее значение равно NULL), NULL всегда считается меньше любого значения, представимого текущим типом. То есть он меньше любого значения, кроме самого себя:

select array(null) < array(-1), array(null) > array(-1);
+-------------------------+-------------------------+
| array(null) < array(-1) | array(null) > array(-1) |
+-------------------------+-------------------------+
| 1 | 0 |
+-------------------------+-------------------------+

select array(cast("nan" as double)) > array(null);
+--------------------------------------------+
| array(cast("nan" as double)) > array(null) |
+--------------------------------------------+
| 1 |
+--------------------------------------------+

select array(cast("inf" as double)) > array(null);
+--------------------------------------------+
| array(cast("inf" as double)) > array(null) |
+--------------------------------------------+
| 1 |
+--------------------------------------------+

NULL в условиях​

Условия, результатом вычисления которых является UNKNOWN, ведут себя почти так же, как условия с результатом FALSE. Например, оператор SELECT, в предложении WHERE которого задано условие с результатом UNKNOWN, не вернёт ни одной строки. Однако отличие условий с результатом UNKNOWN от условий с результатом FALSE заключается в том, что дальнейшие операции над результатом UNKNOWN также дают UNKNOWN. Поэтому результат вычисления NOT FALSE — TRUE, а результат вычисления NOT UNKNOWN — UNKNOWN.

В таблице ниже приведены примеры вычисления различных условий с NULL. Если условие с результатом UNKNOWN используется в предложении WHERE оператора SELECT, запрос не вернёт ни одной строки.

УсловиеЗначение AРезультат
a IS NULL10FALSE
a IS NOT NULL10TRUE
a IS NULLNULLTRUE
a IS NOT NULLNULLFALSE
a = NULL10UNKNOWN
a != NULL10UNKNOWN
a = NULLNULLUNKNOWN
a != NULLNULLUNKNOWN
a = 10NULLUNKNOWN
a != 10NULLUNKNOWN