ORACLE SQL リファレンス(逆引き)

ORACLE SQL リファレンス

Web oracle.se-free.com
IF文のような条件式を使う(CASE WHEN〜、DECODE)
スポンサード リンク

SQLの中でIF文のような条件式を使うなら、CASE WHEN 〜 または DECODE関数を使用します

CASE 式
  WHEN 条件1 THEN 値1
  WHEN 条件2 THEN 値2
  ・
  ・
  ・
  WHEN 条件n THEN 値n
  ELSE デフォルト値
END
式が条件1に一致(TRUEと評価)したら値1を戻し、条件1に一致せず条件2に一致したら値2を戻し、このように式と条件が一致する最初の値が戻されます。

どの条件とも一致しなかった場合は、ELSE句に指定したデフォルト値を戻します。

ただし、ELSE句(デフォルト値)は省略可能で、省略されたときはNULL値が戻されます。
DECODE(列名 | 式 ,
          条件1,値1,
          条件2,値2,…・ ,
          {デフォルト値} )

CASE式とDECODE関数の違い


CASE式では、WHEN句でEXISTSや比較条件やINやBETWEENやLIKEなどの演算子が使用可能だが、DECODE関数では使用不可能

DECODE関数では、DECODE は NULL = NULL の評価は True となるが、CASE式ではNULLとなるCASE式でNULLを評価する場合は、WHEN句でIS NULLを使う。



例1) 列「sex」が'1'の場合、'男'、'2'の場合、'女'、その他の場合、'不明'と表示する。
select lastname,
  case sex
   when '1' then '男'
   when '2' then '女'
   else '不明'
  end
  from employees


スポンサード リンク


例2) 例1と同じことをDECODE関数で表す。
select lastname,
  decode(sex,'1','男','2','女','不明')
  from employees


例3) 列「lastname」がNULLの場合、'名前未登録'、その他の場合、'名前登録済み'と表示する(NULLの評価)
select
  case
   when lastname is null then '名前未登録'
   else '名前登録済み'
  end
  from employees
CASE式でNULLを評価する場合、WHEN句でIS NULL演算子を使用する


例4) 例3と同じことをDECODE関数で表す。
select
  decode(lastname,null,'名前未登録','名前登録済み')
  from employees
DECODE関数ではNULLを評価する場合、直接指定できる。


例5) 列「salary」が1000以下の場合、'少ない'、2000以下の場合、'普通'、3000以上の場合、'多い'、と表示する。
select lastname,
  case
   when salary <= 1000 then '少ない'
   when salary <= 2000 then '普通'
   when salary >= 3000 then '多い'
   else '不明'
  end
  from employees
DECODE関数では、比較条件や演算子は使用できない。


スポンサード リンク


IF文のような条件式を使う(CASE WHEN〜、DECODE)
2つの値を比較して同じ場合はNULLを返す( NULLIF )
複数のNULL条件を簡潔に記述する(COALESCE)

SQL(DML) へ
忘れっぽいエンジニアのオラクルSQLリファレンス TOPへ