使用 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 视为三值逻辑中的未知值

表 1. 逻辑运算符的真值表
a b a AND b a OR b a XOR b NOT a

false

false

false

false

false

true

false

null

false

null

null

true

false

true

false

true

true

true

true

false

false

true

true

false

true

null

null

true

null

false

true

true

true

true

false

false

null

false

false

null

null

null

null

null

null

null

null

null

null

true

null

true

null

null

IN 运算符和 null

IN 运算符遵循相似的逻辑。如果 Cypher 能够确定某个元素存在于列表中,则结果为 true。任何包含 null 且没有匹配元素的列表将返回 null。否则,结果为 false

表 2. 包含 IN 运算符的表达式示例
表达式 结果

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

使用 allanynonesingle 遵循类似的规则。如果结果可以明确计算,则返回 truefalse。否则,将产生 null

[] 运算符和 null

使用 null 访问列表或映射将导致 null

表达式 结果

[1, 2, 3][null]

null

[1, 2, 3, 4][null..2]

null

[1, 2, 3][1..null]

null

{age: 25}[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 NULLIS NOT NULL

使用 = 运算符或 <> 运算符测试任何值与 null 的比较,结果始终为 null。因此,请使用特殊的相等运算符 IS NULLIS NOT NULL

© . All rights reserved.