Секция 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
используется для возврата дополнительных строк, которые привязываются к последней в результате запроса. Например, если fetch_row_count
имеет значение 5 и существуют еще 2 строки с такими же значениями столбцов, указанных в ORDER BY
, что и у пятой строки результата, то финальный набор будет содержать 7 строк.
Секция 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 │
└───┴───┘