Oracle Database
Limitazione delle righe restituite da una query (impaginazione)
Ricerca…
Ottieni le prime N righe con clausola di limitazione delle righe
La clausola FETCH
è stata introdotta in Oracle 12c R1:
SELECT val
FROM mytable
ORDER BY val DESC
FETCH FIRST 5 ROWS ONLY;
Un esempio senza FETCH che funziona anche nelle versioni precedenti:
SELECT * FROM (
SELECT val
FROM mytable
ORDER BY val DESC
) WHERE ROWNUM <= 5;
Impaginazione 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 ;
in questo modo possiamo impaginare i dati della tabella, proprio come la pagina web serch
Ottieni N numeri di record dalla tabella
Non possiamo limitare il numero di righe dal risultato usando la clausola rownum
select * from
(
select val from mytable
) where rownum<=5
Se vogliamo il primo o l'ultimo record, vogliamo la clausola order by nella query interna che darà il risultato in base all'ordine.
Last Five Record:
select * from
(
select val from mytable order by val desc
) where rownum<=5
First Five Record
select * from
(
select val from mytable order by val
) where rownum<=5
Ottieni la riga da N a M da più righe (prima di Oracle 12c)
Usa la funzione analitica 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 lo gestisce più facilmente con OFFSET
e FETCH
.
Saltare alcune righe e poi prenderne un po '
In Oracle 12g +
SELECT Id, Col1
FROM TableName
ORDER BY Id
OFFSET 20 ROWS FETCH NEXT 20 ROWS ONLY;
Nelle versioni precedenti
SELECT Id,
Col1
FROM (SELECT Id,
Col1,
row_number() over (order by Id) RowNumber
FROM TableName)
WHERE RowNumber BETWEEN 21 AND 40
Saltare alcune righe dal risultato
In Oracle 12g +
SELECT Id, Col1
FROM TableName
ORDER BY Id
OFFSET 5 ROWS;
Nelle versioni precedenti
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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow