概述
WHERE
从句可在MATCH
语句中的图模式内应用过滤条件。WHERE
从句支持多种搜索条件,可以使用AND
、OR
、NOT
和XOR
等运算符将多重条件组合成逻辑表达式。
<where clause> ::= "WHERE" <search condition>
<search condition> ::= <boolean value expression>
GQL支持三类WHERE
从句:
- 元素模式的
WHERE
从句 - 带括号的路径模式的
WHERE
从句 - 图模式的
WHERE
从句
元素模式的WHERE
子句和带括号的路径模式的WHERE
子句可视为在选择之前应用的预过滤条件;而图模式的WHERE
子句则是在选择之后应用的后过滤条件。
元素模式的WHERE从句
可在元素模式里使用WHERE
从句作为谓词来应用过滤条件。
同元素属性规范相比,元素模式的WHERE
从句可提供更多搜索条件;而前者仅支持根据属性的键值对应用联合相等条件。
本条查询中,WHERE
从句在点模式中使用,筛选标签为Card
且属性level
大于3的点:
MATCH p = (c:Card WHERE c.level > 3)-[:Transfers]->()
RETURN p
本条查询中,WHERE
从句用在边模式中使用,筛选拥有amount
和currency
两个属性且具有特定属性值的边:
MATCH p = (:Card)-[t WHERE t.amount > 10000 AND t.currency = 'USD']->()
RETURN p
以下查询会引发语法错误,因为这里将amount
视为变量却没有提前对其声明。若想在WHERE
从句里指定某属性,需使用点运算符.
引用该属性,如(n:Card WHERE n.amount > 100)
。
MATCH p = (:Card WHERE amount > 100)-[]->()
RETURN p
以下查询会引发语法错误,因为不能在元素模式里同时使用属性规范和WHERE
从句。此查询可改写为(n:Paper WHERE n.author = "Alex" AND n.score > 5)
。
MATCH (n:Paper {author: "Alex"} WHERE n.score > 5)
RETURN n
带括号的路径模式的WHERE从句
可以在带括号的路径模式里使用WHERE
从句作为谓词来应用过滤条件。
本条查询中,WHERE
从句在带括号的路径模式中使用,筛选带量词的路径包含的边:
MATCH p = ((:Card)-[t:Transfers]->(:Card) WHERE t.amount > 200){1,3}
RETURN p
暂不支持在带量词的路径模式里使用
WHERE
从句。
图模式的WHERE从句
可以在图模式里使用WHERE
从句作为谓词来应用过滤条件。
本条查询中,WHERE
从句用来筛选居住城市相同且来自相同城市的人:
MATCH (p:Person)-[:LivesIn]->(c1:City),
(p)-[:IsFrom]->(c2:City)
WHERE c1 = c2
RETURN p