결측치를 처리할 때 가장 흔하게 사용하는 함수는
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가지 방법은 정확이 동일한 결과를 반환한다.
하나씩 정리해보겠다.
데이터를 다룰 때 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;
이 세 가지 방법은 동일한 결과를 반환하지만, 각각의 차이점이 있다.
CASE WHEN을 사용한 NULL 처리CASE WHEN FREEZER_YN IS NULL THEN 'N' ELSE FREEZER_YN END AS FREEZER_YN
CASE WHEN을 사용하면 다양한 조건을 추가할 수 있음.IFNULL()을 사용한 NULL 처리IFNULL(FREEZER_YN, 'N') AS FREEZER_YN
CASE WHEN보다 간결하고 직관적임.COALESCE()를 사용한 NULL 처리COALESCE(FREEZER_YN, 'N') AS FREEZER_YN
IFNULL()보다 더 유연한 기능 제공 (여러 개의 값을 비교 가능).CASE WHEN보다 짧고, IFNULL()보다 확장성이 좋음.IFNULL()과 비교했을 때, 단순한 NULL 처리에는 차이가 크지 않음.| 방법 | 코드 길이 | 확장성 | 성능 | 지원 여부 |
|---|---|---|---|---|
| CASE WHEN | 김 | 높음 (복잡한 조건 가능) | 보통 | 모든 DBMS |
| IFNULL() | 짧음 | 낮음 (두 개의 값만 비교 가능) | 빠름 | MySQL 등 일부 DBMS |
| COALESCE() | 짧음 | 높음 (여러 개의 값 비교 가능) | 가장 빠름 | 모든 DBMS |
IFNULL()COALESCE()CASE WHENSQL을 다루면서 더 직관적이고 최적화된 코드를 작성하고 싶다면 COALESCE()를 적극 활용하는 것이 좋다! 🎯