Oracle DECODE 함수 알아보기
Oracle 데이터베이스에서 DECODE 함수는 SQL에서 조건에 따라 값을 반환하는 데 사용되는 매우 강력한 함수입니다. 이 함수는 IF-THEN-ELSE 논리를 SQL에서 구현하는데 유용합니다. 이번 포스트에서는 DECODE 함수의 구조와 다양한 활용 사례를 살펴보겠습니다.
DECODE 함수의 기본 구조
DECODE 함수는 다음과 같은 형태를 가지고 있습니다.
DECODE(expression, search1, result1, [search2, result2, ...], default)
- expression: 비교할 값입니다.
- search1, search2, ...: expression과 비교할 값입니다.
- result1, result2, ...: search 값과 일치할 때 반환할 값입니다.
- default: 어떤 search 값과도 일치하지 않을 때 반환할 기본값입니다. 생략 가능하며, 생략 시 NULL을 반환합니다.
기본 사용 예시
다음 예제는 숫자 값에 따라 서로 다른 문자열을 반환합니다:
SELECT DECODE(1, 1, 'One', 2, 'Two', 'Other') AS result
FROM DUAL;
결과: |
One |
- 1은 첫 번째 search 값인 1과 일치하므로 result1인 'One'이 반환됩니다.
NULL 값 처리
DECODE 함수는 NULL 값을 특별하게 처리합니다. 다음 예제를 보겠습니다:
SELECT DECODE(NULL, NULL, 'Match', 'No Match') AS result
FROM DUAL;
결과: |
RESULT |
No Match |
Oracle에서 NULL은 다른 NULL과 같지 않다고 간주되기 때문에 이 결과가 반환됩니다.
DECODE를 사용한 실용적인 예시
1. 조건에 따라 할인율 계산
고객 등급에 따라 다른 할인율을 적용하는 예제입니다:
SELECT
customer_id,
customer_name,
DECODE(customer_grade,
'A', 0.2, -- A 등급은 20% 할인
'B', 0.15, -- B 등급은 15% 할인
'C', 0.1, -- C 등급은 10% 할인
0) AS discount_rate
FROM customers;
2. 상태 코드에 따른 상태명 반환
주문 상태 코드를 상태명으로 변환하는 예제입니다:
SELECT
order_id,
order_status,
DECODE(order_status,
'P', 'Pending',
'C', 'Completed',
'X', 'Cancelled',
'Unknown') AS status_name
FROM orders;
3. CASE문과의 비교
DECODE는 IF-THEN-ELSE 로직을 간결하게 작성할 수 있지만, 복잡한 조건에는 CASE문이 더 적합할 수 있습니다. 다음은 동일한 로직을 CASE문으로 작성한 예제입니다:
SELECT
order_id,
order_status,
CASE
WHEN order_status = 'P' THEN 'Pending'
WHEN order_status = 'C' THEN 'Completed'
WHEN order_status = 'X' THEN 'Cancelled'
ELSE 'Unknown'
END AS status_name
FROM orders;
4. DECODE로 다중 열 비교
DECODE는 단일 표현식 비교에만 사용할 수 있습니다. 다중 열을 비교하려면 표현식을 결합해야 합니다:
SELECT
DECODE(employee_id || department_id,
'1001', 'HR',
'2002', 'Finance',
'3003', 'Engineering',
'Unknown') AS department_name
FROM employees;
DECODE 사용 시 주의사항
- 성능 문제: 복잡한 조건이 많아질 경우 성능이 저하될 수 있습니다. CASE문이 더 나은 성능을 제공할 수 있습니다.
- 가독성: DECODE는 간단한 조건에 적합하지만, 복잡한 조건에는 코드 가독성이 떨어질 수 있습니다.
'IT 개발 라이프 > DB' 카테고리의 다른 글
🔢 ORACLE 숫자 함수 총정리 (0) | 2024.12.16 |
---|---|
📅 ORACLE 날짜 함수 총정리 (0) | 2024.12.16 |
데이터베이스 옵티마이저 이해하기 ✨ (0) | 2024.12.04 |
데이터베이스 DDL, DML, DCL 정리 🗂️ (0) | 2024.12.04 |
오라클 데이터베이스 기초 문법 📚 (0) | 2024.12.02 |