一个GQL查询由多条语句(Statement)组成,每条语句都是独立的数据库执行单元。一个典型的GQL查询通常以MATCH语句开头获取图中的数据,以一个RETURN语句结尾向客户端返回结果。
从句(Clause)则是语句的一部分,用来实现特定的功能,例如进行条件过滤的WHERE。从句本身不是完整的指令,必须作为语句的一部分出现。
GQL支持以下语句用于查询数据:
语句 |
描述 | 支持的子句 |
|---|---|---|
| MATCH | 使用模式从图中检索点、边和路径 | WHERE, YIELD |
| FILTER | 从中间结果表过滤不符合指定条件的记录 | |
| LET | 定义变量,并向中间结果表添加相应列 | |
| FOR | 将一个列表展开成独立的行 | |
| ORDER BY | 对中间结果表或输出表中的记录进行排序 | |
| LIMIT | 限制中间结果表或输出表中保留的记录数 | |
| SKIP | 从中间结果表或输出表的开头丢弃指定数量的记录 | |
| CALL | 调用一个内联过程或具名过程 | YIELD |
| RETURN | 指定输出表中包含的列 | GROUP BY |
线性查询
一个线性查询是指按顺序执行的查询,即依次处理每条语句,没有分支或条件逻辑,直接返回结果。
每个线性查询必须以结果语句结束,有以下几种:
RETURN ...RETURN ... ORDER BY ...RETURN ... ORDER BY ... SKIP ...RETURN ... ORDER BY ... LIMIT ...RETURN ... ORDER BY ... SKIP ... LIMIT ...RETURN ... SKIP...RETURN ... SKIP ... LIMIT ...RETURN ... LIMIT ...
RETURN语句是必须的,后面可选地可以有ORDER BY、SKIP和LIMIT语句。请注意,只有以上组合是有效的,其他组合,例如RETURN ... LIMIT ... SKIP ...是不支持的。
本例为一个线性查询,依次执行其中的MATCH、FILTER和RETURN语句:
MATCH (:User {_id: "U01"})-[:Follows]->(u:User)
FILTER u.city = "New York"
RETURN u
复合查询
复合查询通过连接词(UNION、EXCEPT、INTERSECT和OTHERWISE)合并多个线性查询的结果集。
本例为一个复合查询,将两个线性查询的结果使用UNION ALL合并在一起:
MATCH (n:Club) RETURN n
UNION ALL
MATCH (n:User) RETURN n
使用NEXT进行高级线性构造
NEXT语句用于串联多个线性或复合查询语句,用于实现较复杂的查询。