11章高度な検索

この本は検索に関する本で、これまでの章でも検索を扱ってきています。結合、WHERE句、グループ化手法を使って必要な結果を検索して返す、さまざまな種類のクエリを紹介しました。しかし、検索操作の中には、他の検索とは一線を画し、検索について異なる考え方を示すものもあります。例えば、結果セットを1ページずつ表示するような場合です。その際の問題の半分は、表示するレコード全体を特定(検索)することです。残りの半分は、ユーザが画面上のレコードを行き来する際に、次に表示するページを繰り返し検索することです。最初はページネーションが検索の問題であるとは思わないかもしれませんが、検索の問題として捉え、検索の問題として解決できます。本章では、このような種類の検索を扱います。

レシピ11.1 結果セットをページネーションする

問題

結果セットをページネーション(スクロール)したい。例えば、EMPテーブルから1番目から5番目の給与を返し、次にその次の5つを返したい。目標は、一度に5つのレコードを表示し、「次」ボタンをクリックするたびに次にスクロールできるようにすることである。

解決策

SQLには最初、最後、次という概念がないので、対象の行に順番を付けなければいけません。順番を付けるだけで、特定の範囲のレコードを正確に返すことができます。

ウィンドウ関数ROW_NUMBER OVERを使って順番を付け、返したいレコードの範囲をWHERE句で指定します。例えば、1行目から5行目までを返すには次のようにします。

select sal
  from (
select row_number() over (order by sal) as rn,
       sal
  from emp
       ) x
 where ...

Get SQLクックブック 第2版 ―データベースエキスパート、データサイエンティストのための実践レシピ集 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.