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