语句块¶
在 GQL 中,语句块是一条或多条按顺序执行的语句组成的集合。
语句块支持将多个独立语句组成一个单元在当前工作图中执行,并使用关键字NEXT分隔多个可独立执行的语句。
本文从悦数图数据库开发版 GQL 的视角介绍语句块的通用语法,示例也主要基于持久图上的查询和 DML 操作。
语法¶
- statement_block
statement_block ::=
( ( linear_catalog_modifying_statement | linear_data_modifying_statement | composite_query_statement ) ( 'NEXT' ( linear_catalog_modifying_statement | linear_data_modifying_statement | composite_query_statement ) )*
| match_compute_statement
| control_flow_statement
| variable_manipulation_statement
| import_statement
| export_statement
| logging_statement )
参数¶
linear_catalog_modifying_statement¶
修改 Catalog 的数据定义语句。更多信息,请参见数据定义语句。
一个语句块最多可包含一条数据定义语句,且这条语句必须是语句块中的唯一一条语句。
linear_data_modifying_statement¶
修改数据的数据操作语句。更多信息,请参见数据操作语句。
一个语句块最多可包含一条数据操作语句,且这条语句必须是语句块中的最后一条语句。
composite_query_statement¶
复合查询语句。更多信息,请参见复合查询。
match_compute_statement¶
在临时图上执行迭代计算的匹配计算语句。更多信息,请参见匹配计算。
control_flow_statement¶
控制执行流程的控制流语句。更多信息,请参见控制流。
variable_manipulation_statement¶
操作变量的变量操作语句。更多信息,请参见变量操作。
import_statement¶
导入数据到临时图的导入语句。更多信息,请参见 IMPORT。
export_statement¶
将查询结果导出到表格或文件的导出语句。更多信息,请参见 EXPORT。
logging_statement¶
过程执行时打印日志消息的日志语句。更多信息,请参见日志。
示例¶
以下示例基于持久图,适用于悦数图数据库开发版运行时。
包含数据查询和操作的语句块¶
'''
USE movie
MATCH (a@Actor{id:2})
RETURN a
NEXT
USE movie
INSERT (a)-[r@Act{}]->(b@Movie{id:2})
'''
上述语句块包含两个语句:
- 第一个语句是一个查询语句,用于查找 ID 为 2 的演员;
- 第二个语句是一个修改数据的操作语句,用于创建一个 ID 为 2 的电影,并插入一条为 ID 为 2 的演员与电影之间的关系。
'''
USE movie
MATCH (a@Movie{id:2})
RETURN a
NEXT
USE movie
DETACH DELETE a
'''
上述语句块包含两个语句:
- 第一个语句是一个查询语句,用于查找 ID 为 2 的电影;
- 第二个语句是一个修改数据的操作语句,用于删除 ID 为 2 的电影及其关联的边。
包含多个查询语句的语句块¶
'''
USE movie
MATCH
(actor@Actor)-[:Act]-(movie@Movie),
(director@Director)-[:Direct]->(movie),
(audience@`User`)-[:Watch]->(movie)
RETURN DISTINCT audience, movie
LIMIT 10
NEXT
USE movie
LET valid=1, inValid=0
RETURN sum(valid) AS audienceCount, sum(inValid) AS inValidAudienceCount, movie GROUP BY movie
NEXT
USE movie
FILTER WHERE audienceCount>0 AND inValidAudienceCount=0
ORDER BY audienceCount DESC, movie.name ASC
RETURN movie.name AS movieName, audienceCount
'''
上述语句块包含三个查询语句:
- 第一个语句是一个复合查询语句,用于查找演员、导演和观众与电影之间的关系;并返回 10 条观众和电影的信息;
- 第二个语句是一个复合查询语句,用于计算每部电影的观众数量和无效观众数量;
- 第三个语句是一个复合查询语句,用于过滤出观众数量大于 0 且无效观众数量等于 0 的电影,并按观众数量降序、电影名称升序排序。
返回:
+------------------+---------------+
| movieName | audienceCount |
+------------------+---------------+
| Saw III | 7 |
| Bread and Tulips | 3 |
+------------------+---------------+