1. NULLIF 함수란?
NULLIF() 함수는 두 개의 값을 비교하여, 두 값이 같으면 NULL을 반환하고, 그렇지 않으면 첫 번째 값을 반환하는 Oracle SQL 내장 함수입니다. NULL 처리, 나누기 연산 예외 방지, 조건 분기 등에서 자주 사용되며, 간단한 구조임에도 실무에서 매우 유용하게 쓰입니다. 기본 문법은 다음과 같습니다:
NULLIF(expr1, expr2)
- expr1: 비교할 첫 번째 표현식
- expr2: 두 번째 비교값
2. 기본 사용 예제
두 값이 동일하면 NULL, 그렇지 않으면 첫 번째 값을 반환합니다.
SELECT NULLIF(100, 100) AS result1, -- 결과: NULL
NULLIF(100, 200) AS result2 -- 결과: 100
FROM DUAL;
실제 쿼리 실행 결과:
RESULT1 | RESULT2
--------|--------
NULL | 100
3. 나누기 연산에서의 활용
NULLIF는 0으로 나누기 오류를 방지하는 데 매우 자주 사용됩니다. 다음 예제를 보겠습니다:
SELECT EMPLOYEE_ID,
SALARY,
COMMISSION_PCT,
SALARY / NULLIF(COMMISSION_PCT, 0) AS RESULT
FROM EMPLOYEES;
COMMISSION_PCT
가 0이면 NULL을 반환하므로, 0으로 나누는 오류를 방지할 수 있습니다.
4. 문자열 비교 예제
문자열도 NULLIF로 비교할 수 있습니다.
SELECT CUSTOMER_NAME,
NULLIF(CUSTOMER_NAME, '홍길동') AS filtered_name
FROM CUSTOMERS;
‘홍길동’이라는 이름은 NULL로 치환되어 출력되지 않도록 할 수 있습니다.
5. 조건 분기 처리 예제
NULLIF를 활용하면 단순한 조건 분기에도 응용 가능합니다.
SELECT PRODUCT_ID,
NULLIF(STOCK_QTY, 0) AS CHECK_STOCK
FROM PRODUCTS;
재고가 0이면 NULL, 아니면 재고 수량을 반환합니다.
6. NULLIF vs DECODE vs CASE
함수명 | 특징 | 사용 예시 |
---|---|---|
NULLIF | 두 값이 같으면 NULL 반환 | NULLIF(A, B) |
DECODE | 값을 비교해 결과 반환 (IF-ELSE 대체) | DECODE(A, B, NULL, A) |
CASE | 복잡한 조건 분기 표현 가능 | CASE WHEN A = B THEN NULL ELSE A END |
7. 주의사항 및 팁
- 데이터 타입 일치: expr1과 expr2는 동일하거나 호환 가능한 타입이어야 함
- 인덱스 주의: WHERE 절에 NULLIF를 사용하면 인덱스 효율 저하 우려
- 단순한 비교에 적합: 복잡한 로직에는 CASE 문이 더 유리함
8. 실무 활용 예시 요약
- 0 나누기 방지:
A / NULLIF(B, 0)
- 불필요한 출력 회피:
NULLIF(name, '홍길동')
- 조건 분기 처리 간소화
9. 결론
Oracle의 NULLIF 함수는 단순하지만 매우 유용한 조건 처리 함수로, 특히 연산 중 오류를 방지하거나 조건 분기를 간단히 처리할 때 실무에서 널리 활용됩니다. 복잡한 CASE 문을 작성하지 않고도 간결하게 로직을 표현할 수 있으며, DECODE나 NVL과 병행하여 더욱 유연한 SQL 구성이 가능합니다.
출처
- Oracle 공식 문서: https://docs.oracle.com/en/
- Oracle SQL Language Reference: NULLIF Function
- 실무 SQL 예제 기반 작성
'Database' 카테고리의 다른 글
[Oracle] 오라클 DECODE() 함수로 IF-ELSE 로직을 SQL에서 구현하는 방법 (0) | 2025.06.07 |
---|---|
[Oracle] 오라클 COALESCE() 함수로 복잡한 CASE 문 없이 NULL 처리하기 (0) | 2025.06.07 |
[Oracle] 오라클 NVL() 함수로 NULL 값을 기본값으로 바꾸는 방법 (0) | 2025.06.07 |
[Oracle] 오라클 NVL2() 함수로 NULL 유무에 따른 조건 처리 쉽게 구현하기 (0) | 2025.06.07 |
[Oracle] 오라클 ROWIDTOCHAR()로 ROWID를 문자형으로 변환하는 방법 (0) | 2025.06.07 |