oracle

Oracle rownumとは

ROENUM疑似列

rownum疑似列といいます。rowidと勘違いしそうですが、こちらはselectの結果セットに対し、1から順番に採番してくれる「疑似列」です。もっとも利用されている例の一つに、SELECTの結果件数を制限する事に使ったします。

SQL> select * from shain;

       SNO SNAME                JYOUSHI_SNO
---------- -------------------- -----------
       900 空山
       800 空木
       100 西海                         900
       200 西山                         100
       300 西川                         200
       400 北海                         900
       500 大西                         100
       600 東海                         900
       700 東山                         600

9行が選択されました。

-- 無作為に2件だけ出力するような場合は以下でだいじょうぶ
-- 大量のデータを保持しているようなテーブルに対し、サクッと
-- どんなデータ入っているのかな?というシーンに活躍します
-- fetch first xx rows only という書き方もありますが、こちらの方が
-- お手軽ですよね。何よりOracleの古いバージョンはfetch first xx rows only
-- の記載が使えないです。(たしか11g以前は利用できない)
--
SQL> select rownum,sno,sname from shain where rownum < 3;

    ROWNUM        SNO SNAME
---------- ---------- --------------------
         1        900 空山
         2        800 空木

SQL>
--
-- ある項目にて並べ替えた結果上位XX件という場合は注意が必要です。
-- 以下のような記載では想定の結果になりません。
--
SQL> select rownum,s.SNO,s.SNAME from shain s where rownum < 3 order by sno
  2  ;

    ROWNUM        SNO SNAME
---------- ---------- --------------------
         2        800 空木
         1        900 空山

--
-- 副問い合わせで並び替えを行った後にrownumを利用しないといけません。
--
SQL> select rownum,w.* from
  2  (
  3     select s.SNO,s.SNAME from shain s order by sno
  4  ) w
  5  where rownum < 3
  6  ;

    ROWNUM        SNO SNAME
---------- ---------- --------------------
         1        100 西海
         2        200 西山

SQL>

rowid疑似列はこちら

スポンサーリンク