Oracle Database
クエリによって返される行の制限(ページネーション)
サーチ…
行制限句で最初のN行を取得する
FETCH
句は、Oracle 12c R1で導入されました。
SELECT val
FROM mytable
ORDER BY val DESC
FETCH FIRST 5 ROWS ONLY;
以前のバージョンでも動作するFETCHを使用しない例:
SELECT * FROM (
SELECT val
FROM mytable
ORDER BY val DESC
) WHERE ROWNUM <= 5;
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 ;
このようにして、Webデータページと同様にテーブルデータをページ設定することができます
テーブルからN個のレコードを取得する
rownum句を使って結果から行の数を制限することができます
select * from
(
select val from mytable
) where rownum<=5
最初または最後のレコードが必要な場合は、順序に基づいて結果を返す内部クエリのorder by節が必要です。
最後の5つのレコード:
select * from
(
select val from mytable order by val desc
) where rownum<=5
最初の5つのレコード
select * from
(
select val from mytable order by val
) where rownum<=5
多くの行からN〜M行を取得する(Oracle 12cより前)
分析関数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では、これをOFFSET
とFETCH
より簡単に処理します。
いくつかの行をスキップしてから
Oracle 12g +では、
SELECT Id, Col1
FROM TableName
ORDER BY Id
OFFSET 20 ROWS FETCH NEXT 20 ROWS ONLY;
以前のバージョン
SELECT Id,
Col1
FROM (SELECT Id,
Col1,
row_number() over (order by Id) RowNumber
FROM TableName)
WHERE RowNumber BETWEEN 21 AND 40
結果からいくつかの行をスキップする
Oracle 12g +では、
SELECT Id, Col1
FROM TableName
ORDER BY Id
OFFSET 5 ROWS;
以前のバージョン
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
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow