MySQL에서 NULL을 치환하는 3가지 방법

wannabeking·2023년 2월 26일
0

데이터베이스

목록 보기
4/4
post-thumbnail

MySQL SELECT 결과에서 특정 컬럼이 NULL인 경우 치환하는 3가지 방법에 대하여 알아보자.

예시로 풀어볼 문제는 여기에서 제공한다.



IFNULL

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;

IFNULLIF로 대체 가능하기도 하다.
IFNULL(A, 'A')IF(IS NULL(A), 'A')와 같다.



CASE

CASE는 NULL 치환은 물론, 조건에 따른 분기를 더욱 추가할 수 있다.
프로그래밍 언어에서 switch문을 생각하면 된다.

CASE
	WHEN 조건1 THEN 반환값1
    WHEN 조건2 THEN 반환값2
    ...
    ELSE 나머지 반환값
END

WHENTHEN은 항상 일대일이어야 한다.
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

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를 사용하여 문제를 해결할 수 있다.



profile
내일은 개발왕 😎

0개의 댓글