본문 바로가기
기획자가 알아야 할 IT지식/기획자가 알아야 할 SQL

19강. NULL 값을 처리하는 방법 (NVL, NVL2)

by 일잘러로 살기 2025. 3. 22.

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 여부에 따라 두 가지 다른 값을 반환할 때 사용하면 됩니다! 🚀