티스토리 뷰

오라클의 `DECODE` 함수는 조건에 따라 다른 값을 반환하는 함수입니다. `CASE` 표현식과 유사하게 동작하지만, 구문이 조금 더 간단합니다. 주로 특정 값에 대해 조건부로 다른 값을 반환하고자 할 때 사용됩니다.

`DECODE` 함수의 구문

DECODE(expression, search1, result1, [search2, result2, ...], default)


- `expression`: 평가할 값입니다.
- `search1`, `search2`, ...: `expression`과 비교할 값들입니다.
- `result1`, `result2`, ...: `expression`이 각각의 `search` 값과 일치할 때 반환할 값들입니다.
- `default`: `expression`이 어느 `search` 값과도 일치하지 않을 때 반환할 기본 값입니다. (생략 가능)

<예제>

1. 기본적인 사용 예제

   직원 테이블에서 `job_id`에 따라 다른 직무 명칭을 반환하는 경우를 생각해 봅시다.

   SELECT employee_id,
          first_name,
          last_name,
          job_id,
          DECODE(job_id,
                 'AD_PRES', 'President',
                 'AD_VP', 'Vice President',
                 'IT_PROG', 'Programmer',
                 'ST_CLERK', 'Stock Clerk',
                 'SA_REP', 'Sales Representative',
                 'Unknown Job') AS job_title
   FROM employees;
   

   여기서 `job_id`가 'AD_PRES'이면 'President'를, 'AD_VP'이면 'Vice President'를 반환합니다. 그 외의 경우에는 'Unknown Job'을 반환합니다.

2. 더 복잡한 사용 예제

   예를 들어, 특정 급여 범위에 따라 다른 급여 등급을 반환하는 경우를 생각해봅시다.

   SELECT employee_id,
          first_name,
          last_name,
          salary,
          DECODE(TRUE,
                 salary < 3000, 'Low',
                 salary BETWEEN 3000 AND 6000, 'Medium',
                 salary > 6000, 'High',
                 'Unknown') AS salary_grade
   FROM employees;

   이 예제에서는 급여가 3000 미만인 경우 'Low', 3000에서 6000 사이인 경우 'Medium', 6000 초과인 경우 'High'를 반환합니다. 어떤 조건에도 맞지 않으면 'Unknown'을 반환합니다.

 3. `DECODE` 함수와 `CASE` 표현식 비교

`DECODE` 함수는 간단한 조건에 대해 간결한 구문을 제공하지만, 복잡한 논리 조건을 처리할 때는 `CASE` 표현식이 더 유연하고 강력할 수 있습니다. 예를 들어, `CASE` 표현식은 논리 연산자와 다양한 조건을 사용할 수 있습니다.

- `CASE` 표현식 예제

   SELECT employee_id,
         first_name,
         last_name,
         salary,
         CASE
             WHEN salary < 3000 THEN 'Low'
             WHEN salary BETWEEN 3000 AND 6000 THEN 'Medium'
             WHEN salary > 6000 THEN 'High'
             ELSE 'Unknown'
         END AS salary_grade
  FROM employees;
 
이렇게 `DECODE` 함수는 단순한 조건부 논리를 구현하는 데 유용하며, 코드의 가독성을 높이는 데 도움이 됩니다. 그러나 복잡한 조건이 필요할 경우 `CASE` 표현식을 사용하는 것이 더 적절할 수 있습니다.

최근에 올라온 글