Computer Science/자료구조와 알고리즘

[프로그래머스\SQL 고득점 kit] ISNULL (1~3번: Mysql) (3번: Oracle)

BS Kwak 2021. 12. 20. 17:12

1. 이름이 없는 동물의 아이디 -> IS NULL

동물 보호소에 들어온 동물 중, 이름이 없는 채로 들어온 동물의 ID를 조회하는 SQL 문을 작성해주세요. 단, ID는 오름차순 정렬되어야 합니다.

SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NULL
ORDER BY ANIMAL_ID

조건 : 이름이 없는 채로 들어온 동물의 ID -> WHERE NAME IS NULL

" == NULL " 의 형태는 쓸 수 없다 

 

2. 이름이 있는 동물의 아이디 -> IS NOT NULL

동물 보호소에 들어온 동물 중, 이름이 있는 동물의 ID를 조회하는 SQL 문을 작성해주세요. 단, ID는 오름차순 정렬되어야 합니다.

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

조건 : 이름이 없는 채로 들어온 동물의 ID -> WHERE NAME IS NOT NULL

 

3. NULL 처리하기 -> IFNULL

입양 게시판에 동물 정보를 게시하려 합니다. 동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 프로그래밍을 모르는 사람들은 NULL이라는 기호를 모르기 때문에, 이름이 없는 동물의 이름은 "No name"으로 표시해 주세요.

SELECT ANIMAL_TYPE, IFNULL(NAME,"No name") AS NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

ANIMAL_TYPE, NAME, SEX_UPON_INTAKE 조회

여기서 NAME은 NULL일 때, "No name" , NULL이 아닐 때 NAME으로 분류된다.

이때 사용하는 함수는 " IFNULL"

 

cf) IFNULL vs NULLIF 

  • IFNULL(A, B) : A가 NULL이면 B리턴, A가 NULL이 아니면 A를 리턴
  • NULLIF(A,B) : A==B이면 NULL 리턴, A!=B이면 A 리턴

 

 ** ORACLE의 경우, 더 많은 함수를 쓸 수 있다!

 

NVL, NVL2, DECODE

  • NVL(A,B) : A가 NULL이면 B 리턴, A가 NULL이 아니면 A를 리턴 (MySQL의 IFNULL과 동일)
  • NVL2(A,NULL이 아닐경우 값,NULL일 경우의 값) : A,  A가 NULL이 아닐 경우와 A가 NULL일 경우
  • DECODE(A,IF_1, THEN_1, IF_2, THEN2, ...,default값) : 우리가아는 case문이랑 비슷, A가 IF_1이면 THEN_1, IF_2면 THEN_2 ... 없으면 default값 리턴
--NVL 사용
SELECT ANIMAL_TYPE, NVL(NAME,'No name') AS NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

--NVL2 사용
SELECT ANIMAL_TYPE, NVL2(NAME,NAME,'No name') AS NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

--DECODE 사용
SELECT ANIMAL_TYPE, DECODE(NAME, NULL,'No name',NAME) AS NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;