Working with null
In Cypher®, null
is used to represent missing or undefined values.
All data types in Cypher are nullable.
Conceptually, null
means a missing or unknown value, and it is treated somewhat differently from other values.
For example, returning a property from a node that does not have said property produces null
.
Most expressions that take null
as input will produce null
.
In the case of a predicate used in a WHERE
clause, anything that is not true
is interpreted as being false.
null
is not equal to null
.
Not knowing two values does not imply that they are the same value.
This means that the expression null
= null
yields null
, and not true
.
Logical operations with null
The logical operators (AND
, OR
, XOR
, NOT
) treat null
as the unknown value of three-valued logic.
a | b | a AND b |
a OR b |
a XOR b |
NOT a |
---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The IN
operator and null
The IN operator follows similar logic.
If Cypher can ascertain that something exists in a list, the result will be true
.
Any list that contains a null
and does not have a matching element will return null
.
Otherwise, the result will be false
.
Expression | Result |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Using all
, any
, none
, and single
follows a similar rule.
If the result can be calculated definitively, true
or false
is returned.
Otherwise null
is produced.
The []
operator and null
Accessing a list or a map with null
will result in null
:
Expression | Result |
---|---|
|
|
|
|
|
|
|
|
Using parameters to pass in the bounds, such as a[$lower..$upper]
, may result in a null
for the lower or upper bound (or both).
The following workaround will prevent this from happening by setting the absolute minimum and maximum bound values:
a[coalesce($lower,0)..coalesce($upper,size(a))]
Expressions that return null
-
Getting a missing element from a list:
[][0]
,head([])
. -
Trying to access a property that does not exist on a node or relationship:
n.missingProperty
. -
Comparisons when either side is
null
:1 < null
. -
Arithmetic expressions containing
null
:1 + null
. -
Some function calls where any argument is
null
: e.g.,sin(null)
.
Using IS NULL
and IS NOT NULL
Testing any value against null
, either with the =
operator or with the <>
operator, always evaluates to null
.
Therefore, use the special equality operators IS NULL or IS NOT NULL.
Was this page helpful?