SQL Server Offset Fetch子句

SQL查询语句中的 limit 与 offset 的用法:

limit y 分句表示: 读取 y 条数据

limit x, y 分句表示: 跳过 x 条数据,读取 y 条数据

limit y offset x 分句表示: 跳过 x 条数据,读取 y 条数据

===================================================================

在本教程中,将学习如何使用SQL Server OFFSET FETCH子句来限制查询返回的行数。
OFFSETFETCH子句是ORDER BY子句的选项。 它们用于限制查询返回的行数。
以下是OFFSETFETCH子句的语法:

ORDER BY column_list [ASC |DESC]
OFFSET offset_row_count {ROW | ROWS}
FETCH {FIRST | NEXT} fetch_row_count {ROW | ROWS} ONLY
SQL

在上面语法中,

  • OFFSET子句指定在开始从查询返回行之前要跳过的行数。offset_row_count可以是大于或等于零的常量,变量或参数。
  • FETCH子句指定在处理OFFSET子句后要返回的行数。 offset_row_count可以是大于或等于1的常量,变量或标量。
  • OFFSET子句是必需的,而FETCH子句是可选的。 此外,FIRSTNEXT是同义词,因此可以互换使用它们。

以下图中说明了OFFSETFETCH子句:

请注意,必须将OFFSETFETCH子句与ORDER BY子句一起使用。 否则将收到错误消息。
OFFSETFETCH子句比实现TOP子句更适合实现查询分页解决方案。

SQL Server OFFSET和FETCH示例

下面将使用示例数据库中的products表进行演示。

以下查询返回products表中的所有产品,并按其价格和名称对产品进行排序:

SELECT
    product_name,
    list_price
FROM
    production.products
ORDER BY
    list_price,
    product_name;
SQL

执行上面示例查询语句,得到以下结果 -

要跳过前10个产品并返回其余产品,请使用OFFSET子句,如以下语句所示:

SELECT
    product_name,
    list_price
FROM
    production.products
ORDER BY
    list_price,
    product_name 
OFFSET 10 ROWS;
SQL

执行上面示例查询语句,得到以下结果 -

要跳过前10个产品并选择接下来的10个产品,请使用OFFSETFETCH子句,如下所示:

SELECT
    product_name,
    list_price
FROM
    production.products
ORDER BY
    list_price,
    product_name 
OFFSET 10 ROWS 
FETCH NEXT 10 ROWS ONLY;
SQL

执行上面示例查询语句,得到以下结果 -

要获得前10个最贵的产品,请使用OFFSETFETCH子句,如下所示:

SELECT
    product_name,
    list_price
FROM
    production.products
ORDER BY
    list_price DESC,
    product_name 
OFFSET 0 ROWS 
FETCH FIRST 10 ROWS ONLY;
SQL

执行上面示例查询语句,得到以下结果 -

在此示例中,ORDER BY子句按价格按降序对产品进行排序。 然后,OFFSET子句跳过零行,FETCH子句从列表中获取前10个产品。

在本教程中,学习了如何使用SQL Server OFFSET FETCH子句限制查询返回的行数。

//更多请阅读:https://www.yiibai.com/sqlserver/sql-server-offset-fetch.html

posted @ 2022-09-09 10:55  mapstar  阅读(220)  评论(0编辑  收藏  举报