OFFSET 和 FETCH FIRST 子句

OFFSETFETCH FIRST 子句用于在结果集中返回从特定起点开始的指定范围的行。通过限制从较大结果集中检索的行数的功能,可以“逐页”浏览数据,并且提高效率。

OFFSET 子句指示在开始返回数据之前要跳过的行数。如果 OFFSET 子句未在 SELECT 语句中使用,则起始行为 0。FETCH FIRST 子句以大于或等于 1 的无符号整数或者百分比的形式指示从 OFFSET 子句中指示的起点开始要返回的行数。如果同时在 SELECT 语句中使用 OFFSETFETCH FIRST,应首先使用 OFFSET 子句。

OFFSETFETCH FIRST 子句在子查询中不受支持。

OFFSET 子句格式

OFFSET 格式为:

复制
OFFSET [ n {ROWS | ROW} ]

n 是无符号整数。如果 n 大于结果集中返回的行数,则不返回任何内容,并且不显示错误消息。

ROWSROW 相同。

FETCH FIRST 子句格式

FETCH FIRST 格式为:

复制
FETCH FIRST [ n [ PERCENT ] ] { ROWS | ROW } {ONLY | WITH TIES } ]

n 是要返回的行数。如果省略 n,则默认值为 1。

n 是大于或等于 1 的无符号整数,除非其后面是 PERCENT。如果 n 后面是 PERCENT,则值是正小数值或者是无符号整数。

ROWSROW 相同。

WITH TIES 必须与 ORDER BY 子句一起使用。

因为还会返回对等行(根据 ORDER BY 子句相互间无区别的行),所以 WITH TIES 允许返回的行数要多于在 FETCH 计数值中所指定的行数。

示例

返回依次按 last_namefirst_name 排序的结果集中第 26 行的信息。

复制
SELECT emp_id, last_name, first_name FROM emp ORDER BY last_name, first_name OFFSET 25 ROWS

指定您需要只返回 10 行。

复制
SELECT emp_id, last_name, first_name FROM emp ORDER BY last_name, first_name OFFSET 25 ROWS FETCH FIRST 10 ROWS ONLY

返回 10 行及其对等行(根据 ORDER BY 子句相互间无区别的行)。

复制
SELECT emp_id, last_name, first_name FROM emp ORDER BY last_name, first_name OFFSET 25 ROWS FETCH FIRST 10 ROWS WITH TIES