SQL에서는 NULL 값이 존재할 때 연산에 문제가 발생할 수 있으므로, 이를 적절히 처리하는 것이 중요합니다.
이를 위해 NVL과 NVL2 함수를 사용하여 NULL 값을 다른 값으로 변환하거나, 조건에 따라 다른 결과를 반환할 수 있습니다.
✅ 1. NVL 함수란?
NVL(컬럼명 또는 표현식, 대체값)
- NVL 함수는 NULL 값을 특정 값으로 변환하는 함수입니다.
- NULL 값이 있으면 대체값으로 변환하고, NULL이 아니면 원래 값을 유지합니다.
📌 1-1. NVL 예제
SELECT employee_id, name, salary,
NVL(commission, 0) AS commission_fixed
FROM empl
📌 실행 결과

설명:
- commission 컬럼이 NULL인 경우 0으로 변환됨
- NULL이 아닌 경우 원래 값 유지
📌 1-2. NVL을 사용하지 않을 경우 문제점
SELECT salary + commission AS total_pay
FROM employees;
❌ 오류 발생 가능
- NULL + 숫자 = NULL → commission이 NULL이면 연산 결과도 NULL이 됨
✅ NVL을 사용하여 문제 해결
SELECT salary + NVL(commission, 0) AS total_pay
FROM employees;
NULL 값을 0으로 변환하여 연산이 정상적으로 수행됨
✅ 2. NVL2 함수란?
NVL2(컬럼명 또는 표현식, NULL이 아닐 때 반환할 값, NULL일 때 반환할 값)
- NVL2는 NVL과 다르게, NULL인지 여부에 따라 두 개의 다른 값을 반환할 수 있습니다.
- NULL이 아니면 특정 값 A를 반환, NULL이면 특정 값 B를 반환합니다.
📌 2-1. NVL2 예제
SELECT employee_id, name, salary, commission,
NVL2(commission, '수당 있음', '수당 없음') AS commission_status
FROM employees;
📌 실행 결과

설명:
- commission이 NULL이 아니면 '수당 있음', NULL이면 '수당 없음' 반환
📌 2-2. NVL2를 활용한 예제
SELECT employee_id, name, salary, commission,
NVL2(commission, salary + commission, salary) AS total_salary
FROM employees;
📌 실행 결과

설명:
- commission이 NULL이면 salary 그대로 반환
- commission이 NULL이 아니면 salary + commission 연산 수행
✅ 3. NVL vs NVL2 차이점
✅ 4. NVL & NVL2 활용 사례
(1) NVL을 사용하여 NULL 값을 기본값으로 변환
SELECT employee_id, name, NVL(phone_number, '연락처 없음') AS contact
FROM employees;
📌 효과: NULL인 경우 '연락처 없음' 으로 대체
(2) NVL2를 사용하여 특정 조건에 따라 다른 값 반환
SELECT employee_id, name,
NVL2(bonus, '보너스 지급 대상', '보너스 미지급') AS bonus_status
FROM employees;
📌 효과: 보너스가 있으면 '보너스 지급 대상', 없으면 '보너스 미지급' 반환
✅ 5. 정리
✅ NVL(컬럼, 대체값) → NULL 값을 특정 값으로 변경
✅ NVL2(컬럼, NULL 아닐 때 값, NULL일 때 값) → NULL 여부에 따라 다른 값 반환
✅ NULL 값으로 인한 연산 오류를 방지하고, 데이터 가독성을 높이는 데 필수적인 함수
👉 NVL은 단순히 NULL을 특정 값으로 변환할 때, NVL2는 NULL 여부에 따라 두 가지 다른 값을 반환할 때 사용하면 됩니다! 🚀
'기획자가 알아야 할 IT지식 > 기획자가 알아야 할 SQL' 카테고리의 다른 글
21강. SQL에서 최대, 최소, 평균값 구하기 (MAX, MIN, AVG) (0) | 2025.03.23 |
---|---|
20강. 조건에 따라 다른 값을 반환하는 CASE WHEN 문 (0) | 2025.03.23 |
18강. 날짜 및 숫자 데이터 변환하기 (TO_CHAR, TO_DATE) (0) | 2025.03.22 |
17강. 날짜 차이 및 월 단위 계산하기 (MONTHS_BETWEEN, ADD_MONTHS) (0) | 2025.03.22 |
16강. 나머지 값을 구하는 MOD 함수 활용하기 (0) | 2025.03.22 |