使用 null
在 Cypher® 中,null
用于表示缺失或未定义的值。Cypher 中的所有数据类型都允许为空(nullable)。这意味着类型谓词表达式对于 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
。