【Oracle】OFFSETとFETCHを使用して行数を限定し取得する方法

Oracleデータベースを使用して大きなデータセットから一部のデータを取得する際、OFFSET/FETCH句を活用することが効果的です。この記事では、OFFSETとFETCHを使ったデータのページング処理について詳しく解説します。

OFFSET/FETCH句とは?

OFFSET/FETCH句は、クエリ結果の中から特定の行をスキップして取得するためのSQL構文です。主にページング処理で利用され、結果セットの一部を制限して取得することができます。

基本的な使用方法

SELECT 列1, 列2, ...
FROM テーブル名
ORDER BY 列1
OFFSET n ROWS FETCH NEXT m ROWS ONLY;

この構文では、OFFSET n ROWSで最初からn行目までの行をスキップし、その後にFETCH NEXT m ROWS ONLYで次のm行を取得します。重要なのは、ORDER BY句が必須であることです。

具体例

最初の10件を取得する場合

SELECT *
FROM EMPLOYEES
ORDER BY EMPLOYEE_ID
FETCH NEXT 10 ROWS ONLY;

2ページ目の10件を取得する場合

SELECT *
FROM EMPLOYEES
ORDER BY EMPLOYEE_ID
OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;

3ページ目の10件を取得する場合

SELECT *
FROM EMPLOYEES
ORDER BY EMPLOYEE_ID
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;

注意点

  • OFFSETが0の場合は省略可能ですが、FETCH NEXTは常に必要です。
  • ページング処理を行う際は、適切なインデックスを利用してパフォーマンスを最適化することが推奨されます。

まとめ

OFFSET/FETCH句を利用することで、Oracleデータベースで効率的に大きなデータセットを扱うことができます。ページング処理を実装する際には、この構文を理解し適切に活用することが重要です。