FirebirdSQL logo

ROWS

Назначение

Получение части строк из упорядоченного набора.

Синтаксис
SELECT <columns> FROM ...
  [WHERE ...]
  [ORDER BY ...]
  ROWS <value-expression> [TO <value-expression>]
Table 1. Параметры предложения ROWS
Параметр Описание

value-expression

Любые целочисленные выражения.

Предложение ROWS было введено для совместимости с Interbase 6.5 и выше.

В отличие от FIRST и SKIP, выражение ROWS принимает все типы целочисленных (integer) выражений в качестве аргумента – без скобок! Конечно, скобки могут требоваться для правильных вычислений внутри выражения, и вложенный запрос также должен быть обернут в скобки. Если результат выражения не явлется целым числом, то будет приведено к целому числу, если это возможно.

Important
  • Нумерация записей в наборе данных начинается с 1.

  • И FIRST/SKIP, и ROWS могут быть использованы без выражения ORDER BY, хотя это редко имеет смысл, за исключением случая, когда необходимо быстро взглянуть на данные таблицы – получаемые строки при этом будут чаще всего в случайном порядке. В этом случае запрос вроде SELECT * FROM TABLE1 ROWS 20 вернёт 20 первых записей, а не целую таблицу (которая может очень большой).

Вызов ROWS m приведёт к возвращению первых m записей из набора данных.

Особенности при использовании ROWS с одним аргументом

  • Если m больше общего числа записей в возвращаемом наборе данных, то будет возвращён весь набор данных;

  • Если m = 0, то будет возвращён пустой набор данных;

  • Если m < 0, выдаётся ошибка.

В случае указания ROWS m TO n, то будут возвращены записи с m по n из набора данных.

Особенности при использовании ROWS с двумя аргументами

  • Если m больше общего количества строк в наборе данных и n >= m, то будет возвращён пустой набор данных;

  • Если число m не превышает общего количества строк в наборе данных, а n превышает, то выборка ограничивается строками, начиная с m до конца набора данных;

  • Если m < 1 и n < 1, то оператор SELECT выдаст ошибку;

  • Если n = m -1, то будет возвращён пустой набор данных;

  • Если n < m -1, то оператор SELECT выдаст ошибку.

Замена FIRST …​ SKIP

В сущности, ROWS заменяет собой нестандартные выражения FIRST и SKIP, за исключением единственного случая, когда указывается только SKIP, т.е.когда возвращается весь набор данных за исключением пропуска указанного числа записей с начала.

Для того, что реализовать такое поведение с помощью ROWS, необходимо указать второй аргумент, заведомо больший, чем размер возвращаемого набора данных.Или запросить число записей в возвращаемом наборе через подзапрос.