ORACLE DATABASE 12c SQL基礎(1Z0-061)の試験範囲でもある、
DECODE関数の使用方法を紹介します。
目次
DECODE関数について
DECODE関数は以下のような書式で使います。
列の値が条件値1に合致する場合は値1を返し、条件値nに合致する場合は値nを返します。いずれの条件値にも合致しない場合はデフォルト値を返します。(デフォルト値を指定しない場合はNULLを返します)
書式: DECODE(列, 条件値1 , 値1[, ・・・条件値n, 値n] [, デフォルト値])
以下のテーブルを使って、実際にDECODE関数の使い方を確認してみましょう。
EMPLOYEE_ID | DEPARTMENT_ID | NAME | PHONE | SALARY | MANAGER_ID |
---|---|---|---|---|---|
1 | 10 | 山田 | 00000000000 | 500000 | « NULL » |
2 | 10 | 佐藤 | 00000000001 | 450000 | 1 |
3 | 10 | 鈴木 | 00000000002 | 450000 | 1 |
4 | 10 | 田中 | 00000000003 | 300000 | 1 |
5 | 10 | 山本 | 00000000004 | 220000 | 1 |
6 | 20 | 森 | 00000000005 | 470000 | « NULL » |
7 | 20 | 中村 | 00000000006 | 250000 | 6 |
8 | 20 | 松本 | 00000000007 | 220000 | 6 |
9 | 30 | 井上 | 00000000008 | 210000 | 10 |
10 | 30 | 木村 | 00000000009 | 300000 | « NULL » |
DECODE関数の使用例
DEPARTMENT_IDが10の場合は経営管理部、20の場合は営業部、それ以外はその他と返すSQLを考えます。
SELECT EMPLOYEE_ID,NAME,DECODE(DEPARTMENT_ID, 10, '経営管理部', 20, '営業部','その他') FROM TEST5;
SQLの結果
列名が「DECODE(DEPARTMENT_ID, 10, '経営管理部', 20, '営業部','その他')」と非常に長いので、以下のように列別名をつけてみましょう。
可読性を高めるために、インデントもつけてみます。
SELECT EMPLOYEE_ID, NAME, DECODE(DEPARTMENT_ID, 10, '経営管理部', 20, '営業部', 'その他') AS 部署 FROM TEST5;
SQLの結果
DECODE関数の使用例2
MANAGER_IDに値がある場合は〇〇さんの部下、MANAGER_IDに値がない場合は部署長と返すSQLを考えてみましょう。
SELECT EMPLOYEE_ID, NAME, DECODE(MANAGER_ID, NULL, '部署長', 1, '山田さんの部下', 6, '森さんの部下', 10, '木村さんの部下') FROM TEST5;
以下のように部署長をデフォルトにする書き方もできます。
SELECT EMPLOYEE_ID, NAME, DECODE(MANAGER_ID, 1, '山田さんの部下', 6, '森さんの部下', 10, '木村さんの部下', '部署長') FROM TEST5;