반응형
오라클 NVL / NVL2 / COALESCE 함수
오라클 NULL 처리 함수(NVL, NVL2, COALESCE)는 데이터에서 빈 값 (NULL) 을 처리할 때 자주 쓰는 함수들이다.
예를 들어, 데이터에 NULL 값이 많으면 화면에 보여줄 때나, 계산할 때 정확한 값으로 바꿔줘야 할 경우가 생긴다.
🔹 NULL 처리 함수를 쓰면 좋은 경우
- 데이터에 빈 값(NULL)이 많아 명확한 값을 표시해야 할 때
- 조건에 따라 다른 결과를 반환하고 싶을 때
- 여러 컬럼 중 가장 먼저 나오는 비어있지 않은 값을 찾고 싶을 때
🔹 NULL 처리 함수의 장점
- 데이터 명확성 증가
- 쿼리 가독성 향상
- 조건적 데이터 처리가 쉬워짐
예제 테이블
[USERS] Table
ID | NAME | 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 표준 함수 (가장 범용적으로 사용 가능) |
반응형
'프로그래밍 > 데이터베이스' 카테고리의 다른 글
[Oracle] 오라클 RANK / DENSE_RANK / ROW_NUMBER 순위 함수 (0) | 2025.04.24 |
---|---|
[Oracle] 오라클 파티션(PARTITION) 개념 및 종류 (Oracle PARTITION) (0) | 2025.04.10 |
[Oracle] 오라클 인덱스(INDEX) 개념 및 종류 (Oracle INDEX) (0) | 2025.01.31 |
[Oracle] 오라클 뷰(VIEW)와 시노님(SYNONYM) 사용 방법 (Oracle View,Materialized View) (0) | 2025.01.29 |
[Oracle] 오라클 DB 링크 (DB Link) 사용 방법 (권한, 생성, 삭제, 조회) (0) | 2024.07.22 |