감자의 개발공부 일지

[Oracle] 오라클 DECODE 함수로 복잡한 조건 처리 간단하게 해결하기(조건에 따른 값 변환) 본문

DB

[Oracle] 오라클 DECODE 함수로 복잡한 조건 처리 간단하게 해결하기(조건에 따른 값 변환)

Elie_J 2025. 3. 13. 17:59
반응형

1. DECODE 함수란?

  • DECODE 함수는 오라클 SQL에서 조건에 따라 다른 값을 반환하는 함수.
  • 기본적으로 IF-ELSE 논리처럼 작동하며, 특정 조건을 만족하면 지정된 값을 반환하고, 그렇지 않으면 다른 값을 반환하는 방식으로 작동
  • DECODE 함수는 복잡한 조건문을 간단하게 처리할 수 있는 유용한 도구로, 특히 값의 비교 및 변환에 사용됨.
  • CASE 표현식보다 간단하고 직관적인 형태로 조건을 처리할 때 유리.

문법

DECODE(expression, search_value, result_value, [default_value])

 

  • expression: 비교할 값 (주로 컬럼 값)
  • search_value: 비교할 값 (여러 조건을 추가할 수 있음)
  • result_value: expression이 search_value와 일치할 경우 반환할 값
  • default_value: 조건에 맞지 않으면 반환할 기본값 (선택 사항)

예제

예제 1 (부서별 직원 명칭 반환)

SELECT employee_id, DECODE(department_id, 10, 'Sales', 20, 'Marketing', 'Other') AS department_name
FROM employees;

 

-> department_id 값에 따라 부서명을 반환.

-> 값이 10이면 'Sales', 20이면 'Marketing', 그 외에는 'Other'를 반환.

 

결과 1

employee_id department_name
101 Sales
102 Marketing
103 Other
104 Other

 

 

예제 2 (성과에 따른 보너스 지급 여부)

SELECT employee_id, DECODE(performance_rating, 'Excellent', 'Bonus', 'Good', 'Bonus', 'No Bonus') AS bonus_status
FROM employees;

-> performance_rating 값에 따라 보너스를 지급할지 여부를 판단.

-> 성과가 'Excellent'이나 'Good'이면 'Bonus'를, 그렇지 않으면 'No Bonus'를 반환.

 

결과 2

employee_id bonus_status
101 Bonus
102 Bonus
103 No Bonus
104 Bonus

 

예제 3 (연령대별 그룹화)

SELECT employee_id, DECODE(age, 
                            BETWEEN 18 AND 25, 'Young', 
                            BETWEEN 26 AND 40, 'Middle-Aged', 
                            BETWEEN 41 AND 60, 'Experienced', 
                            'Senior') AS age_group
FROM employees;

-> age 값에 따라 연령대 그룹을 반환.

-> 18세에서 25세는 'Young', 26세에서 40세는 'Middle-Aged', 41세에서 60세는 'Experienced', 그 외에는 'Senior'를 반환.

 

결과 3

employee_id age_group
101 Young
102 Middle-Aged
103 Experienced
104 Senior

 

 

예제 4 (NULL 값 처리)

SELECT employee_id, DECODE(salary, NULL, 'No Salary Data', salary) AS salary_status
FROM employees;

-> salary 값이 NULL인 경우 'No Salary Data'를 반환. 그렇지 않으면 해당 salary 값을 반환

 

결과 4

employee_id salary_status
101 5000
102 No Salary Data
103 4500
104 6000

 

반응형