본문 바로가기
Database

[Oracle] 오라클 NULLIF() 함수 완전 정복 : 두 값 비교로 NULL 반환하는 방식

by 코드개미 2025. 6. 7.

오라클 NULLIF() 함수 완전 정복: 두 값 비교로 NULL 반환하는 방식
[Oracle] NULLIF

 

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 구성이 가능합니다.

출처