FirebirdSQL logo

FETCH, OFFSET

Предложения FETCH и OFFSET являются SQL:2008 совместимым эквивалентом предложениям FIRST/SKIP и альтернативой предложению ROWS.Предложение OFFSET указывает, какое количество строк необходимо пропустить.Предложение FETCH указывает, какое количество строк необходимо получить.

Предложения OFFSET и FETCH могут применяться независимо уровня вложенности выражений запросов.

Синтаксис
SELECT <columns> FROM ...
  [WHERE ...]
  [ORDER BY ...]
  [OFFSET <offset-fetch-expression> {ROW | ROWS}]
  [FETCH {FIRST | NEXT} [ <offset-fetch-expression> ] { ROW | ROWS } ONLY]

<offset-fetch-expression>  ::=
    <integer-literal>
  | <query-parameter>
Table 1. Параметры предложений OFFSET и FETCH
Параметр Описание

integer-literal

Целочисленный литерал

query-parameter

Парамер запрос.? в DSQL и :paramname в PSQL

Note
  • Firebird не поддерживает указание FETCH в процентах, определённое в стандарте.

  • Firebird не поддерживает предложение FETCH с опцией WITH TIES, которая определена в стандарте.

  • FIRST …​ SKIP и ROWS являются нестандартными альтернативами.

  • Предложения OFFSET и/или FETCH не могут быть объединены с предложениями ROWS или FIRST/SKIP в одном выражении запроса.

  • Выражения, ссылки на столбцы и т.д. недопустимы в любом из предложений.

  • В отличие от предложения ROWS, предложения OFFSET и FETCH допустимы только в операторе SELECT.

Примеры использования OFFSET и FETCH

Следующий запрос возвращает все строки кроме первых 10, упорядоченных по столбцу COL1:

SELECT *
FROM T1
ORDER BY COL1
OFFSET 10 ROWS

В этом примере возвращается первые 10 строк, упорядоченных по столбцу COL1:

SELECT *
FROM T1
ORDER BY COL1
FETCH FIRST 10 ROWS ONLY

Использование предложений OFFSET и FETCH в производной таблице, результат которой ограничивается ещё раз во внешнем запросе.

SELECT *
FROM (
  SELECT *
  FROM T1
  ORDER BY COL1 DESC
  OFFSET 1 ROW
  FETCH NEXT 10 ROWS ONLY
) a
ORDER BY a.COL1
FETCH FIRST ROW ONLY
См. также:

ROWS, "FIRST, SKIP".