DB

[MySQL] NULLIF로 두 값 비교 후 조건 처리하기

인생아 2025. 7. 25. 09:43
반응형

MySQL에서 NULLIF() 함수는 두 값을 비교해서 같으면 NULL을 반환하고, 다르면 첫 번째 값을 그대로 반환하는 특이한 흐름 제어 함수이다. 주로 0 나누기 오류 방지, 조건적 NULL 처리, 중복 체크 회피 등에 사용된다.

NULLIF 함수 기본 문법

NULLIF(값1, 값2)
  • 값1 = 값2이면 NULL 반환.
  • 값1 ≠ 값2이면 값1을 반환.

이 단순한 로직이 다양한 실무에서 꽤 강력한 기능을 한다.

예제 1: 값이 같으면 NULL로 처리

SELECT NULLIF(100, 100); -- 결과: NULL
SELECT NULLIF(100, 50);  -- 결과: 100
반응형

0으로 나누기 방지: 실무 최강 활용법

NULLIF는 0으로 나눴을 때 발생하는 오류를 방지하기 위한 가장 흔한 방법이다.

예제 2: 나눗셈 계산 시 0 회피

SELECT sales,
       targets,
       sales / NULLIF(targets, 0) AS 달성률
FROM sales_data;

targets가 0일 경우 NULLIF(targets, 0)는 NULL을 반환하므로 sales / NULL이 되어 오류 없이 처리된다.

조건적 NULL 반환: 중복 회피

NULLIF를 사용하면 특정 조건에서만 NULL로 대체할 수 있어, 중복된 데이터를 걸러낼 때도 유용하다.

예제 3: 최근 변경된 항목만 추출

SELECT *,
       NULLIF(current_value, previous_value) AS 변경여부
FROM version_tracking;

변경이 없는 경우 NULL, 변경된 경우에만 current_value를 반환한다.

IF, IFNULL과의 차이점

함수명 역할
IF() 조건에 따라 두 값 중 하나 선택
IFNULL() NULL일 경우 대체값 반환
NULLIF() 같으면 NULL, 다르면 첫 번째 값 반환

NULLIF()는 조건이 아닌 '두 값의 비교 결과'에 따라 NULL을 반환하는 점이 가장 큰 특징이다.

정리

  • NULLIF(a, b)는 a == b일 때 NULL, 아니면 a를 반환한다.
  • 주로 0 나누기 방지, 조건부 NULL 처리, 변경값 탐지에 활용된다.
  • IF나 IFNULL과 다르게 직접적인 비교 기반이며, 비교 결과 자체가 조건이 된다.
  • 실무에서 안정성과 유연성을 높이기 위한 고급 테크닉으로 널리 쓰인다.

참고 문서

https://dev.mysql.com/doc/refman/8.0/en/control-flow-functions.html#function_nullif

 

반응형