跳转至
开发版采用单机部署,无需产品 License 文件。需要多机部署或大规模性能测试? 了解企业版

线性查询

线性查询语句由一组简单查询语句组成。这些简单查询语句按顺序依次执行后,最终返回一个结果集。

语法

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

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_statement
  • let_statement
  • for_statement
  • filter_statement
  • paging_statement
  • call_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   |
+-----+