Home実験室 − No.0056


        No.0056(SQL)
        値判定と条件分岐(CASE、DECODE関数)

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

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

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



  1. 【CASE文】
     Select文の中に、CASE文もどきを挿入することができる。

SQL> Select 氏名,性別,CASE 性別 When 1 Then 'おんな' When 2 Then 'おとこ' END from TT01_学生 Where rownum < 10; 氏名 性別 CASE性 ---------------------------------------- ---------- ------ 小室 綾乃 1 おんな 浜野 響 1 おんな 宮野 雄二郎 2 おとこ 大西 勝美 1 おんな 畠山 更紗 1 おんな 五島 未羽 1 おんな 迫田 幸三郎 2 おとこ 田川 幸雄 2 おとこ 松沢 幸夫 2 おとこ 9行が選択されました。 SQL>



  2. CASE文の中に出現パターンが網羅できていない場合、NULLが返される。

SQL> Select 氏名,血液型,CASE 血液型 When 1 Then 'A型' When 2 Then 'B型' END from TT01_学生 Where rownum < 13; 氏名 血液型 CAS ---------------------------------------- ---------- --- 小室 綾乃 3 浜野 響 1 A型 宮野 雄二郎 4 大西 勝美 1 A型 畠山 更紗 1 A型 五島 未羽 2 B型 迫田 幸三郎 1 A型 田川 幸雄 2 B型 松沢 幸夫 2 B型 福原 和男 1 A型 植木 誠司 3 長田 信彦 4 12行が選択されました。 SQL>



  3. 血液型なら全パターンを網羅してCASE文に列挙することは可能だが、そうはいかない場合もある。
     しかしNullが返ってきてはカッコ悪いので代替文字を表示できる。ELSEが使えるのだ。
     O型とAB型の人には失礼だが、たとえばの例として下のような書き方をする。

SQL> Select 氏名,血液型,CASE 血液型 When 1 Then 'A型' When 2 Then 'B型' else 'その他' END from TT01_学生 Where rownum < 13; 氏名 血液型 CASE血 ---------------------------------------- ---------- ------ 小室 綾乃 3 その他 浜野 響 1 A型 宮野 雄二郎 4 その他 大西 勝美 1 A型 畠山 更紗 1 A型 五島 未羽 2 B型 迫田 幸三郎 1 A型 田川 幸雄 2 B型 松沢 幸夫 2 B型 福原 和男 1 A型 植木 誠司 3 その他 長田 信彦 4 その他 12行が選択されました。 SQL>



  4. 【DECODE関数】
     CASE文と同じような役割を果たす関数としてDECODE関数というのがある。
     CASE文と比較して、とてもシンプルで便利だが、引数が延々と続くと、ワケがわからなくなる可能性があるので注意。

SQL> Select 氏名,血液型,DECODE(血液型,1,'A型',2,'B型') from TT01_学生 Where rownum < 13; 氏名 血液型 DEC ---------------------------------------- ---------- --- 小室 綾乃 3 浜野 響 1 A型 宮野 雄二郎 4 大西 勝美 1 A型 畠山 更紗 1 A型 五島 未羽 2 B型 迫田 幸三郎 1 A型 田川 幸雄 2 B型 松沢 幸夫 2 B型 福原 和男 1 A型 植木 誠司 3 長田 信彦 4 12行が選択されました。 SQL>



  5. DECODE関数の場合、elseケースは、引数の最後になる。何でもかんでも引数に盛り込んでいる感があり、ややこしいが。

SQL> Select 氏名,血液型,DECODE(血液型,1,'A型',2,'B型','その他') from TT01_学生 Where rownum < 13; 氏名 血液型 DECODE ---------------------------------------- ---------- ------ 小室 綾乃 3 その他 浜野 響 1 A型 宮野 雄二郎 4 その他 大西 勝美 1 A型 畠山 更紗 1 A型 五島 未羽 2 B型 迫田 幸三郎 1 A型 田川 幸雄 2 B型 松沢 幸夫 2 B型 福原 和男 1 A型 植木 誠司 3 その他 長田 信彦 4 その他 12行が選択されました。 SQL>





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


Home実験室 − No.0056

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