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

Hvordan begrænser jeg antallet af rækker, der returneres af en Oracle-forespørgsel efter bestilling?

Du kan bruge en underforespørgsel til dette som

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

Tag også et kig på emnet On ROWNUM og begrænsende resultater på Oracle/AskTom for mere information.

Opdater :For at begrænse resultatet med både nedre og øvre grænser bliver tingene lidt mere oppustede med

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;

(Kopieret fra specificeret AskTom-artikel)

Opdatering 2 :Fra og med Oracle 12c (12.1) er der en syntaks tilgængelig til at begrænse rækker eller starte ved forskydninger.

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

Se dette svar for flere eksempler. Tak til Krumia for tippet.



  1. NLS_CHARSET_NAME() Funktion i Oracle

  2. Omvendt streng ord for ord ved hjælp af SQL

  3. 4 måder at liste alle tabeller i en MariaDB-database

  4. Hurtig og beskidt til sløjfer i det umiddelbare vindue