分页¶
ORDER BY、OFFSET和LIMIT子句可以一起使用,将查询结果数据集划分为离散的子集或页面。这种过程通常称为分页。
本文介绍如何使用这些子句进行分页。除了分页之外,这些子句还可以与其他语句结合使用。更多信息,请参见 ORDER BY 子句、OFFSET 子句和 LIMIT 子句。
语法¶
- paging_statement
paging_statement ::=
order_by_clause offset_clause? limit_clause?
| offset_clause limit_clause?
| limit_clause
参数¶
order_by_clause¶
按升序或降序对结果进行排序。更多信息,请参见 ORDER BY 子句。
offset_clause¶
在开始返回后续结果之前,跳过指定数量的数据。更多信息,请参见 OFFSET 子句。
limit_clause¶
指定要返回的结果数的上限。更多信息,请参见 LIMIT 子句。
示例¶
使用 FOR 语句分页¶
'''
FOR i IN LIST[3, 2, 5, 4, 1]
ORDER BY i ASC
OFFSET 3
RETURN i
'''
上述语句按升序对列表中的数字进行排序,然后跳过前三行,从第四行开始返回剩余数据。
返回:
+---+
| i |
+---+
| 4 |
| 5 |
+---+
在 RETURN 语句之前分页¶
'''
FOR i IN LIST[3, 2, 5, 4, 1]
ORDER BY i ASC
OFFSET 1
LIMIT 3
RETURN i
'''
上述语句在RETURN语句之前执行排序和分页操作。
返回:
+---+
| i |
+---+
| 2 |
| 3 |
| 4 |
+---+
如果子句不按照语法定义的顺序排列,它们将被视为多个分页语句,每个分页语句只包含一个子句。如下例所示。
'''
FOR i IN LIST[3, 2, 5, 4, 1]
LIMIT 3
OFFSET 1
RETURN i
'''
上述语句在RETURN语句之前执行两个分页语句。第一个是包含LIMIT子句的分页语句,第二个是包含OFFSET子句的分页语句。
这是因为根据语法,OFFSET子句后面只能跟随LIMIT子句。由于子句不按照语法定义的顺序排列,它们被视为两个连续的分页语句。
返回:
+---+
| i |
+---+
| 2 |
| 5 |
+---+
您可以执行以下语句查看执行计划。
'''
EXPLAIN
FOR i IN LIST[3, 2, 5, 4, 1]
LIMIT 3
OFFSET 1
RETURN i
'''
返回:
---------------+---------------------------------------------------------
| planNodes | details |
---------------+---------------------------------------------------------
| Limit | Offset 1, Limit 18446744073709551615, IS Partial false |
| └─Limit | Offset 0, Limit 3, IS Partial false |
| └─Unwind | For i IN [3,2,5,4,1] |
| └─Values | UNIT |
---------------+---------------------------------------------------------
在 RETURN 语句之后分页¶
RETURN语句后只能跟随一个分页语句。更多信息,请参见线性查询语句。
'''
FOR i IN LIST[3, 2, 5, 4, 1]
RETURN i
OFFSET 1
LIMIT 3
'''
返回:
+---+
| i |
+---+
| 2 |
| 5 |
| 4 |
+---+