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이 아닌 최초의 값을 반환한다!
'Problem Solving > Programmers' 카테고리의 다른 글
[ SQL 고득점 kit ] String, Date - mysql (0) | 2021.06.26 |
---|---|
[ SQL 고득점 kit ] JOIN - mysql (0) | 2021.06.25 |
[ SQL 고득점 kit ] GROUP BY - mysql (0) | 2021.06.22 |
[ SQL 고득점 kit ] SUM, MAX, MIN - mysql (0) | 2021.06.22 |
[ SQL 고득점 kit ] SELECT - mysql (0) | 2021.06.21 |
댓글