検索結果から範囲を指定して抽出するには、ROWNUMを使用します。
ROWNUMはどのテーブルにも標準で存在する列です。
サンプルソース
以下のようなテーブルを想定します。
CD | NAME | SCORE |
---|---|---|
001 | 佐藤 | 80 |
002 | 鈴木 | 76 |
003 | 田中 | 59 |
004 | 伊藤 | 95 |
005 | 山田 | 48 |
006 | 小林 | 67 |
007 | 池田 | 82 |
008 | 西川 | 78 |
例1)tbl_scoreテーブルから3件検索する
1 2 |
SELECT * FROM tbl_score WHERE ROWNUM <= 3 |
ソートしていないため抽出される値は不定です。
例2)scoreの昇順で並べて先頭から3件検索する
1 2 |
SELECT * FROM (SELECT * FROM tbl_score ORDER BY score) WHERE ROWNUM <= 3 |
例3)scoreの昇順で並べて3番目~5番目を検索する
1 2 3 4 |
SELECT * FROM (SELECT rownum as rn, A.* FROM (SELECT * FROM tbl_score ORDER BY score) A) WHERE rn between 3 and 5 |
例4)scoreの昇順で並べて5番目以降を検索する
1 2 3 4 |
SELECT * FROM (SELECT rownum as rn, A.* FROM (SELECT * FROM tbl_score ORDER BY score) A) WHERE rn >= 5 |
メモ
- rownumはORDER BYの前に採番されます。
- rownumは1からの連番です。
- rownumは1を含まないデータを検索することは不可なので、範囲検索をしたい場合は副問い合わせ型式にする必要があります。