新着情報

Home > 開発者ブログ > intra-mart > PostgreSQLやMySQLで使えるLimit句をOracle SQLで使う方法

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句って便利ですね。

2017年06月13日(火)

テレマーケティングシステムsakuraトライアル

コールセンターシステム sakuraCTI

資料請求

お問合わせ

コラム

用語集

開発者ブログ

イントラマート

Sakuraテレマーケティングシステム

 

 

営業リスト

インフラソリューションのご案内

導入事例

テレアポノウハウ本プレゼントキャンペーン

認証マーク

アースリンクは
プライバシーマークを
取得しています。

プライバシーポリシー


SSLとは?

当サイトでは、実在性の証明とプライバシー 保護のためSSLサーバ証明書を使用しSSL 暗号化通信を実現しています。

このページの先頭へ