FETCH

Oracle 12c以降で利用可能、クエリの返却行数を制限しページングを実装する構文で、MySQLのLIMITに相当します。

完全な構文

[ OFFSET offset ROWS ]
FETCH NEXT [ row_count | percent PERCENT ] ROWS [ ONLY | WITH TIES ]Code language: CSS (css)
1. OFFSET句(省略可)

役割:先頭N行を読み飛ばす、ページング処理に使用します。

  • 省略した場合オフセットは0、1行目からデータを取得します
  • オフセットが負数の場合:0として扱われます
  • オフセットがNULLまたは総行数を超える場合:1行も返却されません
  • オフセットに小数が含まれる場合:小数部は切り捨て、整数部分のみ使用されます
2. FETCH句

役割:返却する行数を指定、件数指定とパーセント指定の2種類に対応。

  • ONLY:指定した行数だけ取得(最もよく使われる)
  • WITH TIES:最後の行と並び順の値が同じレコードをまとめて取得。ORDER BYと組み合わせて使用する必要があります

サンプルコード

nameを降順にし先頭5件を取得
SELECT *
FROM student
ORDER BY name DESC
FETCH NEXT 5 ROWS ONLY;
先頭2行を取得
select * from student fetch next 2 rows only;Code language: JavaScript (javascript)

実行結果:テーブルの先頭2件 jimlisa が返却されます。

ページング:3行スキップ、4行読み込み(2ページ目、1ページ4件)
SELECT *
FROM student
ORDER BY id
OFFSET 3 ROWS
FETCH NEXT 4 ROWS ONLY;
パーセントで取得、全体の10%を抽出
SELECT *
FROM student
FETCH NEXT 10 PERCENT ROWS ONLY;
WITH TIES の使い方(同順位を含む)
SELECT *
FROM student
ORDER BY score DESC
FETCH NEXT 3 ROWS WITH TIES;

3位と同じ点数のレコードが複数存在する場合、該当するすべての行が取得され、結果件数が3件を超える可能性があります。

FETCH

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です