布尔运算符

布尔运算符用于组合或评估逻辑条件。Cypher® 包含以下布尔运算符

  • 合取:AND

  • 析取:OR

  • 异或:XOR

  • 否定:NOT

布尔运算符真值表
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

示例图

以下图表用于下方的示例

predicate operators

要重建该图,请在空的 Neo4j 数据库中运行以下查询

CREATE (alice:Person {name:'Alice', age: 65, role: 'Project manager', email: 'alice@company.com'}),
       (cecil:Person {name: 'Cecil', age: 25, role: 'Software developer', email: 'cecil@private.se'}),
       (cecilia:Person {name: 'Cecilia', age: 31, role: 'Software developer'}),
       (charlie:Person {name: 'Charlie', age: 61, role: 'Security engineer'}),
       (daniel:Person {name: 'Daniel', age: 39, role: 'Director', email: 'daniel@company.com'}),
       (eskil:Person {name: 'Eskil', age: 39, role: 'CEO', email: 'eskil@company.com'})

示例

示例 1. 布尔运算符
AND 运算符
MATCH (n:Person)
WHERE n.age > 30 AND n.role = 'Software developer'
RETURN n.name AS name, n.age AS age, n.role AS role
结果
名称 (name) age role(角色)

"Cecilia"

31

"Software developer"

行:1

OR 运算符
MATCH (n:Person)
WHERE n.age < 30 OR n.role = 'Software developer'
RETURN n.name AS name, n.age AS age, n.role AS role
结果
名称 (name) age role(角色)

"Cecilia"

31

"Software developer"

"Cecil"

25

"Software developer"

行:2

XOR 运算符
MATCH (n:Person)
WHERE n.age > 30 XOR n.role = 'Software developer'
RETURN n.name AS name, n.age AS age, n.role AS role
结果
名称 (name) age role(角色)

"Alice"

65

"项目经理"

"Cecil"

25

"Software developer"

"Charlie"

61

"Security engineer"

"Eskil"

39

"首席执行官"

"Daniel"

39

"总监"

行:5

NOT 运算符
MATCH (n:Person)
WHERE NOT n.age = 39
RETURN n.name AS name, n.age AS age
结果
名称 (name) age

"Alice"

65

"Cecil"

25

"Cecilia"

31

"Charlie"

61

行:4

运算符优先级

运算符优先级定义了在没有括号的情况下 Cypher 如何对表达式进行分组。在谓词中,以下顺序具有相关性(优先级越高越先执行)

  • 比较运算符:=, <>, <, >, , >=, IS NULL, IS NOT NULL, IN, STARTS WITH, ENDS WITH, CONTAINS, =~

  • 非 (NOT)

  • 与 (AND)

  • 异或 (XOR)

  • 或 (OR)

这意味着除非添加括号,否则 NOT 会应用于比较的结果。

示例

  • NOT true AND false 是有效的,等同于 (NOT true) AND false

  • true AND NOT false 是有效的,等同于 true AND (NOT false)

  • NOT true = false 是有效的,等同于 NOT (true = false)

  • true = NOT false 是无效的。请改用 true = (NOT false)

如果有疑问,请添加括号以明确预期的分组方式。

组合布尔运算符
MATCH (n:Person)
WHERE n.role = 'Software developer' XOR (n.age > 60 AND n.role = 'Security engineer') OR NOT (n.role = 'Director' OR n.name = 'Eskil')
RETURN n.name AS name, n.age AS age, n.role AS role
结果
名称 (name) age role(角色)

"Alice"

65

"项目经理"

"Cecil"

25

"Software developer"

"Cecilia"

31

"Software developer"

"Charlie"

61

"Security engineer"

行:4