OFFSET FETCH 子句
OFFSET
和 FETCH
允许您分批检索数据。它们指定您希望通过单个查询获取的行块。
OFFSET offset_row_count {ROW | ROWS}] [FETCH {FIRST | NEXT} fetch_row_count {ROW | ROWS} {ONLY | WITH TIES}]
offset_row_count
或 fetch_row_count
值可以是数字或文字常量。您可以省略 fetch_row_count
;默认情况下,它等于 1。
OFFSET
指定在开始返回查询结果集中的行之前要跳过的行数。
FETCH
指定查询结果中最多可以包含的行数。
ONLY
选项用于返回紧跟 OFFSET
省略的行之后的行。在这种情况下,FETCH
是 LIMIT 子句的替代方案。例如,以下查询
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
列的值匹配,则结果集将包含七行。
注意
根据标准,如果同时存在 OFFSET
和 FETCH
子句,则 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 │
└───┴───┘