Oracle Database
Ограничение строк, возвращаемых запросом (Pagination)
Поиск…
Получить первые N строк с предложением ограничения строки
Предложение FETCH
было введено в Oracle 12c R1:
SELECT val
FROM mytable
ORDER BY val DESC
FETCH FIRST 5 ROWS ONLY;
Пример без FETCH, который также работает в более ранних версиях:
SELECT * FROM (
SELECT val
FROM mytable
ORDER BY val DESC
) WHERE ROWNUM <= 5;
Разбиение на страницы в SQL
SELECT val
FROM (SELECT val, rownum AS rnum
FROM (SELECT val
FROM rownum_order_test
ORDER BY val)
WHERE rownum <= :upper_limit)
WHERE rnum >= :lower_limit ;
таким образом, мы можем разбивать на таблицы данные таблицы, как и на веб-странице
Получить N номеров записей из таблицы
Мы можем ограничить количество строк из результата, используя предложение rownum
select * from
(
select val from mytable
) where rownum<=5
Если нам нужна первая или последняя запись, то мы хотим, чтобы во внутреннем запросе выполнялся оператор order by, который даст результат по заказу.
Последние пять записей:
select * from
(
select val from mytable order by val desc
) where rownum<=5
Первые пять записей
select * from
(
select val from mytable order by val
) where rownum<=5
Получить строку N через M из многих строк (до Oracle 12c)
Используйте аналитическую функцию row_number ():
with t as (
select col1
, col2
, row_number() over (order by col1, col2) rn
from table
)
select col1
, col2
from t
where rn between N and M; -- N and M are both inclusive
Oracle 12c легче справляется с OFFSET
и FETCH
.
Пропуск некоторых строк, а затем некоторые
В Oracle 12g +
SELECT Id, Col1
FROM TableName
ORDER BY Id
OFFSET 20 ROWS FETCH NEXT 20 ROWS ONLY;
В предыдущих версиях
SELECT Id,
Col1
FROM (SELECT Id,
Col1,
row_number() over (order by Id) RowNumber
FROM TableName)
WHERE RowNumber BETWEEN 21 AND 40
Пропуск ряда строк из результата
В Oracle 12g +
SELECT Id, Col1
FROM TableName
ORDER BY Id
OFFSET 5 ROWS;
В предыдущих версиях
SELECT Id,
Col1
FROM (SELECT Id,
Col1,
row_number() over (order by Id) RowNumber
FROM TableName)
WHERE RowNumber > 20
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow