繩鋸木斷水滴石穿/SQL

[프로그래머스] SQL 고득점 Kit : IS NULL

stranger95 2020. 2. 1. 15:34

※ 모든 코드는 Oracle을 기준으로 작성되었습니다.

 

1. 이름이 없는 동물의 아이디

문제 설명

Solution

1
2
3
4
SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NULL
ORDER BY ANIMAL_ID;

코드해석

칼럼 내에 값이 존재하지 않는 상태를 NULL이라고 합니다. 값이 0이거나 공백인 경우와는 다릅니다. 값이 아예 없어 비어있는 것이니 주의하세요. [WHERE (칼럼명) IS NULL]을 사용하면 비어있는 행을 조회할 수 있습니다.

2. 이름이 있 동물의 아이디

문제 설명

Solution

1
2
3
4
SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
ORDER BY ANIMAL_ID;

코드해석

1번과 반대인 경우로, 이름이 있는 동물을 조회합니다. NULL이 아니므로 NOT NULL이라고 써주면 비어있지 않은 행을 조회할 수 있습니다..

3. NULL 처리하기

문제 설명

Solution1

1
2
3
SELECT ANIMAL_TYPE, NVL(NAME, 'No name'), SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
 

코드해석1

NVL 함수는 칼럼 내 값이 NULL인 경우 출력될 값을 지정할 수 있습니다.

> NVL("칼럼명", "지정값")

NVL 함수를 적용하여 이름이 있는 동물은 그대로 이름이 출력되고, 이름이 없는 동물은 'No name'으로 출력되도록 합니다.

 

Solution2

1
2
3
4
SELECT ANIMAL_TYPE, CASE WHEN NAME IS NULL THEN 'No name'
                    WHEN NAME IS NOT NULL THEN NAME END, SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
 

 

코드해석2

CASE 함수를 적용하여 조건에 따라 출력될 값을 변경할 수 있습니다. CASE 함수는 조건을 사용자가 지정하고 싶은 만큼 설정할 수 있어 널리 활용됩니다. 모든 조건에 해당하지 않는 값은 NULL로 반환합니다.

> CASE WHEN 조건1 THEN 출력1

           WHEN 조건2 THEN 출력2

           ...

           WHEN 조건N THEN 출력N END (칼럼명)

CASE 함수를 적용하여 조건1로 NAME이 NULL인 경우 'No name'으로 출력하고, 조건2로 NAME이 NULL이 아닌 경우 NAME의 값을 그대로 출력하도록 하였습니다. NULL과 NOT NULL은 상호배타적인 관계이므로 [WHERE NAME IS NOT NULL THEN]대신 [ELSE]라고만 적어주셔도 동일한 결과를 얻을 수 있습니다.