FirebirdSQL logo

Использование ROWS в UNION

При использовании ROWS с выражением UNION, он будет применяться к объединённому набору данных, и должен быть помещён после последнего SELECT.

При необходимости ограничить возвращаемые наборы данных одного или нескольких операторов SELECT внутри UNION, можно воспользоваться следующими вариантами:

  1. Использовать FIRST/SKIP в этих операторах SELECT. Необходимо помнить, что нельзя локально использовать выражение ORDER BY в SELECT внутри UNION – только глобально, ко всему суммарному набору данных;

  2. Преобразовать 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", "FIRST, SKIP".