본문 바로가기

프로그래밍/데이터베이스

[Oracle] 오라클 NVL / NVL2 / COALESCE 함수 차이점 정리

반응형

오라클 NVL / NVL2 / COALESCE 함수

오라클 NULL 처리 함수(NVL, NVL2, COALESCE)는 데이터에서 빈 값 (NULL) 을 처리할 때 자주 쓰는 함수들이다.

예를 들어, 데이터에 NULL 값이 많으면 화면에 보여줄 때나, 계산할 때 정확한 값으로 바꿔줘야 할 경우가 생긴다.

🔹 NULL 처리 함수를 쓰면 좋은 경우

  • 데이터에 빈 값(NULL)이 많아 명확한 값을 표시해야 할 때
  • 조건에 따라 다른 결과를 반환하고 싶을 때
  • 여러 컬럼 중 가장 먼저 나오는 비어있지 않은 값을 찾고 싶을 때

🔹 NULL 처리 함수의 장점

  • 데이터 명확성 증가
  • 쿼리 가독성 향상
  • 조건적 데이터 처리가 쉬워짐

예제 테이블

[USERS] Table

ID NAME EMAIL TEL1 TEL2
1 김철수 chul@example.com NULL 010-1111-2222
2 이영희 NULL 010-3333-4444 NULL
3 박민수 min@example.com NULL NULL
4 최지은 NULL NULL NULL
5 강호동 hodong@example.com 010-5555-6666 010-7777-8888

오라클 NULL 처리 함수 종류 및 사용 방법

1. NVL 함수 (오라클 전용)

▶ 사용 방법

NVL은 값이 NULL일 때 지정한 다른 값으로 대체할 때 사용한다.

SELECT NAME, NVL(EMAIL, '이메일 없음') AS EMAIL
FROM USERS;

 

▶ 결과

김철수 | chul@example.com
이영희 | 이메일 없음
박민수 | min@example.com
최지은 | 이메일 없음
강호동 | hodong@example.com

 

▶ 주의사항

  • NVL은 딱 2개의 인자만 받을 수 있다.
  • 반환 값의 데이터 타입은 첫 번째 인자와 같아야 한다. 

2. NVL2 함수 (오라클 전용)

▶ 사용 방법

NVL2는 첫 번째 값이 NULL인지 아닌지에 따라 두 가지 중 하나를 선택한다.

SELECT NAME, NVL2(TEL1, '연락처 있음', '연락처 없음') AS TEL_STATUS
FROM USERS;

 

▶ 결과

김철수 | 연락처 없음
이영희 | 연락처 있음
박민수 | 연락처 없음
최지은 | 연락처 없음
강호동 | 연락처 있음

 

▶ 주의사항

  • NVL2는 인자는 정확히 3개를 받아야 한다.
  • 조건 분기 처리에 좋다.

3. COALESCE 함수 (SQL 표준 함수)

▶ 사용 방법

COALESCE는 여러 값 중에서 처음으로 나오는 NULL이 아닌 값을 반환한다.

SELECT NAME, COALESCE(TEL1, TEL2, '연락처 없음') AS TEL
FROM USERS;

 

▶ 결과

김철수 | 010-1111-2222
이영희 | 010-3333-4444
박민수 | 연락처 없음
최지은 | 연락처 없음
강호동 | 010-5555-6666

 

▶ 주의사항

  • NVL과 다르게 여러 인자를 받을 수 있다.
  • SQL 표준이어서 다른 DB에서도 같은 방식으로 쓸 수 있다.

성능 고려사항

  • NVL을 조건절에서 과도하게 쓰면 인덱스를 사용하지 못할 수 있다.
  • NVL2는 조건을 잘 쓰면 성능을 높일 수 있다.
  • COALESCE 함수는 인자가 많으면 성능에 영향을 줄 수 있으니 꼭 필요한 값만 넣어야 한다.

정리

  • NVL: NULL을 지정된 값으로 대체 (오라클 전용)
  • NVL2: NULL 여부에 따라 다른 값 반환 (오라클 전용)
  • COALESCE: 여러 값 중 첫 번째 NULL 아닌 값 반환 (SQL 표준)
함수 Oracle MySQL PostgreSQL SQL Server 설명
NVL O X X X Oracle 전용 NULL 대체 함수
NVL2 O X X X Oracle 전용 NULL 조건 분기 함수
COALESCE O O O O SQL 표준 함수 (가장 범용적으로 사용 가능)

 

반응형