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>