[SQL] 결측치 처리: "CASE WHEN", "IFNULL", "COALESCE"

Gi Woon Lee·2025년 3월 11일

SQL

목록 보기
24/33

결측치를 처리할 때 가장 흔하게 사용하는 함수는 CASE WHEN이이다.
만약 SQL을 조금 다뤄본 사람이라면 IFNULL을 사용할 것이고,
최적화까지 생각하는 사람이라면 COALESCE를 사용할 것이다.

  • 최적화를 생각하는 이유는 물론 성능을 위함이기도 하지만 많은 경우 훨씬 더 직관적으로 쿼리를 작성할 수 있기 때문이기도 하다.

  • 예시 코드

    SELECT 
        CASE WHEN FREEZER_YN IS NULL THEN "N" ELSE FREEZER_YN END AS FREEZER_YN, # CASE WHEN
        IFNULL(FREEZER_YN, "N") AS FREEZER_YN, # IFNULL
        COALESCE(FREEZER_YN, "N") AS FREEZER_YN # COALESCE
    FROM 
        FOOD_WAREHOUSE
  • 예시 쿼리에서 NULL값을 처리하는 3가지 방법이 다 나온다. 3가지 방법은 정확이 동일한 결과를 반환한다.

하나씩 정리해보겠다.

SQL에서 NULL 값 처리 방법 정리

데이터를 다룰 때 NULL 값 처리는 필수적이다. 특히 SQL에서는 CASE WHEN, IFNULL(), COALESCE() 같은 함수들을 활용하여 결측치를 다룰 수 있다.

NULL 값 처리 방법에는 여러 가지가 있지만, 성능과 가독성을 고려하면 COALESCE()가 가장 효율적이다.

아래의 SQL 코드를 살펴보자.

SELECT
    CASE WHEN FREEZER_YN IS NULL THEN 'N' ELSE FREEZER_YN END AS FREEZER_YN_CASE,  -- CASE WHEN
    IFNULL(FREEZER_YN, 'N') AS FREEZER_YN_IFNULL,  -- IFNULL
    COALESCE(FREEZER_YN, 'N') AS FREEZER_YN_COALESCE  -- COALESCE
FROM
    FOOD_WAREHOUSE;

이 세 가지 방법은 동일한 결과를 반환하지만, 각각의 차이점이 있다.


✅ 1. CASE WHEN을 사용한 NULL 처리

CASE WHEN FREEZER_YN IS NULL THEN 'N' ELSE FREEZER_YN END AS FREEZER_YN

🔹 장점

  • 가장 기본적인 방법으로, SQL을 처음 배우는 사람도 쉽게 이해할 수 있음.
  • CASE WHEN을 사용하면 다양한 조건을 추가할 수 있음.

🔸 단점

  • 코드가 길어지기 때문에 가독성이 떨어짐.
  • 간단한 NULL 처리에는 불필요하게 장황함.

✅ 2. IFNULL()을 사용한 NULL 처리

IFNULL(FREEZER_YN, 'N') AS FREEZER_YN

🔹 장점

  • CASE WHEN보다 간결하고 직관적임.
  • MySQL에서 지원하며, NULL이면 두 번째 인자의 값을 반환함.
  • NULL 처리할 대상과 기본값을 명확하게 구분할 수 있음.

🔸 단점

  • 두 개의 인자만 받을 수 있음 → 여러 개의 값 중에서 NULL이 아닌 첫 번째 값을 찾을 수 없음.
  • MySQL에서는 사용 가능하지만, 일부 다른 DBMS에서는 지원되지 않음.

✅ 3. COALESCE()를 사용한 NULL 처리

COALESCE(FREEZER_YN, 'N') AS FREEZER_YN

🔹 장점

  • IFNULL()보다 더 유연한 기능 제공 (여러 개의 값을 비교 가능).
  • NULL이 아닌 첫 번째 값을 반환하는 방식으로, 직관적이고 효율적임.
  • CASE WHEN보다 짧고, IFNULL()보다 확장성이 좋음.
  • 모든 SQL 표준(DBMS)에서 지원됨.

🔸 단점

  • IFNULL()과 비교했을 때, 단순한 NULL 처리에는 차이가 크지 않음.

✅ 비교 정리

방법코드 길이확장성성능지원 여부
CASE WHEN높음 (복잡한 조건 가능)보통모든 DBMS
IFNULL()짧음낮음 (두 개의 값만 비교 가능)빠름MySQL 등 일부 DBMS
COALESCE()짧음높음 (여러 개의 값 비교 가능)가장 빠름모든 DBMS

🚀 결론: 최적의 선택은?

  • 단순한 NULL 처리IFNULL()
  • 확장성이 필요한 경우COALESCE()
  • 여러 조건을 추가해야 하는 경우CASE WHEN

SQL을 다루면서 더 직관적이고 최적화된 코드를 작성하고 싶다면 COALESCE()를 적극 활용하는 것이 좋다! 🎯

0개의 댓글