【DB2】指定した数だけレコードを読み飛ばす(OFFSETオプション)

OFFSETオプション

DB2は指定した数だけレコードを読み飛ばすためには、以前ではROW_NUMBER()関数が用いられてきました。DB2 バージョン 11.1よりSQL標準のOFFSETがサポートされました。そこで以前から使用されているROW_NUMBER()とOFFSETの使用方法と比較についてみていきましょう。

今回はDB2の指定した数だけレコードを読み飛ばすOFFSETオプションについてお勉強しましょう!

目次

ROW_NUMBER()関数の使い方

ROW_NUMBER()は、over句でソート順を指定してwhere句では取得する範囲を限定するために使用します。

ROW_NUMBER()の構文

ROW_NUMBER()の構文は以下の通りです。

SELECT * FROM ( SELECT table.* , ROW_NUMBER() OVER (ORDER BY ソート順) num FROM table) tmp WHERE num between 範囲 ORDER BY ソート順

ROW_NUMBER()の使用例

たとえば、数字(number)とその読み方(yomikata)が格納されているyomikatatableの5~10番目を取得するには以下のようにします。

SELECT * FROM ( SELECT yomikatatable.* , ROW_NUMBER() OVER (ORDER BY number ASC) num FROM yomikatatable) tmp WHERE num between5 and 10 ORDER BY number ASC

結果は以下の通りです。

number yomikata
-------------
5      go
6      roku
7      nana
8      hachi
9      kyu
10     jyu

OFFSETオプションの使い方

OFFSETオプションの構文

OFFSETオプションは何レコード取得するかを指定する「FETCH FIRST m ROWS ONLY」とともに使用されます。

nレコード飛ばしてmレコード取得するためには以下の構文を使用します。

SELECT * FROM table OFFSET n ROWS FETCH FIRST m ROWS ONLY ORDER BY ソート順

OFFSETの使用例

たとえば、数字(number)とその読み方(yomikata)が格納されているyomikatatableの5~10番目を取得するには4レコード飛ばして6レコード取得すればよいので以下のようになります。

SELECT * FROM yomikatatable OFFSET 4 ROWS FETCH FIRST 6 ROWS ONLY ORDER BY number ASC;

結果は以下の通りです。

number yomikata
-------------
5      go
6      roku
7      nana
8      hachi
9      kyu
10     jyu

まとめ

ROW_NUMBER()関数が用いられてきました。Db2 バージョン 11.1よりサポートされているOFFSETと以前から使用されているROW_NUMBER()の使用方法と比較についてみてみました。ぜひ使ってみてください。

今回はDB2の指定した数だけレコードを読み飛ばすOFFSETオプションについてお勉強しました!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次