OracleでのLIMITの記述あれこれ
こんにちは。Oracle挑戦中の松田です。
今までまったく触ったことのなかったOracleに初めて触れ、頭が混乱中なので備忘録がわりにブログに書き留めておきます。
特に悩んだのがLIMIT関連。
何故かOracleってLIMITが無いんですね。LIMITに慣れていると、なぜ存在していないのかが不思議でしょうがありません。ほんとどうしてなんでしょ?
・memberテーブルから LIMIT 10 で結果取得
基本はこれを使って結果セットの切り分けをするらしい。
・memberテーブルから LIMIT 10, OFFSET 5 で結果取得
・memberテーブルから、グループ(category)ごとに最も年齢(age)の高い人をそれぞれ取得
後にそのランキングが1位のものを rn.rank = 1 で指定して取ってくる。
とりあえずこれだけ。
もうここまででものすごく頭が痛いです。
正直まったくピンと来てませんが、最後の例はMySQLだと記述方法がパッっと思いつかないので覚えられれば便利なのかも。
実際に仕事で使ったテーブルを架空のテーブルに置き換えて記述しなおしているので、実際動くかどうかは若干不安です。
今までまったく触ったことのなかったOracleに初めて触れ、頭が混乱中なので備忘録がわりにブログに書き留めておきます。
特に悩んだのがLIMIT関連。
何故かOracleってLIMITが無いんですね。LIMITに慣れていると、なぜ存在していないのかが不思議でしょうがありません。ほんとどうしてなんでしょ?
・memberテーブルから LIMIT 10 で結果取得
- SELECT
* - FROM
member - WHERE
ROWNUM <= 10
基本はこれを使って結果セットの切り分けをするらしい。
・memberテーブルから LIMIT 10, OFFSET 5 で結果取得
- SELECT
* - FROM
( SELECT id, category, age, ROWNUM line FROM member ) - WHERE
line BETWEEN 6 AND 16
・memberテーブルから、グループ(category)ごとに最も年齢(age)の高い人をそれぞれ取得
- SELECT
* - FROM
( SELECT id, age, category, rank() OVER (PARTITION BY category ORDER BY age DESC) as rank FROM member ) rn - WHERE
rn.rank = 1
後にそのランキングが1位のものを rn.rank = 1 で指定して取ってくる。
とりあえずこれだけ。
もうここまででものすごく頭が痛いです。
正直まったくピンと来てませんが、最後の例はMySQLだと記述方法がパッっと思いつかないので覚えられれば便利なのかも。
実際に仕事で使ったテーブルを架空のテーブルに置き換えて記述しなおしているので、実際動くかどうかは若干不安です。
コメント
コメントフォーム
トラックバックURI
最近の記事
システム開発エンジニア募集! [2012年02月03日 : 小林有佳]
OpenVPNで細々便利な設定 [2012年01月31日 : 門脇優児]
【iOS】Viewの開発・デバッグに役立つ色々 [2012年01月23日 : 中川善樹]
PHPDocumentorの利用方法まとめ [2012年01月19日 : 笹亀弘]
Google Chart Toolsを使ってサイトマップを描こう! [2011年12月21日 : 志田仁美]
stumpwm設定v2 [2011年12月19日 : 門脇優児]
Mashup Awards 7の授賞式が行われました [2011年12月16日 : 中川善樹]
社員旅行に行きました [2011年12月12日 : 大橋寛子]
iCloud風のアイコンを作成する(Fireworks) [2011年12月07日 : 和田記光]
iScroll4でネイティブに近いスマホ向けHTMLページを作成する [2011年12月02日 : 松田惇]













Oracleの場合、取得した結果セットの並びは保証されていないので、
order byで並び替えておかないと、正しく取得できない目にあいますよ。
ま、まじっすかっ!
それも知らなかったです。。ありがとうございました。
まだまだ奥が深いです・・・。