PostgreSQLやMySQLで使えるLimit句をOracle SQLで使う方法 | 株式会社アースリンク

2017年6月13日

PostgreSQLやMySQLで使えるLimit句をOracle SQLで使う方法

 

 

みなさんこんにちは自称エリート(見習い)です。
先日研修中にPostgreSQLを使用している際、
SELECT文で取得した行数の制限をLIMIT句で行うことができることを知りました。

 

現在Oracle Master Bronzeの取得を目指している私ですが、
「そういえばOracleで取得件数の制限ってLIMIT句なんてあったかな」と思い調べてみました。
結論から言うとOracle SQLでは使えません

 

という訳でOracleでLIMIT句に代わる構文を探してみました。

 

 

 

 

PostgreSQL / MySQLでのLIMIT句の使用方法

まずはPostgreやMySQLで使えるLIMIT句の構文のおさらいを。
以下のTest_Empテーブルを参考にします。

 

Test_Emp

Emp_No Emp_Name
1 相澤
2 秋元
3 石井
4 岩本
5 牛田
6 江原
7 大田
8 沖本
9 金森
10 木田

 

 

【SQL例】

SELECT * FROM Test_Emp LIMIT 5;

 

Test_Emp

Emp_No Emp_Name
1 相澤
2 秋元
3 石井
4 岩本
5 牛田

 

LIMIT句は必ずSQL文の最後に入れるというのが特徴ですね。
ORDER BY句よりも後です。

 

 

 

Oracle SQLでの行数の上限設定(ROWNUM関数)

それではOracleの場合のSQL文です。
まず上記同様下記のテーブルを用意します。

 

Test_Emp

Emp_No Emp_Name
1 相澤
2 秋元
3 石井
4 岩本
5 牛田
6 江原
7 大田
8 沖本
9 金森
10 木田

 

 

【SQL例】

SELECT * FROM Test_Emp WHERE ROWNUM <= 5;

 

Test_Emp

Emp_No Emp_Name
1 相澤
2 秋元
3 石井
4 岩本
5 牛田

 

Oracleの場合はROWNUM擬似列を使用します。
ただしこのROWNUMはORDER BY句で正しくソートすることができません
ROWNUMで取得した結果に対してソートを行うので、
LIMIT句の様にソートしてからの取得ができないからです。

 

 

 

 

 

ROWNUM擬似列で行数制限しながらソートしたい場合

なので、結果に対してソートを行いたい場合、
副問合せをしてその中でORDER BY句を使用します。

 

【SQL例】

SELECT * ROWNUM FROM
(SELECT * FROM Test_Emp ORDER BY Emp_No DESC)
WHERE ROWNUM <= 5

 

Test_Emp

ROWNUM Emp_No Emp_Name
1 5 牛田
2 4 岩本
3 3 石井
4 2 秋元
5 1 相澤

 

因みにROWNUMの条件式として「>=5」や「>5」はエラーにはなりませんが意味がないので注意してください。

 

 

 

 

LIMIT句って便利ですね。

Contact
お問い合わせ

電話番号0120 - 889 - 236

受付時間:平日 9:00-18:00