在GQL中,一个查询(Query)由一条或多条语句(Statement)组成,每条语句都是独立的数据库执行单元。一个GQL查询通常以MATCH
语句开头获取图中的数据。
从句(Cluase)是语句的一部分,用来实现特定的功能,例如进行条件过滤的WHERE
。从句本身不是完整的指令,必须作为语句的一部分出现。
线性查询
一个线性查询是指按顺序执行的查询,即依次处理每条语句,没有分支或条件逻辑,直接返回结果。
<linear query statement> ::=
[ <query statement>... ] <result statement>
<query statement> ::=
<match statement>
| <filter statement>
| <let statement>
| <for statement>
| <order by statement>
| <limit statement>
| <skip statemenmt>
| <call statement>
<result statement> ::=
<return statement> [ <order by and page statement> ]
<order by and page statement> ::=
<order by statement>
| <order by statement> <skip statement>
| <order by statement> <limit statement>
| <order by statement> <skip statement> <limit statement>
| <skip statement>
| <skip statement> <limit clause>
| <limit clause>
详情
- 线性查询必须以结果语句
<result statement>
结束,其中包含一个<return statement>
和一个可选的<order by and page statement>
。<order by and page statement>
包含单独的ORDER BY
、SKIP
和LIMIT
语句或它们的组合,组合时必须按照这一顺序。
本例为一条线性查询,依次执行其中的MATCH
、FILTER
和RETURN
语句:
MATCH (:User {_id: "U01"})-[:Follows]->(u:User)
FILTER u.city = "New York"
RETURN u
查询和结果语句
语句 |
描述 | 子句 |
---|---|---|
MATCH | 使用模式从图中获取数据并与变量绑定,以便后续引用 | WHERE , YIELD |
FILTER | 从工作表中选择部分记录 | |
LET | 定义变量,并向工作表中添加相应列 | |
FOR | 将列表展开成工作表中独立的行 | |
ORDER BY | 对工作表中的记录进行排序 | |
LIMIT | 限制工作表中保留的记录数 | |
SKIP | 从工作表的开头丢弃指定数量的记录 | |
CALL | 调用系统定义的过程或内联子查询 | YIELD |
RETURN | 指定输出表中包含的列 | GROUP BY |
复合查询
复合查询将多条线性查询通过查询连接词结合在一起。
本例为一条复合查询,将两条线性查询的结果使用UNION ALL
合并在一起:
MATCH (n:Club) RETURN n
UNION ALL
MATCH (n:User) RETURN n
更多了解复合查询 →
使用NEXT的高级线性构造
NEXT
语句可用来连接多条线性或复合查询,实现较复杂的查询需求。
更多了解NEXT →