본문 바로가기
Problem Solving/Programmers

[ SQL 고득점 kit ] IS NULL - mysql

by IM조이 2021. 6. 23.

01 이름이 없는 동물의 아이디

SELECT ANIMAL_ID FROM ANIMAL_INS
WHERE NAME IS NULL
ORDER BY ANIMAL_ID;

( 프로그래머스에서는 이미 ID순으로 정렬이 되어있어서 마지막 코드가 없어도 통과는 되지만, 문제 조건에 ID 순 정렬을 요구하고 있으므로 써주는 게 더 정확 )

 

02 이름이 있는 동물의 아이디

SELECT ANIMAL_ID FROM ANIMAL_INS
WHERE NAME IS NOT NULL
ORDER BY ANIMAL_ID;

또는 NOT의 위치를 앞으로 가져와서

SELECT ANIMAL_ID FROM ANIMAL_INS
WHERE NOT NAME IS NULL
ORDER BY ANIMAL_ID;

 

03 NULL 처리하기

데이터베이스 자체를 바꾸지 않으면서 Null을 처리하는 방법은 크게 3가지

  • IFNULL
  • CASE
  • COALESCE

03-1 IFNULL

SELECT ANIMAL_TYPE,(SELECT IFNULL (NAME,'No name')) NAME,SEX_UPON_INTAKE 
FROM ANIMAL_INS 
ORDER BY ANIMAL_ID;

만약, 대체할 이름이 길어져서 보기 안좋을 것 같다면 변수 활용

SET @NAME = 'No name';
SELECT ANIMAL_TYPE,(SELECT IFNULL (NAME,@NAME)) NAME,SEX_UPON_INTAKE 
FROM ANIMAL_INS 
ORDER BY ANIMAL_ID;

 

03-2 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;

 

03-3 COALESCE

SELECT ANIMAL_TYPE,COALESCE(NAME,"No name"),SEX_UPON_INTAKE 
FROM ANIMAL_INS 
ORDER BY ANIMAL_ID;

참고로 COALESCE (오라클에서는 NVL() )는 지정한 표현식에서 NULL이 아닌 최초의 값을 반환한다!

댓글