728x90
NULL 처리하기
문제 설명
코딩테스트 연습 - NULL 처리하기 | 프로그래머스 스쿨
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 프로그래밍을 모르는 사람들은 NULL이라는 기호를 모르기 때문에, 이름이 없는 동물의 이름은 "No name"으로 표시해 주세요.
입출력 예
예를 들어 ANIMAL_INS 테이블이 다음과 같다면
마지막 줄의 개는 이름이 없기 때문에, 이 개의 이름은 "No name"으로 표시합니다. 따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.
※ 컬럼 이름은 일치하지 않아도 됩니다.
입출력 예 설명
sql 작성시 name 값이 null인 경우 No name 으로 표시해야된다.
null 관련 함수 중에서
- case
- ifnull
- nvl
- decode
4가지로 작성해 보았다.
풀이코드
1. case
- mysql & oracle
- 형식
- case
- when 조건1 컬럼명 like '%키워드%' then '반환 값'
- when 조건2 컬럼명 like '%키워드%' then '반환 값'
- else 조건 제외한 '반환 값'
- end as 별칭
sql
-- 코드를 입력하세요
SELECT A.ANIMAL_TYPE,
CASE
WHEN A.NAME IS NULL THEN 'No name'
ELSE A.NAME
END AS NAME
, A.SEX_UPON_INTAKE
FROM ANIMAL_INS A
ORDER BY A.ANIMAL_ID;
실행 결과
잘못된 코드
-- 틀린 코드
SELECT A.ANIMAL_TYPE, A.NAME, A.SEX_UPON_INTAKE
FROM ANIMAL_INS A
CASE
WHEN A.NAME IS NULL THEN "No name"
ELSE A.NAME
END AS NAME
ORDER BY A.ANIMAL_ID;
case문을 where과 같이 조건문으로 사용하는 건줄 알았는데
잘못 알고 사용하고 있었다ㅠㅠ
그래서
case문은 select - from 사이에 위치해야 된다
2. ifnull
- mysql only
- 형식
- ifnull(컬럼명, 'null인 경우 반환값')
sql
-- mysql
-- 코드를 입력하세요
SELECT A.ANIMAL_TYPE
, IFNULL(A.NAME, 'No name')
, A.SEX_UPON_INTAKE
FROM ANIMAL_INS A
ORDER BY A.ANIMAL_ID;
실행 결과
같음
3. nvl
- oracle only
- 형식
- nvl(컬럼명, 'null인 경우 반환값')
sql
-- oracle
-- 코드를 입력하세요
SELECT A.ANIMAL_TYPE
, NVL(A.NAME, 'No name')
, A.SEX_UPON_INTAKE
FROM ANIMAL_INS A
ORDER BY A.ANIMAL_ID;
실행 결과
같음
4. decode
- oracle only
- 형식
- decode(컬럼명, 조건1, 결과1, 조건2, 결과2, ... , 기본값)
sql
-- 코드를 입력하세요
SELECT A.ANIMAL_TYPE
, DECODE(A.NAME, NULL, 'No name', A.NAME)
, A.SEX_UPON_INTAKE
FROM ANIMAL_INS A
ORDER BY A.ANIMAL_ID;
실행 결과
같음
널 다지기시간
정리해 보니 case가 젤 비효율적이다..한줄이면 되는데!
728x90
'제로베이스 > 코딩테스트' 카테고리의 다른 글
[프로그래머스 mysql oracle] 오랜 기간 보호한 동물(1) (2) | 2022.09.16 |
---|---|
[프로그래머스 mysql oracle] 동명 동물 수 찾기 (1) | 2022.07.10 |
[프로그래머스 mysql oracle] 중성화 여부 파악하기 (1) | 2022.07.07 |
[프로그래머스 mysql oracle] 입양 시각 구하기(1) (0) | 2022.07.06 |
[프로그래머스 mysql oracle] 최댓값 구하기 (0) | 2022.07.04 |