概述
使用语句RETURN
可以指定需包含在最终输出中的项。各项由一个表达式定义,可以包括别名、属性、函数、常量等。
所有UQL查询,除图集管理、数据修改和其他特定用途的查询外,必须以RETURN
语句结尾。只有LIMIT
语句可以跟在RETURN
语句之后,为各返回项保留指定数量的记录,并舍弃其余记录。
语法
RETURN <item1> as <alias1?>, <item2?> as <alias2?>, ...
详情
RETURN
语句必须包含至少一个项目。- 各返回项的默认别名是返回项表达式本身。可使用别名重命名返回项。
- 在每个返回项表达式中,可以引用前面的语句中声明的别名。更多细节请参阅在RETURN中引用别名。
- 每个返回项对应以下结果类型的一种:
RESULT_TYPE_NODE
RESULT_TYPE_EDGE
RESULT_TYPE_PATH
RESULT_TYPE_ATTR
RESULT_TYPE_TABLE
示例图集

在一个空图集中,逐行运行以下语句,创建示例图集:
create().node_schema("Student").node_schema("Course").edge_schema("Take")
create().node_property(@Student,"name").node_property(@Student,"gender").node_property(@Course,"name").node_property(@Course,"credit",int32).edge_property(@Take, "year", int32).edge_property(@Take, "term")
insert().into(@Student).nodes([{_id:"s1", name:"Alex", gender:"male"}, {_id:"s2", name:"Susan", gender:"female"}])
insert().into(@Course).nodes([{_id:"c1", name:"Art", credit:13}, {_id:"c2", name:"Literature", credit:15}])
insert().into(@Take).edges([{_from:"s1", _to:"c1", year: 2024, term: "Spring"}, {_from:"s2", _to:"c1", year: 2023, term: "Fall"}, {_from:"s2", _to:"c2", year: 2023, term: "Spring"}])
返回点
返回每个点的schema和所有属性:
find().nodes({@Course}) as n
return n{*}
结果:n
_id | _uuid | schema | values |
---|---|---|---|
c1 | Sys-gen | Course | {name: "Art", credit: 13} |
c2 | Sys-gen | Course | {name: "Literature", credit: 15} |
返回每个点的schema和系统属性:
find().nodes({@Course}) as n
return n
结果:n
_id | _uuid | schema |
---|---|---|
c1 | Sys-gen | Course |
c2 | Sys-gen | Course |
返回边
返回每条边的schema和所有属性:
find().edges() as e
return e{*}
结果:e
_uuid |
_from |
_to |
_from_uuid |
_to_uuid |
schema |
values |
---|---|---|---|---|---|---|
Sys-gen | s2 | c1 | UUID of s2 | UUID of c1 | Take | {year: 2023, term: "Fall"} |
Sys-gen | s2 | c2 | UUID of s2 | UUID of c2 | Take | {year: 2023, term: "Spring"} |
Sys-gen | s1 | c1 | UUID of s1 | UUID of c1 | Take | {year: 2024, term: "Spring"} |
返回每条边的schema和所有系统属性:
find().edges() as e
return e
结果:e
_uuid | _from | _to | _from_uuid | _to_uuid | schema |
---|---|---|---|---|---|
Sys-gen | s2 | c1 | UUID of s2 | UUID of c1 | Take |
Sys-gen | s2 | c2 | UUID of s2 | UUID of c2 | Take |
Sys-gen | s1 | c1 | UUID of s1 | UUID of c1 | Take |
返回路径
返回每条路径中的点和边(包括点和边的schema和属性信息),以及路径长度:
n().re({@Take.term == "Spring"}).n() as p
return p{*}
结果:

返回每条路径中的点和边(包括点和边的schema和系统属性信息),以及路径长度:
n().re({@Take.term == "Spring"}).n() as p
return p
结果:

返回schema
n({_id == "s2"}).e(as e).n(as n)
return e.@, n.@
结果:
e.@ | n.@ |
---|---|
Take | Course |
Take | Course |
返回属性
使用英文句号.
,可以从代表点或边的别名中提取指定属性值。如果未发现点或边的指定属性,则返回null
值。
n({@Student.name == "Susan"}).re().n({@Course} as c)
return c.name, c.credit, c.type
结果:
c.name | c.credit | c.type |
---|---|---|
Literature | 15 | null |
Art | 13 | null |
可使用一组花括号{}
从点、边或路径中提取多个属性信息。更多信息请参阅在RETURN中引用别名。
n({@Student.name == "Susan"}).re().n({@Course} as c)
return c{name, credit}
结果:c
_id | _uuid | name | credit |
---|---|---|---|
c1 | Sys-gen | Literature | 15 |
c2 | Sys-gen | Art | 13 |
返回表
可使用table()
函数,指定返回项作为列,构建输出表。
n({@Student} as s).re().n({@Course} as c)
return table(s.name, c.name)
结果:
s.name | c.name |
---|---|
Susan | Art |
Susan | Literature |
Alex | Art |
返回各项别名
n({@Student} as s).re(as t).n({@Course} as c)
return s.name as Student, c.name as Course, t.year as TakenIn
结果:
Student | Course | TakenIn |
---|---|---|
Alex | Art | 2024 |
Susan | Art | 2023 |
Susan | Literature | 2023 |
返回去重记录
可使用DISTINCT
运算符对记录去重。
n().e(as e).n()
return distinct e.year
结果:
e.year |
---|
2023 |
2024 |
返回聚合结果
聚合函数,如sum()
和max()
,可以直接应用于RETURN
语句。
n({@Student.name == "Susan"}).re().n({@Course} as c)
return sum(c.credit)
结果:
sum(c.credit) |
---|
28 |
根据CASE返回结果
CASE
函数可以直接应用于RETURN
语句。
n({@Course} as n)
return n.name as Course, case when n.credit > 14 then "Y" else "N" end as Recommended
结果:
Course | Recommended |
---|---|
Art | N |
Literature | Y |
返回指定条记录
可使用LIMIT
语句限制返回的记录条数:
find().nodes({@Course}) as n
return n.name limit 1
结果:
n.name |
---|
Art |
返回有序记录
可使用ORDER BY
语句,根据指定值对记录排序。查询中,ORDER BY
必须出现在RETURN statement
之前。
n({@Course} as n)
order by n.credit desc
return n{*}
结果:n
_id | _uuid | schema | values |
---|---|---|---|
c2 | Sys-gen | Course | {name: "Literature", credit: 15} |
c1 | Sys-gen | Course | {name: "Art", credit: 13} |
返回异源数据
如果RETURN
语句中引用的别名是异源的,则会生成笛卡尔积。更多详情请参阅异源数据。
find().nodes({@Course}) as c
find().nodes({@Student}) as s
return c.name, s.name
结果:
c.name | s.name |
---|---|
Literature | Susan |
Literature | Alex |
Art | Susan |
Art | Alex |
在RETURN中引用别名
NODE类型
find().nodes({@city}) as n
return n
别名n
是NODE
类型,以下示例为RETURN
语句引用别名时的情况:
引用格式 |
每条记录返回的数据 | 结果类型 |
---|---|---|
n |
点schema和系统属性(_id ,_uuid ) |
RESULT_TYPE_NODE |
n{*} |
点schema和所有属性 | RESULT_TYPE_NODE |
n.name |
点属性name |
RESULT_TYPE_ATTR |
n{name, age} |
点schema,系统属性和属性name 与age |
RESULT_TYPE_NODE |
n.@ |
点schema | RESULT_TYPE_ATTR |
EDGE类型
find().edges({@transfers}) as e
return e
别名e
是EDGE
类型,以下示例为RETURN
语句引用别名时的情况:
引用格式 |
每条记录返回的数据 | 结果类型 |
---|---|---|
e |
边schema和系统属性(_uuid ,_from ,_to ,_from_uuid ,_to_uuid ) |
RESULT_TYPE_EDGE |
e{*} |
边schema和所有属性 | RESULT_TYPE_EDGE |
e.time |
边属性time |
RESULT_TYPE_ATTR |
e{time, amount} |
Edge schema, system properties, and properties time , amount . |
RESULT_TYPE_EDGE |
e.@ |
Edge schema. | RESULT_TYPE_ATTR |
PATH类型
n().e()[:5].n() as p
return p
别名p
是PATH
类型,以下示例为RETURN
语句引用别名时的情况:
引用格式 |
每条记录返回的数据 | 结果类型 |
---|---|---|
p |
路径中的点和边(包括点和边的schema和系统属性),以及路径长度 | RESULT_TYPE_PATH |
p{*} |
路径中的点和边(包括点和边的schema和所有属性),以及路径长度 | RESULT_TYPE_PATH |
p{name}{time, amount} |
路径中的点和边(包括每个点的schema、系统属性和属性name ;包括每条边的schema、系统属性、属性time 和属性amount ),以及路径长度 |
RESULT_TYPE_PATH |
p{*}{time, amount} |
路径中的点和边(包括每个点的schema和所有属性;包括每条边的schema、系统属性、属性time 和属性amount ),以及路径长度 |
RESULT_TYPE_PATH |
p{name}{*} |
路径中的点和边(包括每个点的schema、系统属性和属性name ;包括每条边的schema和所有属性),以及路径长度 |
RESULT_TYPE_PATH |
p{name} |
路径中的点和边(包括点和边的schema、系统属性和属性name ),以及路径长度 |
RESULT_TYPE_PATH |
List类型
uncollect [[1,2,3,4,5], [4,5,6,7,8]] as lists
return lists
别名lists
代表的每条记录都是list
类型,以下示例为RETURN
语句引用别名时的情况:
引用格式 |
每条记录返回的数据 | 结果类型 |
---|---|---|
lists |
一个列表 | RESULT_TYPE_ATTR |
lists[2] |
列表中的第3个元素 | 与元素类型一致;本例中为RESULT_TYPE_ATTR |
lists[0:3] |
由原列表第1个到第4个元素构成的新列表 | RESULT_TYPE_ATTR |
lists[:5] |
由原列表第1个到第6个元素构成的新列表 | RESULT_TYPE_ATTR |
lists[2:] |
由原列表第3个元素到结尾构成的新列表 | RESULT_TYPE_ATTR |
Point类型
find().nodes({@city}) as n
with n.location as points
return points
属性location
为point
类型,别名points
用来代表属性location
,以下示例为RETURN
语句引用别名时的情况:
引用格式 |
每条记录返回的数据 | 结果类型 |
---|---|---|
points |
具有x、y坐标的数据,如POINT(25 33) |
RESULT_TYPE_ATTR |
points.x |
x坐标值 | RESULT_TYPE_ATTR |
points.y |
y坐标值 | RESULT_TYPE_ATTR |
其他原子类型
原子类型,又称基础数据类型,如整数、小数和字符串,均无法拆分成更小成分。原子类型的别名只能被直接引用,因为无法从其表示的数据中进一步提取信息。
find().nodes({@city}) as n
with n.name as names
return upper(names)