Source: https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dql/linear-query/ Documentation version: v5.3.2 # 线性查询 线性查询语句由一组简单查询语句组成。这些简单查询语句按顺序依次执行后,最终返回一个结果集。 ## 语法 语法图源码 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](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/sessions/set/)。 有关该子句的更多信息,请参见 [USE 子句](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dql/clauses/use-graph/)。 ### `simple_query_statement` 执行简单查询。简单查询语句可包括以下类型: - `match_statement` - `let_statement` - `for_statement` - `filter_statement` - `paging_statement` - `call_procedure_statement` #### `match_statement` 通过模式匹配从工作图中检索数据。更多信息,请参见 [MATCH](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dql/match/)。 #### `let_statement` 声明后续语句中可使用的变量。更多信息,请参见 [LET](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dql/let/)。 #### `for_statement` 遍历一组列表元素。更多信息,请参见 [FOR](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dql/for/)。 #### `filter_statement` 选择前语句返回的结果的子集。更多信息,请参见 [FILTER](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dql/filter/)。 #### `paging_statement` 将一组结果分成单独的子集或页面。更多信息,请参见[分页](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dql/order-by-page/)。 #### `call_procedure_statement` 调用过程。更多信息,请参见[调用内联过程](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dql/call/call-inline-procedure/)和[调用命名过程](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dql/call/call-procedure/)。 ### `primitive_result_statement` 线性查询的结束语句。更多信息,请参见[最终输出语句](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dql/primitive-result/)。 ### `procedure_body` 过程的处理逻辑,不允许包含任何 DML 或 DDL 语句。更多信息,请参见[过程体](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/procedures/#_3)。 ## 示例 以下示例基于[示例数据集](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/overview/example-dataset/)。 ### 带图上下文中的线性查询 ```` ''' 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 | +-----+ ````