「SQL標準」タグアーカイブ

Oracle:DECODE関数とCASE式の違いを徹底解説

Oracle SQLを学んでいると、「DECODE関数」と「CASE式」の使い分けで迷う方は多いのではないでしょうか。
どちらも条件分岐を行うために利用できますが、機能や表現力には明確な違いがあります。

本記事では、DECODEとCASEの特徴、違い、実務での使い分けポイントをわかりやすく解説します。


1. DECODE関数とは?

DECODEOracle独自の関数 で、簡易的な条件分岐を行うために利用されます。
基本構文は次の通りです。

 
DECODE(式, 検索値1, 置換値1, 検索値2, 置換値2, ..., デフォルト値)
  • 指定した式の値と「検索値」が一致すれば、その「置換値」を返す

  • 一致しなければ最後のデフォルト値を返す(省略可能)

例:部署IDに応じて部署名を返す

 
SELECT DECODE(dept_id, 10, '営業部', 20, '人事部', 30, '開発部', 'その他') AS dept_name FROM employees;

2. CASE式とは?

CASESQL標準 でサポートされる条件分岐の構文です。
Oracleだけでなく、他のデータベース(MySQL、PostgreSQLなど)でも使えます。

構文(シンプルCASE)

 
CASEWHEN1 THEN 結果1 WHEN2 THEN 結果2 ... ELSE 結果N END

構文(検索CASE)

 
CASE WHEN 条件式1 THEN 結果1 WHEN 条件式2 THEN 結果2 ... ELSE 結果N END

例:部署IDに応じて部署名を返す

 
SELECT CASE dept_id WHEN 10 THEN '営業部' WHEN 20 THEN '人事部' WHEN 30 THEN '開発部' ELSE 'その他' END AS dept_name FROM employees;

3. DECODEとCASEの比較

項目DECODECASE
標準SQLOracle独自機能SQL標準でサポート
構文関数形式式形式
条件「等しい場合」のみ判定可能=, >,
可読性ネストが増えると読みにくい複雑な条件もわかりやすく記述可能
移植性Oracleに依存他DBでも利用可能
推奨度古いコードに多い現在はこちらが主流
 

4. 実務での使い分けポイント

  • 既存システムのSQLでDECODEが多用されている → 互換性を保つためそのまま使用するケースあり

  • 新規開発や複雑な条件分岐 → 可読性・移植性を考えて CASE式を推奨

  • DB移行を見据える場合 → CASE式を選択しておくと移植がスムーズ


まとめ

  • DECODE関数:Oracle独自。簡単な条件分岐向け。古いSQLでよく見かける。

  • CASE式:SQL標準。複雑な条件も書けて、移植性・可読性に優れる。

👉 今後の開発では CASE式を優先的に利用 するのがおすすめです。