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

分页

ORDER BY、OFFSET和LIMIT子句可以一起使用,将查询结果数据集划分为离散的子集或页面。这种过程通常称为分页。

本文介绍如何使用这些子句进行分页。除了分页之外,这些子句还可以与其他语句结合使用。更多信息,请参见 ORDER BY 子句、OFFSET 子句和 LIMIT 子句。

语法

paging_statement
order_by_clause offset_clause limit_clause offset_clause limit_clause limit_clause

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 |
+---+