[MySQL] NULL값 대체하기 - CASE, IFNULL()

켈로그·2025년 6월 11일

SQL

목록 보기
8/20

NULL 값을 대체해야 할 때가 있음

예를 들어:

  • 이름이 없는 사용자에게 '이름 없음'을 표시하고 싶을 때
  • 수치 데이터가 NULL이면 0으로 간주하고 싶을 때
  • JOIN 결과에서 NULL이 생긴 칼럼을 가독성 있게 출력하고 싶을 때

이럴 때는 IFNULL() 함수나 CASE을 사용해서 NULL 값을 원하는 값으로 바꿀 수 있습니다.


IFNULL() 함수

IFNULL(컬럼명, 대체값)

  • 해당 컬럼이 NULL이면 → 대체값으로 바꿔서 출력
  • NULL이 아니면 → 원래 값 그대로 출력

예제

SELECT IFNULL(name, '이름 없음') AS name
FROM users;
  • name 컬럼이 NULL이면 '이름 없음'으로 출력되고
  • 값이 있으면 그대로 출력

주의사항

  • IFNULL()MySQL 전용 함수입니다.
    → Oracle 등에서는 NVL()
    → PostgreSQL에서는 COALESCE()를 대신 사용합니다.

CASE 문 사용

SELECT
  CASE 
    WHEN 컬럼명 IS NULL THEN 'NULL일 때 대체할 값'
    ELSE 컬럼명
  END AS 컬럼_별명
FROM 테이블명;

예제

SELECT 
  CASE 
    WHEN name IS NULL THEN '이름 없음'
    ELSE name
  END AS name
FROM users;
  • IFNULL()과 같은 결과지만, CASE는 더 범용적입니다.

IFNULL() vs CASE

항목IFNULL()CASE 문
가독성간단하고 짧다조금 더 길지만 유연함
기능 확장성오직 NULL 체크만 가능다양한 조건 분기 처리 가능
DBMS 호환성MySQL 전용대부분의 RDBMS에서 사용 가능
조건 다양성XWHEN 조건1 THEN, ELSE 등 가능

숫자나 날짜에도 사용 가능

SELECT IFNULL(age, 0) AS age FROM users;
SELECT IFNULL(join_date, '미입력') AS join_date FROM users;

또는

SELECT
  CASE 
    WHEN age IS NULL THEN 0
    ELSE age
  END AS age
FROM users;

  • NULL 값은 출력 시 꼭 처리해줘야 사용자에게 의미 있는 데이터를 보여줄 수 있습니다.
  • 간단하게 바꾸고 싶으면 IFNULL() 사용
  • 조건이 많거나 호환성이 중요하면 CASE 문 사용

실제 업무에서는 조회용 화면에서 NULL을 "미정", "없음", "0", "미입력" 등으로 바꾸는 경우가 많습니다. 상황에 맞는 처리 방법을 선택하세요!

profile
호랑이기운

0개의 댓글