NVL, NVL2, COALESCE의 차이 – NULL 처리 함수 완전 정복

Posted by heoncode
2025. 7. 31. 12:59 오라클 실무 쿼리 튜닝
728x90
반응형
SMALL

SQL을 작성하다 보면 NULL 값을 다른 값으로 대체해야 할 일이 자주 발생합니다. 이때 사용하는 대표적인 함수로 NVL, NVL2, COALESCE가 있으며, 모두 오라클에서 널 처리에 사용됩니다. 이름은 비슷하지만 동작 방식과 활용도에는 차이가 있기 때문에 정확히 구분하고 사용하는 것이 중요합니다.

이 글에서는 세 함수의 문법, 차이점, 예제, 실무 팁까지 함께 정리합니다.

1. NVL – 기본적인 NULL 대체

NVL은 가장 단순한 널 처리 함수로, NULL이면 지정한 값으로 대체하고, NULL이 아니면 원래 값을 그대로 반환합니다.

NVL(표현식, 대체값)

예시:

SELECT NVL(NULL, 'N/A') FROM DUAL; -- 결과: 'N/A'
SELECT NVL('ABC', 'N/A') FROM DUAL; -- 결과: 'ABC'

주의할 점은 데이터 타입이 일치해야 한다는 점입니다. 숫자와 문자열을 섞으면 오류가 납니다.

SELECT NVL(100, '없음') FROM DUAL; -- 오류 발생

2. NVL2 – NULL 여부에 따라 두 값을 선택

NVL2NULL이냐 아니냐에 따라 두 개의 다른 값을 선택할 수 있습니다.

NVL2(표현식, NOT_NULL일 때 반환값, NULL일 때 반환값)

예시:

SELECT NVL2(NULL, 'Y', 'N') FROM DUAL; -- 결과: 'N'
SELECT NVL2('데이터', 'Y', 'N') FROM DUAL; -- 결과: 'Y'

즉, IF 문으로 치면 다음과 같은 형태입니다.

IF (표현식 IS NOT NULL) THEN A ELSE B

단순 대체가 아니라 두 갈래 조건 분기가 필요할 때 유용합니다.

3. COALESCE – 첫 번째 NOT NULL 값을 반환

COALESCE는 인수들을 왼쪽부터 검사하여 첫 번째로 NULL이 아닌 값을 반환합니다. 인수는 2개 이상 받을 수 있고, 여러 후보 중 유효한 값을 찾을 때 매우 유용합니다.

COALESCE(표현식1, 표현식2, ..., 표현식N)

예시:

SELECT COALESCE(NULL, NULL, '대체', '기본') FROM DUAL; -- 결과: '대체'

NVL과 다르게 여러 후보를 순차적으로 검사할 수 있고, 타입 자동 변환도 좀 더 유연합니다.

세 함수 비교 정리

항목 NVL NVL2 COALESCE
사용 목적 NULL이면 대체 NULL 여부로 분기 여러 후보 중 첫 NOT NULL
인수 개수 2개 3개 2개 이상
가독성 간단 조건 분기에 적합 유연한 NULL 처리
데이터 타입 동일 타입 요구 자유 자동 변환 가능
표준 SQL 여부 오라클 전용 오라클 전용 SQL 표준 지원

실무 활용 팁

  • 단순한 기본값 설정: NVL
  • NULL 여부에 따라 값 분기: NVL2
  • 여러 후보 중 유효값 찾기: COALESCE
  • 이식성과 SQL 표준을 고려한다면 COALESCE를 우선 고려하는 것이 좋습니다.

예: 고객 이름이 NULL이면 닉네임, 닉네임도 없으면 '비회원'을 보여주고 싶을 때

SELECT COALESCE(NAME, NICKNAME, '비회원') FROM USER_TABLE;

마무리

NVL, NVL2, COALESCE는 모두 NULL 값을 처리하는 데 유용하지만, 목적과 상황에 따라 적절한 함수를 선택해야 합니다. 단순히 외워서 사용하는 것이 아니라, 동작 방식과 차이를 이해하고 쿼리 목적에 맞게 활용하는 것이 중요합니다.

#NULL처리 #NVL함수 #COALESCE #오라클SQL #SQL기초 #오라클쿼리 #NVL2사용법 #NULL함수비교

728x90
반응형
LIST