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オプションについてお勉強しました!