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だと記述方法がパッっと思いつかないので覚えられれば便利なのかも。
実際に仕事で使ったテーブルを架空のテーブルに置き換えて記述しなおしているので、実際動くかどうかは若干不安です。
コメント
コメントフォーム
トラックバック
最近の記事
- もうすぐ健康診断があるんだ・・・ [2010年09月02日 : 阿部恵]
- Photoshopで壁紙を作りながら、基本的な使い方を覚える [2010年09月01日 : 鴨田健次]
- はじめての共同作業 Canvas編 (node.js + websocket) [2010年09月01日 : 中川善樹]
- 「PHP×Flex(後編)」PHPテクニカルセミナー(無料)第4弾の募集を開始しました!! [2010年08月26日 : 和田記光]
- 【HTML5】Canvasでお絵かきしてみた(前編) [2010年08月25日 : 橋本章史]
- MacにgroongaのMySQL用ストレージエンジン [2010年08月23日 : 笹亀弘]
- Appleのサイトで見たiPhone4をFireworksで描いてみました-1/2 [2010年08月19日 : 和田記光]
- iPad版の会社紹介を作ってみました [2010年08月19日 : 小林有佳]
- iPhoneアプリ開発開始時に気をつけるべきファイルの取り扱い (2) [2010年08月19日 : 亀本大地]
- symfonyセミナー動画無料公開! [2010年08月13日 : 岡本雄樹]



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