MySQL SELECT 결과에서 특정 컬럼이 NULL인 경우 치환하는 3가지 방법에 대하여 알아보자.
예시로 풀어볼 문제는 여기에서 제공한다.
IFNULL
은 NULL 값을 치환하는 가장 간단한 방법이다.
IFNULL(컬럼, 'NULL인 경우 대체할 값')
해당 방법으로 예시 문제를 풀이한다면, 답은 다음과 같다.
-- IF NULL 사용
select animal_type, ifnull(name, 'No name') as 'name', sex_upon_intake
from animal_ins
order by animal_id asc;
IFNULL
은IF
로 대체 가능하기도 하다.
IFNULL(A, 'A')
는IF(IS NULL(A), 'A')
와 같다.
CASE
는 NULL 치환은 물론, 조건에 따른 분기를 더욱 추가할 수 있다.
프로그래밍 언어에서 switch문을 생각하면 된다.
CASE
WHEN 조건1 THEN 반환값1
WHEN 조건2 THEN 반환값2
...
ELSE 나머지 반환값
END
WHEN
과THEN
은 항상 일대일이어야 한다.
ELSE
에는 모든 조건에 해당되지 않는 경우이다.
CASE
를 사용한 예제 풀이는 다음과 같다.
-- CASE 사용
select
animal_type,
case
when name is null then 'No name'
else name
end as 'name',
sex_upon_intake
from animal_ins
order by animal_id asc;
COALESCE
는 매개변수 중 NULL이 아닌 첫 번째 값을 반환한다.
COALESCE(컬럼1, 컬럼2, ... , NULL이 아닌 값)
예를 들어 USER_INFO
테이블에 DOG
, CAT
컬럼에 키우고 있다면 이름을, 키우지 않는다면 NULL이 입력되어 있다고 가정하자. (예시일 뿐이지 테이블 설계를 이렇게 하면 안됨)
NAME | DOG | CAT
aaa | NULL | NULL
bbb | 멍멍이 | NULL
ccc | NULL | 야옹이
ddd | 강아지 | 고양이
위와 같은 테이블에서 존재하는 애완동물의 이름(둘다 존재하면 강아지)을 출력하고, 없으면 "No animal"을 출력해야 한다면,
COALESCE(DOG, CAT, 'No animal')
과 같이 사용할 수 있다.
위 테이블의 경우 결과는 다음과 같다.
No animal
멍멍이
야옹이
강아지
다시 예시로 넘어와서,
select animal_type, coalesce(name, 'No name') as 'name', sex_upon_intake
from animal_ins
order by animal_id asc;
위 쿼리와 같이 COALESCE
를 사용하여 문제를 해결할 수 있다.