Oracle Database
Einschränken der von einer Abfrage zurückgegebenen Zeilen (Paginierung)
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