8.7 Работа с NULL

8.7.1 Выражения, которые возвращают NULL

В Cypher NULL используется для обозначения отсутствующего или неопределенного значения. Концептуально NULL означает “отсутствующее неизвестное значение” и обрабатывается несколько иначе, чем другие значения. Например, при получении свойства узла, которого он не имеет, говорят, что свойство произвело NULL. Большинство выражений, которые получают NULL на входе, будут производить NULL. Это относится и к булевым выражениям, которые используются в качестве предикатов в предложении WHERE. В данном случае всё, что не является TRUE, интерпретируется как ложь.

NULL не равен NULL. Если мы не знаем двух значений, это не значит, что они суть одно и то же. Поэтому выражение NULL = NULL даст нам NULL, а не TRUE.

Логические операторы (т.е. AND, OR, XOR, IN) трактуют NULL как значение UNKNOWN (“неизвестно”) в трехзначной логике. Ниже представлена таблица истинности значений для AND, OR и XOR.

a b a AND b a OR b a XOR b
FALSE FALSE FALSE FALSE FALSE
FALSE NULL FALSE NULL NULL
FALSE TRUE FALSE TRUE TRUE
TRUE FALSE FALSE TRUE TRUE
TRUE NULL NULL TRUE NULL
TRUE TRUE TRUE TRUE FALSE
NULL FALSE FALSE NULL NULL
NULL NULL NULL NULL NULL
NULL TRUE NULL TRUE NULL

Оператор IN следует подобной логике. Если Cypher знает, что элемент существует в коллекции, результат будет TRUE. Любая коллекция, которая содержит NULL и не имеет совпадающего элемента, вернёт NULL. В противном случае, результатом будет false. Вот таблица с примерами:

Выражение Результат
2 IN [1, 2, 3] TRUE
2 IN [1, NULL, 3] NULL
2 IN [1, 2, NULL] TRUE
2 IN [1] FALSE
2 IN [] FALSE
NULL IN [1,2,3] NULL
NULL IN [1,NULL,3] NULL
NULL IN [] FALSE

Использование ALL, ANY, NONE и SINGLE подчиняется подобному правилу. Если результат может быть вычислен определенно, возвращается TRUE или FALSE. В противном случае возникает NULL.

8.7.2 Выражения, которые возвращают NULL

  1. Получение отсутствующего элемента в коллекции: [][0], head([])
  2. Попытка доступа к свойству, которое не существует для узла или связи: n.missingProperty
  3. Сравнение с NULL: 1 < NULL
  4. Арифметические выражения, включающие NULL: 1 + NULL
  5. Вызовы функций, когда среди аргументов присутствует NULL: sin(NULL)

Предыдущая | Следующая