スポンサードリンク

OracleでLimit句を使ったかのようなSQLを実行しよう

 Oracle でも MySQL や PostgreSQL みたく、SQL で LIMIT句が使えないかな? とちょっと調べてみました。

 結論としては、Oracle では LIMIT句そのものは使えないのですが、ちょいとSQL文を工夫することで、同様の結果が得る事ができました。

というわけで、メモメモφ(..)。

EMPNOENAME
7369SMITH
7499ALLEN
7521WARD
7566JONES
7654MARTIN
7698BLAKE
7782CLARK
7788SCOTT
7839KING
7844TURNER
7876ADAMS
7900JAMES
7902FORD
7934MILLER

 例えば、左のような EMP テーブルがあったとします。このデータから、EMPNO の大きい方から2行を取得したいわけですよ。

これが MySQL や PostgreSQL なら、

  select * from EMP order by EMPNO desc limit 2

で一発というシュチュエーションです。

 さて、じゃぁ Oracle ではどうやるんだ? て話しなんですが、ROWNUM というカラム(?)を使います。上記の SQL を Oracle 用に書き直すと、

となり、帰ってくる結果は

ROWNUMEMPNOENAME
17934MILLER
27902FORD

のようになります。

 ここで、元のテーブルに無い ROWNUM ってカラムは何なんだ? どこから出てきた? という疑問が湧きますが、「Oracle がクエリーの結果に自動で追加してくれる行番号」 みたいな理解でいいと思います。

 お次はもうちょっと難しく、EMPNO の大きい方から3行目と4行目を取得しましょう。SQL は以下のように変わります。

そして結果の方は、

ROWNUMRNEMPNOENAME
137900JAMES
247876ADAMS

となります。内側の select文で帰ってくる結果セットの ROWNUM に、別名を付けて情報を保持させているのがミソですね。

ちなみに、 MySQL や PostgreSQL だと、

  select * from EMP order by EMPNO desc limit 3,2

という SQL文になります。

 ただ Oracle はその仕様において、order by を使用していないクエリーの結果の行の並び順は保証していないので、厳密に並び順が重要となる場合は、

のようにしておいた方がいいのかも。

なお動作確認は、Wondows Server 2008 上の Oracle 10g(10.2.0.1)にて行いました。

参照リンク
 ・OracleではLimit句が使えない | yukotan hour
 ・Oracleでlimit offsetもどき - よねのはてな

スポンサードリンク
コメント
Verify your Comment
Previewing your Comment

This is only a preview. Your comment has not yet been posted.

Working...
Your comment could not be posted. Error type:
Your comment has been posted. Post another comment

The letters and numbers you entered did not match the image. Please try again.

As a final step before posting your comment, enter the letters and numbers you see in the image below. This prevents automated programs from posting comments.

Having trouble reading this image? View an alternate.

Working...

コメントを投稿

プロフィール


  • 書いてる人:夢界 陸

    名古屋在住のおっさん。
    プログラミングやガジェットの話など、 日々の興味を徒然と綴っています。



    Twitterやってます @mukairiku



    運営サイト
    www.mukairiku.net

アクセスランキング


ブログ内検索

Licenses

  • Creative Commons License

OTHER


  • このブログのはてなブックマーク数

    ブログパーツ
Blog powered by TypePad

スポンサードリンク