SQL Server 2012からページング処理のクエリがシンプルに! ORDER BY句でOFFSETとFETCH NEXTを指定して実現
データベースから表示する件数だけを抽出するページング処理のときのクエリがシンプルに書けるようになりました。
ページング処理は、多量にあるデータの特定の件数だけを表示するために、select文で何件から何件までと指定する処理です。この処理を入れることで、データを一覧で見る画面などで、ページング処理を実装できます。
例えば、1ページあたり20件のデータが表示されるWebサービスの画面で、3ページ目を表示する場合、次のようなクエリを書く必要がありました。
select * from (
select *, ROW_NUMBER() over (order by Column1) rownum from Table1
) t
where rownum between 41 and 60
これはSQL Server 2008 R2までの場合です。サブクエリを使って、ROW_NUMBERで行番号を付与してから、その行番号で41行目から60行目と指定する必要がありました。
ところが、SQL Server 2012以降では、次のように書くことができます。
select * from Table1
order by Column1
offset 40 rows
fetch next 20 rows only
サブクエリはなくなり、order byの後ろにoffsetと書いて読み飛ばす行数を指定します。さらにfetch nextと書いて取得する行数を書いてあげるとページング処理が実装できます。
とても、シンプルなクエリになりました。