Oracle
 sql >> Database >  >> RDS >> Oracle

Come posso limitare il numero di righe restituite da una query Oracle dopo l'ordine?

Puoi usare una sottoquery per questo tipo

select *
from  
( select * 
  from emp 
  order by sal desc ) 
where ROWNUM <= 5;

Dai un'occhiata anche all'argomento Su ROWNUM e sulla limitazione dei risultati in Oracle/AskTom per ulteriori informazioni.

Aggiorna :Per limitare il risultato sia con i limiti inferiore che superiore, le cose si gonfiano un po' di più con

select * from 
( select a.*, ROWNUM rnum from 
  ( <your_query_goes_here, with order by> ) a 
  where ROWNUM <= :MAX_ROW_TO_FETCH )
where rnum  >= :MIN_ROW_TO_FETCH;

(Copiato dall'articolo AskTom specificato)

Aggiornamento 2 :A partire da Oracle 12c (12.1) è disponibile una sintassi per limitare le righe o iniziare con offset.

SELECT * 
FROM   sometable
ORDER BY name
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;

Vedi questa risposta per altri esempi. Grazie a Krumia per il suggerimento.