Suche…


Erste N Zeilen mit Zeilenbegrenzungsklausel erhalten

Die FETCH Klausel wurde in Oracle 12c R1 eingeführt:

SELECT   val
FROM     mytable
ORDER BY val DESC
FETCH FIRST 5 ROWS ONLY;

Ein Beispiel ohne FETCH, das auch in früheren Versionen funktioniert:

SELECT * FROM (
   SELECT   val
   FROM     mytable
   ORDER BY val DESC
) WHERE ROWNUM <= 5;

Pagination 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 ;

Auf diese Weise können wir die Tabellendaten wie eine Web-Serch-Seite paginieren

Holen Sie sich N Anzahl Datensätze aus der Tabelle

Wir können mit rownum-Klauseln keine Zeilen aus dem Ergebnis einschränken

select * from 
( 
  select val from  mytable
) where rownum<=5

Wenn wir den ersten oder letzten Datensatz wünschen, möchten wir eine order by-Klausel in der inneren Abfrage, die ein auf der Reihenfolge basierendes Ergebnis liefert.

Letzte fünf Aufzeichnung:

select * from 
( 
    select val from  mytable order by val desc
) where rownum<=5

Die ersten fünf Platten

select * from 
( 
    select val from  mytable order by val
) where rownum<=5

Holen Sie sich Zeile N bis M aus vielen Zeilen (vor Oracle 12c).

Verwenden Sie die analytische Funktion 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 kann dies mit OFFSET und FETCH einfacher OFFSET .

Einige Zeilen überspringen, dann einige nehmen

In Oracle 12g +

SELECT Id, Col1
FROM TableName 
ORDER BY Id
OFFSET 20 ROWS FETCH NEXT 20 ROWS ONLY;

In früheren Versionen

SELECT Id, 
   Col1
 FROM (SELECT Id,
           Col1,
           row_number() over (order by Id) RowNumber
      FROM TableName)
WHERE RowNumber BETWEEN 21 AND 40

Einige Zeilen aus dem Ergebnis überspringen

In Oracle 12g +

SELECT Id, Col1
FROM TableName 
ORDER BY Id
OFFSET 5 ROWS;

In früheren Versionen

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow