概要: このチュートリアルでは、SQL DECODE()
関数を使用して、クエリにif-then-elseロジックを追加する方法を学習します。
SQL DECODE()関数の紹介
SQL DECODE()
関数を使用すると、手続き型のif-then-elseロジックをクエリに追加できます。次の例を見てみましょう。
SELECT DECODE(1,1,'Equal');
Code language: SQL (Structured Query Language) (sql)
この例では、DECODE()
関数は最初の引数(1)を2番目の引数(これも1)と比較します。最初の引数は2番目の引数と同じなので、関数は3番目の引数である文字列Equal
を返します。
上記のDECODE()
関数は、次のIF
文と同じように機能します。
IF 1 = 1 THEN
RETURN 'Equal';
END IF;
Code language: SQL (Structured Query Language) (sql)
次の例では、最初の引数が2番目の引数と等しくないため、NULLが返されます。
SELECT DECODE(1,2, 'Equal');
Code language: SQL (Structured Query Language) (sql)
これは、次の文のように機能します。
IF 1 = 2 THEN
RETURN 'Equal';
END IF;
Code language: SQL (Structured Query Language) (sql)
最初の引数が2番目の引数と等しくない場合に値を指定するには、DECODE()
関数の次の形式を使用します。
SELECT DECODE(1,2, 'Equal', 'Not Equal');
Code language: SQL (Structured Query Language) (sql)
これは、次のIF-THEN-ELSE文のように機能します。
IF 1 = 2 THEN
RETURN 'Equal';
ELSE
RETURN 'Not Equal';
END IF;
Code language: SQL (Structured Query Language) (sql)
一般に、次の例に示すように、DECODE()
関数の最初の引数を引数のリストと比較できます。
SELECT DECODE (2, 1, 'Equal 1', 2, 'Equal 2');
Code language: SQL (Structured Query Language) (sql)
この例は、次のIF-THEN-ELSE IF文のように機能します。
IF 2 = 1 THEN
RETURN 'Equal 1';
ELSE IF 2 = 2
RETURN 'Equal 2';
END IF;
Code language: SQL (Structured Query Language) (sql)
次の例を参照してください。
SELECT DECODE(3,1, 'Equal 1,', 2, 'Equal 2', 'Not Equal 1 or 2');
Code language: SQL (Structured Query Language) (sql)
この例は、次のIF-THEN-ELSEIF-ELSE文のように機能します。
IF 3 = 1 THEN
RETURN 'Equal 1';
ELSE IF 3 =2 THEN
RETURN 'Equal 2';
ELSE
RETURN 'Not Equal 1 or 2';
END IF;
Code language: SQL (Structured Query Language) (sql)
SQL DECODE()関数の構文
SQL DECODE()
関数の構文を以下に示します。
DECODE (e , s1, r1[, s2, r2], ...,[,sn,rn] [, d]);
Code language: SQL (Structured Query Language) (sql)
この構文では、
- eは、他の引数s1、s2、…、snと検索または比較される引数です。
- s1、s2、…、またはsnは、検索する式です。関数は、最初の引数をs1、s2、…、snと順番に比較します。比較e = s1、e = s2、…、e = snのいずれかがtrueを返すと、
DECODE()
関数は評価を終了し、結果を返します。 - r1、r2、…、またはrnは、ei = siの場合に返される結果です。
- dは、eがいずれの引数s1、s2、…、またはsnとも等しくない場合に返される式です。
SQL DECODE()関数の例
デモンストレーションには、サンプルデータベースのemployees
テーブルを使用します。

次のクエリを参照してください。
SELECT
employee_id, first_name, last_name, salary
FROM
employees
ORDER BY DECODE('S',
'F',
first_name,
'L',
last_name,
'S',
salary);
Code language: SQL (Structured Query Language) (sql)
この例では、ORDER BY
句でDECODE()
関数を使用しました。DECODE()
関数は、入力引数に基づいてソートする列を返しました。この場合、DECODE()
関数はsalary列を返したため、結果セットはsalary列でソートされました。
このチュートリアルでは、SQL DECODE()
関数を使用してクエリにif-then-elseロジックを追加する方法を学習しました。