前回の「【SQL】SELECT文で取得件数を指定して検索する(MySQL、Oracle、SQLServer)」という記事を来ました。
引き続き、今回ははSELECT文を使って「何件目から何件目まで」のように表の間をデータを取得する方法をご紹介します。
何件目から何件目までのデータを検索する
サンプルデータ
検索対象のサンプルとして以下のテーブルを使います。
テーブル名:SAMPLE_TABLE
ID | NAME | AGE | |
---|---|---|---|
1 | 太郎 | 39 | taro@sample.com |
2 | 次郎 | 27 | jiro@sample.com |
3 | 三郎 | 13 | sub@sample.com |
4 | 絵美 | 30 | emi@sample.com |
5 | 美香 | 20 | mika@sample.com |
6 | 香奈子 | 10 | kana@sample.com |
MySQL
MySQLの場合、取得件数の指定には「LIMIT 先頭番号(0始まり), 取得する件数」を使います。
-- 2件目から4件目までのデータを取得する
SELECT * FROM SAMPLE_TABLE LIMIT 1, 3;
ID | NAME | AGE | |
---|---|---|---|
2 | 次郎 | 27 | jiro@sample.com |
3 | 三郎 | 13 | sub@sample.com |
4 | 絵美 | 30 | emi@sample.com |
Oracle
Oracleの場合は間のデータを取ることが難しいです。
無理くり実装すると、まず対象テーブルのカラムに対して「rownum」で連番の番号(num)を振り、その番号に対して「2件目から4件目」の条件を指定します。
-- 2件目から4件目までのデータを取得する
SELECT * FROM
(SELECT
rownum num
, SAMPLE_TABLE.*
FROM
SAMPLE_TABLE) main
WHERE
main.num >= 2
AND main.num <= 4;
ID | NAME | AGE | |
---|---|---|---|
2 | 次郎 | 27 | jiro@sample.com |
3 | 三郎 | 13 | sub@sample.com |
4 | 絵美 | 30 | emi@sample.com |
SQLServer
SQLServerもOracle同様、最初に表の連番の番号を振って件数を指定します。
連番には「ROW_NUMBER()」を使います。
-- 2件目から4件目までのデータを取得する
SELECT * FROM
(SELECT ROW_NUMBER() OVER(ORDER BY ID ASC) num, SAMPLE_TABLE.* FROM SAMPLE_TABLE) main
WHERE main.num >= 2 AND main.num <= 4;
-- または以下の書き方でもOK
SELECT * FROM
(SELECT TOP 4 ROW_NUMBER() OVER(ORDER BY ID ASC) num, SAMPLE_TABLE.* FROM SAMPLE_TABLE) main
WHERE main.num >= 2 ;
ID | NAME | AGE | |
---|---|---|---|
2 | 次郎 | 27 | jiro@sample.com |
3 | 三郎 | 13 | sub@sample.com |
4 | 絵美 | 30 | emi@sample.com |