오라클에서 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 등을 정리해 보려 합니다. 감사합니다. (_ _)
'오라클[ORACLE]' 카테고리의 다른 글
| [오라클] LIKE 문법 완벽 정리 (%, _) (0) | 2025.12.23 |
|---|---|
| [오라클] SELECT / INSERT / UPDATE / DELETE SQL 기본 문법 정리 (DML) (0) | 2025.12.16 |
| [오라클] TO_DATE 날짜 연산 정리 (0) | 2025.12.15 |
| [오라클] TO_CHAR와 TO_DATE 함수 정리 (0) | 2025.03.09 |
| [오라클] 날짜 형식 TO_DATE YYYY-MM-DD HH24:MI:SS (0) | 2024.05.29 |