Совместное использование FIRST … SKIP
и ROWS
Нельзя использовать ROWS
вместе с FIRST
/SKIP
в одном и том же операторе SELECT
, но можно использовать разный синтаксис в разных подзапросах.
FIRST … SKIP
и ROWS
Нельзя использовать ROWS
вместе с FIRST
/SKIP
в одном и том же операторе SELECT
, но можно использовать разный синтаксис в разных подзапросах.
ROWS
в UNION
При использовании ROWS
с выражением UNION
, он будет применяться к объединённому набору данных, и должен быть помещён после последнего SELECT
.
При необходимости ограничить возвращаемые наборы данных одного или нескольких операторов SELECT
внутри UNION
, можно воспользоваться следующими вариантами:
Использовать FIRST
/SKIP
в этих операторах SELECT
. Необходимо помнить, что нельзя локально использовать выражение ORDER BY
в SELECT
внутри UNION
– только глобально, ко всему суммарному набору данных;
Преобразовать SELECT
в производные таблицы с выражениями ROWS
.
Ниже приведены примеры, ранее использованные для демонстрации FIRST
/SKIP
.
Следующий запрос вернёт первые 10 имён из таблицы PEOPLE
(имена также будут отсортированы, см. ORDER BY).
SELECT id, name
FROM People
ORDER BY name ASC
ROWS 1 TO 10
или его эквивалент
SELECT id, name
FROM People
ORDER BY name ASC
ROWS 10
Следующий запрос вернёт все записи из таблицы PEOPLE
, за исключением первых 10 имён:
SELECT id, name
FROM People
ORDER BY name ASC
ROWS 11 TO (SELECT COUNT(*) FROM People)
А этот запрос вернёт последние 10 записей (обратите внимание на скобки):
SELECT id, name
FROM People
ORDER BY name ASC
ROWS (SELECT COUNT(*) - 9 FROM People)
TO (SELECT COUNT(*) FROM People)
Этот запрос вернёт строки 81-100 из таблицы PEOPLE:
SELECT id, name
FROM People
ORDER BY name ASC
ROWS 81 TO 100
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>
Параметр | Описание |
---|---|
integer-literal |
Целочисленный литерал |
query-parameter |
Парамер запрос. |
Note
|
|