본문 바로가기
카테고리 없음

오라클 NULL 처리 함수 총정리

by 기록하는 거부기 2025. 7. 9.

SQL을 다루다 보면 가장 자주 마주치는 값 중 하나가 NULL입니다. 오라클에서도 예외는 아니며, 이 NULL 값을 적절히 처리하지 않으면 예상치 못한 결과가 발생할 수 있습니다. 오늘은 오라클에서 NULL 값을 처리하는 주요 함수들을 정리하고, 각각의 용도와 차이를 실제 예제를 통해 소개해드리겠습니다.


1. 오라클에서 NULL이란?

NULL은 값이 없음을 의미하며, 0이나 공백과는 다릅니다.
연산이나 비교 시 주의해야 할 점은, NULL과의 비교는 항상 결과가 UNKNOWN이라는 점입니다.

SELECT * FROM users WHERE name = NULL; -- X (항상 false)
SELECT * FROM users WHERE name IS NULL; -- O

NULL을 처리하지 않고 연산하면 원하는 결과를 얻기 어렵기 때문에 NULL 전용 함수들을 적극 활용해야 합니다.


2. NVL 함수로 기본값 처리하기

가장 많이 쓰이는 NULL 처리 함수는 NVL()입니다.
NULL 값을 다른 값으로 대체해주는 함수로, 기본값 지정에 유용합니다.

SELECT NVL(phone, '번호없음') FROM users;
  • NVL(column, default): 컬럼이 NULL이면 default 값을 반환
  • 문자열, 숫자 등 다양한 타입에 적용 가능

주의할 점은 두 인자의 데이터 타입이 같아야 한다는 것입니다.


3. NVL2 함수로 조건 분기하기

NVL2()는 NULL 여부에 따라 다른 값을 반환합니다.
즉, NULL이냐 아니냐에 따라 각각 다른 로직을 적용할 수 있습니다.

SELECT NVL2(phone, '등록됨', '미등록') FROM users;
  • NVL2(expr, not_null_value, null_value)
  • expr이 NULL이 아니면 not_null_value, NULL이면 null_value 반환

조건 분기에 따라 메시지를 바꾸거나 상태를 표시할 때 유용합니다.


4. NULLIF와 DECODE의 활용

NULLIF()는 두 값이 같으면 NULL을, 다르면 첫 번째 값을 반환합니다.
중복 체크나 예외 상황 처리 시 간결한 코드 작성을 도와줍니다.

SELECT NULLIF(score, 0) FROM results;
  • score가 0이면 NULL, 아니면 그대로 반환

한편, DECODE()는 오라클에서만 사용 가능한 CASE문과 유사한 함수입니다.

SELECT DECODE(status, NULL, '미정', '확정') FROM orders;

하지만 DECODE()는 NULL 비교가 까다롭기 때문에, 명확한 비교에는 CASE WHEN 구문을 추천합니다.


5. COALESCE 함수로 다중 NULL 처리

여러 개의 컬럼 중 NULL이 아닌 첫 번째 값을 가져오고 싶을 때는 COALESCE()를 사용합니다.

SELECT COALESCE(mobile, home_phone, '번호없음') FROM contacts;
  • 가장 먼저 NULL이 아닌 값을 반환
  • 여러 필드 중 우선순위가 있는 경우에 매우 유용

자바의 Optional.orElse()나 JS의 || 연산자와 유사한 개념으로 이해하면 쉽습니다.


✅ 마무리

오라클에서의 NULL 값 처리는 단순한 기본값 지정 이상의 의미를 갖습니다.
실무에서는 NVL, NVL2, COALESCE 등 다양한 함수들을 조합하여 복잡한 조건을 처리하게 됩니다.
특히 보고서, 통계, 사용자 정보 처리에서 정확한 NULL 제어는 데이터 품질을 좌우합니다.
이번 글에서 소개한 오라클 NULL 처리 함수들을 익혀두시면 데이터 처리 능력이 한층 강화될 것입니다.