跳到主要内容
跳到主要内容

OFFSET FETCH 子句

OFFSETFETCH 允许您按部分检索数据。它们指定了您想要通过单个查询获取的行块。

OFFSET offset_row_count {ROW | ROWS}] [FETCH {FIRST | NEXT} fetch_row_count {ROW | ROWS} {ONLY | WITH TIES}]

offset_row_countfetch_row_count 值可以是数字或字面常量。您可以省略 fetch_row_count;默认情况下,它等于 1。

OFFSET 指定在开始从查询结果集中返回行之前要跳过的行数。

FETCH 指定查询结果中可以包含的最大行数。

ONLY 选项用于返回紧随 OFFSET 跳过的行之后的行。在这种情况下,FETCHLIMIT 子句的替代方案。例如,以下查询

SELECT * FROM test_fetch ORDER BY a OFFSET 1 ROW FETCH FIRST 3 ROWS ONLY;

与以下查询相同

SELECT * FROM test_fetch ORDER BY a LIMIT 3 OFFSET 1;

WITH TIES 选项用于返回根据 ORDER BY 子句在结果集中并列最后一名的任何其他行。例如,如果 fetch_row_count 设置为 5,但另外两行与第五行中 ORDER BY 列的值匹配,则结果集将包含七行。

注意

根据标准,如果 OFFSETFETCH 子句都存在,则 OFFSET 子句必须在 FETCH 子句之前。

注意

实际偏移量也可能取决于 offset 设置。

示例

输入表

┌─a─┬─b─┐
│ 1 │ 1 │
│ 2 │ 1 │
│ 3 │ 4 │
│ 1 │ 3 │
│ 5 │ 4 │
│ 0 │ 6 │
│ 5 │ 7 │
└───┴───┘

ONLY 选项的用法

SELECT * FROM test_fetch ORDER BY a OFFSET 3 ROW FETCH FIRST 3 ROWS ONLY;

结果

┌─a─┬─b─┐
│ 2 │ 1 │
│ 3 │ 4 │
│ 5 │ 4 │
└───┴───┘

WITH TIES 选项的用法

SELECT * FROM test_fetch ORDER BY a OFFSET 3 ROW FETCH FIRST 3 ROWS WITH TIES;

结果

┌─a─┬─b─┐
│ 2 │ 1 │
│ 3 │ 4 │
│ 5 │ 4 │
│ 5 │ 7 │
└───┴───┘