Oracle Database
Beperking van de rijen die door een zoekopdracht worden geretourneerd (Paginering)
Zoeken…
Krijg de eerste N rijen met rijbeperkende clausule
De FETCH
clausule is geïntroduceerd in Oracle 12c R1:
SELECT val
FROM mytable
ORDER BY val DESC
FETCH FIRST 5 ROWS ONLY;
Een voorbeeld zonder FETCH dat ook in eerdere versies werkt:
SELECT * FROM (
SELECT val
FROM mytable
ORDER BY val DESC
) WHERE ROWNUM <= 5;
Paginering in 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 ;
op deze manier kunnen we de tabelgegevens pagineren, net als web serch-pagina
Krijg N nummers van records uit de tabel
We kunnen het aantal rijen van het resultaat beperken met behulp van de rownum-clausule
select * from
(
select val from mytable
) where rownum<=5
Als we het eerste of laatste record willen, dan willen we de volgorde van de clausule in de interne query die een resultaat geeft op basis van de bestelling.
Laatste vijf record:
select * from
(
select val from mytable order by val desc
) where rownum<=5
Eerste vijf record
select * from
(
select val from mytable order by val
) where rownum<=5
Krijg rij N tot en met M uit vele rijen (vóór Oracle 12c)
Gebruik de analytische functie 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 verwerkt dit gemakkelijker met OFFSET
en FETCH
.
Sommige rijen overslaan en dan wat nemen
In Oracle 12g +
SELECT Id, Col1
FROM TableName
ORDER BY Id
OFFSET 20 ROWS FETCH NEXT 20 ROWS ONLY;
In eerdere versies
SELECT Id,
Col1
FROM (SELECT Id,
Col1,
row_number() over (order by Id) RowNumber
FROM TableName)
WHERE RowNumber BETWEEN 21 AND 40
Enkele rijen van resultaat overslaan
In Oracle 12g +
SELECT Id, Col1
FROM TableName
ORDER BY Id
OFFSET 5 ROWS;
In eerdere versies
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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow