Oracle Database
Ograniczanie wierszy zwracanych przez zapytanie (paginacja)
Szukaj…
Uzyskaj pierwsze N wierszy z klauzulą ograniczającą wiersze
Klauzula FETCH
została wprowadzona w Oracle 12c R1:
SELECT val
FROM mytable
ORDER BY val DESC
FETCH FIRST 5 ROWS ONLY;
Przykład bez FETCH, który działa również we wcześniejszych wersjach:
SELECT * FROM (
SELECT val
FROM mytable
ORDER BY val DESC
) WHERE ROWNUM <= 5;
Paginacja w 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 ;
w ten sposób możemy paginować dane tabeli, podobnie jak strona wyszukiwania w sieci
Uzyskaj N liczby rekordów z tabeli
Możemy ograniczyć liczbę wierszy od wyniku za pomocą klauzuli rownum
select * from
(
select val from mytable
) where rownum<=5
Jeśli chcemy pierwszego lub ostatniego rekordu, chcemy uporządkować według klauzuli w wewnętrznym zapytaniu, które da wynik na podstawie kolejności.
Ostatnie pięć rekordów:
select * from
(
select val from mytable order by val desc
) where rownum<=5
Pierwsze pięć rekordów
select * from
(
select val from mytable order by val
) where rownum<=5
Uzyskaj rząd od N do M z wielu rzędów (przed Oracle 12c)
Użyj funkcji analitycznej 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 radzi sobie z tym łatwiej dzięki OFFSET
i FETCH
.
Pomijanie niektórych wierszy, a następnie branie
W Oracle 12g +
SELECT Id, Col1
FROM TableName
ORDER BY Id
OFFSET 20 ROWS FETCH NEXT 20 ROWS ONLY;
We wcześniejszych wersjach
SELECT Id,
Col1
FROM (SELECT Id,
Col1,
row_number() over (order by Id) RowNumber
FROM TableName)
WHERE RowNumber BETWEEN 21 AND 40
Pomijanie niektórych wierszy z wyniku
W Oracle 12g +
SELECT Id, Col1
FROM TableName
ORDER BY Id
OFFSET 5 ROWS;
We wcześniejszych wersjach
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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow