GQL,即图查询语言(Graph Query Language),是图数据库的标准化查询语言,相当于SQL在关系型数据库中的作用。GQL标准的首个版本于2024年4月由ISO/IEC正式发布,标志着GQL成为自1987年SQL推出以来的第二个数据库标准语言。
本文为您介绍GQL相关基础知识。如需查看完整使用指南,请参阅GQL。
GQL主要语法

点模式
点模式用于匹配图中的点,以一对圆括号()表示,括号内可指定点的标签和属性。
匹配任意点:
()
匹配User点:
(:User)
匹配User点,其中name为Areith,age为32:
(:User {name: "Areith", age: 32})
匹配所有name为Areith的点:
({name: "Areith"})
边模式
边模式用于匹配图中的边,通常由一对方括号[]表示,括号内可指定边的标签和属性。边模式还需说明边的方向。
匹配任意边:
-[]-
匹配所有右向边rate:
-[:rate]->
匹配所有左向边rate,其中score属性值为8:
<-[:rate {score: 8}]-
路径模式
路径模式用于匹配图中的路径,由点模式和边模式组合而成。路径模式以点模式开始,以点模式结束,其间点模式和边模式交替出现。
匹配以Areith开始,通过出边rate达到终点Book的路径:
(:User {name: "Areith"})-[:rate]->(:Book)
匹配符合条件的路径,描述Areith和Kavi之间,经过Book点的普通连接:
(:User {name: "Areith"})-[]-(:Book)-[]-(:User {name: "Kavi"})
标签表达式
标签表达式以冒号:开始,用于在点模式或边模式中指定点标签或边标签。
属性规范
属性的键值对包裹在点模式或边模式的一对花括号{}中。使用联合等式即可根据具体属性值过滤点或边。
变量
变量是一种标识符,用来代表从数据库中检索到的或手动定义的数据,允许在整个查询过程中对其进行引用。
定义变量p来代表完整路径:
p = (:User {name: "Areith"})-[:rate]->(:Book)
定义变量books来代表Areith曾评分过的书:
(:User {name: "Areith"})-[:rate]->(books:Book)
定义变量r来代表与Areith连接的rate边,并在WHERE从句中使用该变量过滤分数大于8的rate边:
(:User {name: "Areith"})-[r:rate WHERE r.score > 8]-(:Book)
示例图集
以下示例基于本图运行:

从数据库读取数据
可从图中读取到的数据包括点、边和路径。想要获取这些数据,需在MATCH语句中写出对应的模式,并使用RETURN语句指定输出结果。
点
本条查询获取Person点,其中gender为male:
MATCH (p:Person {gender: "male"})
RETURN p
结果:p
| _id | _uuid | schema | values | 
|---|---|---|---|
| P1 | Sys-gen | Person | {name: "Kavi Moore", gender: "male"} | 
| P2 | Sys-gen | Person | {name: "Sira Lox", gender: "male"} | 
边
本条查询获取WorkIn边,其中endOn为null:
MATCH -[e:WorkIn WHERE e.endOn IS NULL]->
RETURN e
结果:e
| _uuid | _from | _to | _from_uuid | _to_uuid | schema | values | 
|---|---|---|---|---|---|---|
| Sys-gen | P1 | CO1 | UUID of P1 | UUID of CO1 | WorkIn | {StartOn: "2023-05-03 00:00:00", endOn: null} | 
路径
本条查询获取的每条路径都表明某人当前在InnoVex公司工作,并返回路径和此人的姓名:
MATCH p = (n:Person)-[e:WorkIn WHERE e.endOn IS NULL]->(:Company {name: "InnoVex"})
RETURN p, n.name
结果:
| p | n.name | 
|---|---|
| (:Person {_id: "P1", name: "Kavi Moore", gender: "male"})-[:WorksIn {startOn: "2023-05-03 00:00:00", endOn: null}]->(:Company {_id: "C01", name: "InnoVex"}) | Kavi Moore | 
向数据库写入数据
您可通过插入、更新和删除数据库中的点边数据向数据库写入数据。
插入
INSERT语句用来在数据库中创建新的点和边。
本条查询插入一个Person点,设定其_id为P4,name为Tiva Jorn:
INSERT (:Person {_id: "P4", name: "Tiva Jorn"})
本条查询插入一条WorkIn边,由点P4指向点CO1,startOn设定为2025-3-1:
MATCH (innovex {_id: "CO1"}), (tiva {_id: "P4"})
INSERT (tiva)-[:WorkIn {startOn: "2025-3-1"}]->(innovex)
更新
SET语句用来更新数据库中已有点边数据的属性信息。更新前,需先使用MATCH语句获取待更新的店或边。
本条查询更新点P4的信息,将其gender设置为female:
MATCH (tiva {_id: "P4"})
SET tiva.gender = "female"
本条查询更新由点P4指向点C01的边WorkIn的信息,将其startOn设置为2025-4-1:
MATCH ({_id: "P4"})-[e:WorkIn]->({_id: "CO1"})
SET e.startOn = "2025-4-1"
删除
DELETE语句用来删除数据库中的点边数据。删除前,需先使用MATCH语句获取待删除的点或边。默认情况下,无法删除与边相连的点。
本条查询删除由点P4指向点C01的边WorkIn。
MATCH ({_id: "P4"})-[e:WorkIn]->({_id: "CO1"})
DELETE e
本条查询删除点P4:
MATCH (n {_id: "P4"})
DELETE n
