SQL 데이터 전처리 3 : NVL, NVL2, COALESCE 함수 정리

SQL에서 NULL 값은 “값이 존재하지 않음”을 의미하며, 연산이나 조건문에서 의도하지 않은 결과를 초래할 수 있습니다. 이를 방지하기 위해 NVL, NVL2, COALESCE 같은 함수들이 제공됩니다. 이번 글에서는 각 함수의 사용법과 예제 데이터를 활용한 실습을 정리해보겠습니다.

NVL 함수

NVL 함수는 NULL 값을 특정 값으로 변환하는 함수입니다.

문법

NVL(column, replace_value)
  • column: NULL 값을 확인할 열
  • replace_value: NULL일 경우 대체할 값

사용 예

아래 employees 테이블이 있다고 가정해보겠습니다.

emp_idemp_namesalarybonus
101Alice5000500
102Bob6000NULL
103Charlie7000700
104DavidNULLNULL

다음 SQL을 실행하면 NULL 값을 기본값(0)으로 변환할 수 있습니다.

SELECT emp_name, salary, NVL(salary, 0) AS salary_with_default FROM employees;

출력 결과

emp_namesalarysalary_with_default
Alice50005000
Bob60006000
Charlie70007000
DavidNULL0

NVL2 함수

NVL2 함수는 NULL 여부에 따라 서로 다른 값을 반환하는 함수입니다.

문법

NVL2(column, value_if_not_null, value_if_null)
  • column: NULL 여부를 확인할 열
  • value_if_not_null: NULL이 아닐 때 반환할 값
  • value_if_null: NULL일 때 반환할 값

사용 예

SELECT emp_name, bonus, NVL2(bonus, '적용됨', '미적용') AS bonus_status FROM employees;

출력 결과

emp_namebonusbonus_status
Alice500적용됨
BobNULL미적용
Charlie700적용됨
DavidNULL미적용

COALESCE 함수

COALESCE 함수는 여러 개의 값 중 첫 번째로 NULL이 아닌 값을 반환합니다.

문법

COALESCE(value1, value2, ..., valueN)
  • 왼쪽부터 차례로 NULL이 아닌 값을 찾아 반환
  • 모든 값이 NULL이면 NULL 반환

사용 예

SELECT emp_name, salary, bonus, COALESCE(salary, bonus, 0) AS first_non_null FROM employees;

출력 결과

emp_namesalarybonusfirst_non_null
Alice50005005000
Bob6000NULL6000
Charlie70007007000
DavidNULLNULL0

NVL vs NVL2 vs COALESCE 차이점 비교

함수설명사용 예시
NVLNULL 값을 단일 값으로 대체NVL(salary, 0) → salary가 NULL이면 0 반환
NVL2NULL 여부에 따라 서로 다른 값을 반환NVL2(bonus, '적용됨', '미적용')
COALESCE여러 값 중 NULL이 아닌 첫 번째 값 반환COALESCE(salary, bonus, 0)

CASE WHEN을 활용한 결측치 처리

CASE WHEN 문은 보다 복잡한 논리를 적용할 수 있어 유연한 NULL 처리가 가능합니다.

아래와 같은 employees 테이블이 있다고 가정해보겠습니다.

emp_idemp_namesalarybonus
101Alice5000500
102Bob6000NULL
103Charlie7000700
104DavidNULLNULL
SELECT emp_name, 
       COALESCE(salary, bonus, 0) AS first_non_null,
       CASE 
           WHEN COALESCE(salary, bonus, 0) = 0 THEN '정보 없음'
           ELSE '급여 또는 보너스 있음'
       END AS payment_status
FROM employees;

위와 같은 쿼리를 입력하면 아래와 같은 결과를 얻을 수 있습니다. Null 값도 처리하고 추가 가공도 할 수 있게 되는거죠

emp_namefirst_non_nullpayment_status
Alice5000급여 또는 보너스 있음
Bob6000급여 또는 보너스 있음
Charlie7000급여 또는 보너스 있음
David0정보 없음

SQL에서 NULL 값 처리는 데이터 분석과 보고서 작성에서 매우 중요합니다. NVL, NVL2, COALESCE 함수는 각각의 목적에 맞게 활용하면 NULL 값을 효과적으로 다룰 수 있습니다.

참고하면 좋은 글

Leave a Comment

목차