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 값을 효과적으로 다룰 수 있습니다.

참고하면 좋은 글

10 thoughts on “SQL 데이터 전처리 3 : NVL, NVL2, COALESCE 함수 정리”

  1. Its like you read my mind You appear to know so much about this like you wrote the book in it or something I think that you can do with a few pics to drive the message home a little bit but instead of that this is excellent blog A fantastic read Ill certainly be back

    응답
  2. Your blog is a testament to your dedication to your craft. Your commitment to excellence is evident in every aspect of your writing. Thank you for being such a positive influence in the online community.

    응답
  3. Attractive section of content I just stumbled upon your blog and in accession capital to assert that I get actually enjoyed account your blog posts Anyway I will be subscribing to your augment and even I achievement you access consistently fast

    응답
  4. Your writing is a true testament to your expertise and dedication to your craft. I’m continually impressed by the depth of your knowledge and the clarity of your explanations. Keep up the phenomenal work!

    응답

Leave a Comment


목차