【SQL】SELECT文で何件目から何件目まで指定して検索する(MySQL、Oracle、SQLServer)

前回の「【SQL】SELECT文で取得件数を指定して検索する(MySQL、Oracle、SQLServer)」に引き続き、今度はSELECT文を使って「何件目から何件目まで」のように表の間をデータを取得する方法をご紹介します。

何件目から何件目までのデータを検索する

検索対象のサンプルとして以下のテーブルを使います。

テーブル名:SAMPLE_TABLE

ID NAME AGE MAIL
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 MAIL
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;

 

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 ;

 



投稿日:2019-08-05    更新日:2019-08-05

[スポンサーリンク]

  
サイト内検索
プロフィール

プロフィール

[Name : じゃぶじゃぶ(@jbjb_2019)]
都内で社内SEをしているおじさん。
仕事で得られる知識だけでは限界を感じ、 WEBの勉強がてらITブログを開始。
サーバからWEBサイトまでフルスクラッチで開発しました。
現在は勉強のモチベーションを保つために活用中。
興味があることを雑記的に書いていきます。

[スポンサーリンク]

[スポンサードリンク]

最近の記事