线性查询¶
线性查询语句由一组简单查询语句组成。这些简单查询语句按顺序依次执行后,最终返回一个结果集。
语法¶
- linear_query_statement
- simple_query_statement
linear_query_statement ::=
((use_graph_clause simple_query_statement+)+)? use_graph_clause simple_query_statement+ primitive_result_statement
| use_graph_clause primitive_result_statement
| ( simple_query_statement+)? primitive_result_statement
| use_graph_clause? '{' procedure_body '}'
simple_query_statement ::=
match_statement
| let_statement
| for_statement
| filter_statement
| paging_statement
| call_procedure_statement
参数¶
use_graph_clause¶
声明查询所使用的工作图。该子句仅在查询涉及到图且当前会话中未设置主图时才需要。有关如何设置主图,请参见 SESSION SET。
有关该子句的更多信息,请参见 USE 子句。
simple_query_statement¶
执行简单查询。简单查询语句可包括以下类型:
match_statementlet_statementfor_statementfilter_statementpaging_statementcall_procedure_statement
match_statement¶
通过模式匹配从工作图中检索数据。更多信息,请参见 MATCH。
let_statement¶
声明后续语句中可使用的变量。更多信息,请参见 LET。
for_statement¶
遍历一组列表元素。更多信息,请参见 FOR。
filter_statement¶
选择前语句返回的结果的子集。更多信息,请参见 FILTER。
paging_statement¶
将一组结果分成单独的子集或页面。更多信息,请参见分页。
call_procedure_statement¶
primitive_result_statement¶
线性查询的结束语句。更多信息,请参见最终输出语句。
procedure_body¶
过程的处理逻辑,不允许包含任何 DML 或 DDL 语句。更多信息,请参见过程体。
示例¶
以下示例基于示例数据集。
带图上下文中的线性查询¶
'''
USE movie
MATCH (v@`User`{id: 123})-[e:Watch]->(m:Movie)
FILTER WHERE e.rate > 3
RETURN m.name AS movie, e.rate AS rate
ORDER BY rate DESC
'''
上述语句检索 ID 为123的用户观看的电影,并过滤出评分大于3的电影,然后按降序返回电影名称和评分。
返回:
+-----------------------+------+
| movie | rate |
+-----------------------+------+
| Star Wars | 4.0 |
| Star Wars: A New Hope | 4.0 |
| City of God | 3.5 |
+-----------------------+------+
不带图上下文的线性查询¶
'''
LET nums = LIST[1, 2, 3, 4, 5]
FOR i IN nums
FILTER i % 2 = 1
RETURN i AS odd
ORDER BY odd DESC
'''
返回:
+-----+
| odd |
+-----+
| 5 |
| 3 |
| 1 |
+-----+
使用NEXT串联两个线性片段¶
'''
FOR i IN RANGE(1, 8)
RETURN i AS num
NEXT
FILTER num >= 5
RETURN num
ORDER BY num
'''
返回:
+-----+
| num |
+-----+
| 5 |
| 6 |
| 7 |
| 8 |
+-----+