データベース

【SQL】SELECT文で取得件数を指定して検索する(MySQL、Oracle、SQLServer)

DBを使っていて、テーブルの件数が多いけど中の構造をちょっと見てみたいケースがよく起こります。

そんな時便利なのが、SELECT文を使って「先頭から上位数件を取得する」方法です。

今回は自分が普段使っているMySQL、Oracle、SQLServerでの方法をここにメモしておきます。



先頭から上位数件のレコードを検索する

サンプル

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

テーブル名: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.co

MySQL

MySQLの場合、取得件数の指定には「LIMIT句」を使います。

-- ①上位4件取得する
SELECT * FROM SAMPLE_TABLE LIMIT 4;
IDNAMEAGEMAIL
1太郎39taro@sample.com
2次郎27jiro@sample.com
3三郎13sub@sample.com
4絵美30emi@sample.com
-- ②上位4件取得する(カラム指定)
SELECT NAME, AGE FROM SAMPLE_TABLE LIMIT 4;
NAME AGE
太郎 39
次郎 27
三郎 13
絵美 30
-- ③年齢(AGE)が若い順に上位4件取得する
SELECT main.* FROM (SELECT * FROM SAMPLE_TABLE OREDER BY AGE ASC) main LIMIT 4;
ID NAME AGE MAIL
6 香奈子 10 kana@sample.com
3 三郎 13 sub@sample.com
5 美香 20 mika@sample.com
2 次郎 27 jiro@sample.co

Oracle

Oracleの場合は「WHERE句」の中で「rownum」を検索条件に指定して取得します。

-- ①上位4件取得する
SELECT * FROM SAMPLE_TABLE WHERE rownum <= 4;
-- ②上位4件取得する(カラム指定)
SELECT NAME, AGE FROM SAMPLE_TABLE WHERE rownum <= 4;
-- ③年齢(AGE)が若い順に上位4件取得する
SELECT main.* FROM (SELECT * FROM SAMPLE_TABLE OREDER BY AGE ASC) main WHERE main.rownum <= 4;

SQLServer

SQLServerの場合、カラムの先頭で「TOP」を指定することで実現できます

-- ①上位4件取得する
SELECT TOP 4 * FROM SAMPLE_TABLE;
-- ②上位4件取得する(カラム指定)
SELECT TOP 4 NAME, AGE FROM SAMPLE_TABLE;
-- ③年齢(AGE)が若い順に上位4件取得する
SELECT TOP 4 * FROM SAMPLE_TABLE OREDER BY AGE ASC;

さらに「TOP 数値 PERCENT」と記載することで、上位何パーセントを検索することも可能です。

-- ④年齢(AGE)が若い順に上位50%を取得する
SELECT TOP 50 PERCENT * FROM SAMPLE_TABLE OREDER BY AGE ASC;
ID NAME AGE MAIL
6 香奈子 10 kana@sample.com
3 三郎 13 sub@sample.com
5 美香 20 mika@sample.com

以上です。

-データベース