处理 null
在 Cypher® 中,null
用于表示缺失或未定义的值。Cypher 中的所有数据类型都可为空。这意味着类型谓词表达式 始终对 null
值返回 true
。
从概念上讲,null
表示**缺失或未知值**,并且它的处理方式与其他值略有不同。例如,从没有该属性的节点返回属性将产生 null
。大多数以 null
作为输入的表达式将产生 null
。在 WHERE
子句中使用的谓词的情况下,任何不是 true
的内容都将被解释为 false。
null
不等于 null
。不知道两个值并不意味着它们是同一个值。这意味着表达式 null
= null
产生 null
,而不是 true
。
null
的逻辑运算
逻辑运算符 (AND
、OR
、XOR
、NOT
) 将 null
视为三值逻辑的未知值。
a | b | a AND b |
a OR b |
a XOR b |
NOT a |
---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IN
运算符和 null
IN 运算符 遵循类似的逻辑。如果 Cypher 可以确定某物存在于列表中,则结果将为 true
。任何包含 null
且没有匹配元素的列表都将返回 null
。否则,结果将为 false
。
表达式 | 结果 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
使用 all
、any
、none
和 single
遵循类似的规则。如果结果可以确定性地计算,则返回 true
或 false
。否则会产生 null
。
[]
运算符和 null
使用 null
访问列表或映射将导致 null
表达式 | 结果 |
---|---|
|
|
|
|
|
|
|
|
使用参数传入边界,例如 a[$lower..$upper]
,可能会导致下边界或上边界(或两者)为 null
。以下解决方法将通过设置绝对最小和最大边界值来防止这种情况发生
a[coalesce($lower,0)..coalesce($upper,size(a))]
返回 null
的表达式
-
从列表中获取缺失的元素:
[][0]
、head([])
。 -
尝试访问节点或关系上不存在的属性:
n.missingProperty
。 -
当任一侧为
null
时的比较:1 < null
。 -
包含
null
的算术表达式:1 + null
。 -
某些函数调用,其中任何参数都为
null
:例如,sin(null)
。
使用 IS NULL
和 IS NOT NULL
使用 =
运算符或 <>
运算符将任何值与 null
进行比较,始终计算为 null
。因此,请使用特殊的相等运算符IS NULL 或 IS NOT NULL.