본문 바로가기
오라클[ORACLE]

[오라클] NULL 처리 정리 (NVL, NVL2, COALESCE, NULLIF)

by devlog93 2025. 12. 22.

오라클에서 SQL을 작성하다 보면 NULL 처리는 반드시 마주치게 된다. 특히 조회 결과가 비어 있거나, 계산 결과가 NULL로 나오는 경우가 많아 NULL 관련 함수는 실무에서도 자주 사용된다.

 

이번 글에서는 오라클에서 NULL이 무엇인지, 그리고 NULL을 처리하는 대표적인 함수들을 예제와 함께 정리하려고 한다.

 

1. NULL이란?

  • NULL은 값이 없는 상태를 의미한다.
  • 0 ( 숫자 0 ) X
  • " ( 빈 문자열 ) X ( 오라클에서는 빈 문자열도 NULL로 취급 )
  • 'NULL' (문자열) X

즉 아무 값도 존재하지 않는 상태가 NULL이다.

SELECT NULL + 10
  FROM DUAL;     -- 결과 : NULL
  
SELECT NULL * 10
  FROM DUAL;     -- 결과 : NULL

NULL은 어떤 연산을 해도 결과는 NULL이 된다.

2. IS NULL / IS NOT NULL

NULL 비교 시 = 연산자는 사용할 수 없다.

X 잘못된 예

SELECT * 
  FROM EMP
 WHERE COMMISSION = NULL;

 

O 올바른 방법

SELECT *
  FROM EMP
 WHERE COMMISSION IS NOT NULL;

 

 

3. NVL 함수

NVL ( 컬럼, 대체값)

  • 컬럼 값이 NULL이면 대체값 반환
  • NULL이 아니면 원래 값 반환
SELECT NVL(COMMISSION, 0) AS COMM
  FROM EMP;

COMMISSION이 NULL이면 0으로 출력된다.

계산 예제

SELECT SALARY + NVL(COMMISSION, 0) AS TOTAL_SALARY
  FROM EMP;

NULL 때문에 계산 결과가 NULL 되는 것을 방지할 수 있다.

4. NVL2 함수

NVL2(컬럼, NULL이 아닐 때, NULL일 때)

SELECT NVL2(COMMISSION, '지급', '미지급') AS BONUS_YN
  FROM EMP;

조건 분기용으로 많이 사용된다.

COMMISSION 결과
500 지급
NULL 미지급

 

5. COALESCE 함수

COALESCE(값1, 값2, 값3, ...)

  • 가장 먼저 나오는 NULL이 아닌 값 반환
  • NVL의 확장 버전
SELECT COALESCE(PHONE, MOBILE, '번호 없음') AS CONTACT
  FROM USER_TABLE;

PHONE이 NULL이면 MOBILE MOBILE도 NULL이면 '번호 없음'

6. NULLIF 함수

NULLIF(값1, 값2)

  • 값 1과 값 2가 같으면 NULL 반환
  • 다르면 값 1반환
SELECT NULLIF(10, 10)
  FROM DUAL;         -- 결과 : NULL
  
SELECT NULLIF(10, 5)
  FROM DUAL;         -- 결과 : 10

실무 예제 ( 0으로 나누기 방지 )

SELECT SALES / NULLIF(COUNT, 0)
  FROM SALES_TABLE;

COUNT가 0 이면 NULL 반환 ㅡㅡㅡ> 에러 방지

 

7. NVL vs COALESCE 차이

구분 NVL COALESCE
인자 개수 2개 여러 개 가능
표준 SQL X ( 오라클 전용 ) O ( 표준 SQL )
실무 활용 많음 더 유연함

 

8. NULL 처리 시 주의사항

    1. NULL 비교는 반드시 IS NULL

WHERE COL = NULL      -- X 
WHERE COL IS NOT NULL -- O

     2. 집계 함수는 NULL 제외

SELECT COUNT(COMMISSION)
  FROM EMP;

NULL 값은 COUNT에서 제외된다.

    3. 오라클은 빈 문자열을 NULL로 취급

SELECT NVL(''. '값없음') 
  FROM DUAL;

 

9. 실무에서 가장 많이 쓰는 패턴

-- 금액 계산
SALARY + NVL(BONUS, 0)

-- 상태 표시
NVL2(APPROVE_DATE, '승인', '대기')

-- 연락처 처리
COALESCE(TEL, MOBILE, EMAIL, '없음')

 

마무리

NULL 처리는 SQL에서 조회 결과가 예상과 다르게 나오거나, 계산 오류가 발생할 수 있다. 이번 글에서 정리한 NVL, NVL2, COALESCE/ NULLIF만 제대로 익혀도 실무 SQL의 NULL 처리는 금방 할 것이다. 다음 글에서는 JOIN, GROUP BY, ROWNUM 등을 정리해 보려 합니다. 감사합니다. (_ _)