SQL

DECODE 함수란?

초코너무조코 2025. 2. 5. 10:53
728x90

DECODE 함수란?

SQL에서 DECODE 함수는 특정 값에 따라 다른 결과를 반환하는 함수입니다. IF-THEN-ELSE 문과 유사하게 동작하며, 주로 오라클(Oracle) 데이터베이스에서 사용됩니다.


목차


DECODE 함수 문법

다음은 DECODE 함수의 기본적인 문법입니다.

DECODE(expression, search1, result1, search2, result2, ..., default_result)
  • expression : 비교할 값
  • search1, search2, ... : expression과 비교할 값들
  • result1, result2, ... : search 값과 일치할 때 반환할 결과
  • default_result : expression이 어떤 search 값과도 일치하지 않을 경우 반환할 기본값 (생략 가능)

DECODE 함수 예제

기본적인 사용법

다음은 DECODE를 사용하여 직원들의 직급에 따라 다른 급여 보너스를 부여하는 예제입니다.

SELECT emp_name, salary,
       DECODE(job, 'Manager', salary * 1.2, 
                   'Engineer', salary * 1.1, 
                   'Clerk', salary * 1.05, 
                   salary) AS new_salary
FROM employees;

위 쿼리는 job 값이 Manager이면 급여의 20%를, Engineer이면 10%를, Clerk이면 5%를 추가 지급하며, 그 외에는 기존 급여를 유지합니다.

NULL 값 처리

DECODE 함수는 NULL 값을 처리할 때 주의가 필요합니다. NULL 값은 = 비교 연산에서 다르게 동작하므로, NULL 값을 명시적으로 비교해야 합니다.

SELECT emp_name, DECODE(dept, NULL, 'No Department', dept) AS department
FROM employees;

위 쿼리는 dept 값이 NULL이면 'No Department'를 반환합니다. 하지만 NULL 비교는 직접 인식되지 않으므로 NVL 함수를 사용하는 것이 일반적입니다.

SELECT emp_name, NVL(dept, 'No Department') AS department
FROM employees;

DECODE와 CASE문 비교

DECODE 함수는 CASE 문과 유사한 역할을 하지만, CASE 문이 더 유연하고 가독성이 좋기 때문에 DECODE보다 더 많이 사용됩니다.

CASE문을 이용한 동일한 로직

SELECT emp_name, salary,
       CASE 
           WHEN job = 'Manager' THEN salary * 1.2
           WHEN job = 'Engineer' THEN salary * 1.1
           WHEN job = 'Clerk' THEN salary * 1.05
           ELSE salary 
       END AS new_salary
FROM employees;

차이점:

  • CASE 문은 DECODE보다 더 다양한 비교 연산(>, <, BETWEEN, LIKE)을 사용할 수 있습니다.
  • DECODE는 비교할 값이 단일 값일 때 더 간단하게 사용할 수 있습니다.

DECODE 함수의 한계

  1. 비교 연산 제한: DECODE는 단순한 = 비교만 가능합니다.
  2. 가독성 문제: 비교할 조건이 많아질수록 DECODE의 가독성이 떨어질 수 있습니다.
  3. CASE문 대비 확장성 부족: 복잡한 조건을 다룰 때는 CASE 문이 더 효율적입니다.

DECODE 함수의 MySQL 대체 방법

DECODE 함수는 오라클(Oracle) 전용 함수이며, MySQL에서는 사용할 수 없습니다.

✅ MySQL에서는 어떻게 대체할까?

MySQL에서는 DECODE 대신 CASE 문을 사용하면 동일한 기능을 구현할 수 있습니다.

🔹 오라클 DECODE 예제

SELECT emp_name, salary,
       DECODE(job, 'Manager', salary * 1.2, 
                   'Engineer', salary * 1.1, 
                   'Clerk', salary * 1.05, 
                   salary) AS new_salary
FROM employees;

🔹 MySQL CASE 문으로 변환

SELECT emp_name, salary,
       CASE 
           WHEN job = 'Manager' THEN salary * 1.2
           WHEN job = 'Engineer' THEN salary * 1.1
           WHEN job = 'Clerk' THEN salary * 1.05
           ELSE salary 
       END AS new_salary
FROM employees;

❓ DECODE와 CASE의 차이점

  1. 오라클 전용 vs 표준 SQL
    • DECODE는 오라클에서만 지원
    • CASE는 SQL 표준이므로 MySQL, PostgreSQL, SQL Server 등에서 사용 가능
  2. 비교 연산 지원 여부
    • DECODE는 = 비교만 가능
    • CASE는 >, <, BETWEEN, LIKE 등 다양한 연산이 가능

즉, MySQL에서는 CASE 문을 사용하면 DECODE 없이도 동일한 기능을 구현할 수 있습니다! 😊


결론

DECODE 함수는 간단한 IF-THEN-ELSE 구조를 SQL에서 구현할 때 유용하지만, 가독성과 확장성 측면에서 CASE 문이 더 권장됩니다. 특히, 비교 연산이 다양하게 필요한 경우 CASE 문을 사용하는 것이 더 적절합니다.

728x90