Home実験室 − No.0023


        No.0023(SQL)
        ROWNUM擬似列

■環境
  □OS: Windows XP Professional SP3
  □Oracle: Oracle Database 11g R2 (Standard)
  □OSログインユーザ: ORA_DBAグループ
  □Oracleユーザ: dicdic(実験用ユーザー) → 実験環境構築スクリプト

■実験
  0. 実験ユーザー「dicdic」でコネクトする。

SQL> conn dicdic/Oracle11g 接続されました。 SQL>



  1. 「TT01_学生」表には、3000件以上のデータが入っている。where条件を指定しないと結果がわぁぁぁっと
     表示されていらいらする。そんなときにrownumを使うとよい。

SQL> select 氏名 from TT01_学生 where rownum < 5; 氏名 ---------------------------------------- 窪田 信玄 須藤 貞次 黒田 比呂美 望月 淳三 SQL>



  2. rownum列は、Selectされたレコードセットに対してシーケンシャルに振られる数字の列で、
     「何でもいいからとりあえず○件」というときにとても便利。

SQL> select 氏名,rownum from TT01_学生 where rownum < 5; 氏名 ROWNUM ---------------------------------------- ---------- 窪田 信玄 1 須藤 貞次 2 黒田 比呂美 3 望月 淳三 4 SQL>



  3. 不等号の使い方ぐらい知っているよね....。でも私はよく間違える。どんなのかというと、

SQL> select 氏名,rownum from TT01_学生 where rownum <= 5; 氏名 ROWNUM ---------------------------------------- ---------- 窪田 信玄 1 須藤 貞次 2 黒田 比呂美 3 望月 淳三 4 岩田 昌信 5 SQL>



  4. 私はよくこんなことをしてしまうのです(恥)

SQL> select 氏名,rownum from TT01_学生 where rownum =< 5; select 氏名,rownum from TT01_学生 where rownum =< 5 * 行1でエラーが発生しました。: ORA-00936: 式がありません。 SQL>



  5. もちろん、ANDを使ってほかの絞り込み条件と併用できます。そう、「Select結果のレコードセットに対して」
     1から順に番号が振られていることに注意。だから便利。

SQL> select 氏名,rownum from TT01_学生 where rownum <= 5 AND 性別=1; 氏名 ROWNUM ---------------------------------------- ---------- 黒田 比呂美 1 菅沼 和奏 2 下川 里沙 3 島本 史織 4 蛭田 香奈 5 SQL>



  6. しかし擬似的な列ゆえか、こんなことはできなかったりする。エラーにならないのが納得いかないけど。

SQL> select 氏名,rownum from TT01_学生 where rownum >= 55 AND rownum <= 60 AND 性別=1; レコードが選択されませんでした。 SQL>



  7. これもだめ。でもやはりエラーにはならない。

SQL> select 氏名,rownum from TT01_学生 where rownum=55 AND 性別=1; レコードが選択されませんでした。 SQL>



  8. これもだめ。でもやはりエラーにはならない。rownum列に対しては、1から順に表示されるように
     問い合わせなければならないようだ。

SQL> select 氏名,rownum from TT01_学生 where rownum >= 5 AND 性別=1; レコードが選択されませんでした。 SQL>





    【PR】    Oracle実験室監修  『Oracleアーキテクチャ鳥瞰図』 PDF  (Oracleのアーキテクチャを一目で俯瞰できるイラスト)  


Home実験室 − No.0023

© 2011-2011   Amateur Laboratory of ORACLE
inserted by FC2 system