Перейти к основному содержимому
Перейти к основному содержимому

Клауза 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.

Примеры

Исходная таблица:

┌─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 │
└───┴───┘