감 잃지말고 개발하기

[프로그래머스] [Oracle] [Level 1] 어린 동물 찾기 본문

프로그래머스/Oracle

[프로그래머스] [Oracle] [Level 1] 어린 동물 찾기

persii 2023. 3. 3. 11:43

문제

ANIMAL_INS 테이블

Column name Type Nullable Description
ANIMAL_ID VARCHAR(N) FALSE 동물 아이디
ANIMAL_TYPE VARCHAR(N) FALSE 생물 종
DATETIME DATETIME FALSE 보호 시작일
INTAKE_CONDITION VARCHAR(N) FALSE 보호 시작 시 상태
NAME VARCHAR(N) TRUE 이름
SEX_UPON_INTAKE VARCHAR(N) FALSE 성별 및 중성화 여부

위 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블이다.

동물 보호소에 들어온 동물 중 젊은 동물의 아이디와 이름을 조회하는 SQL 문을 작성하는데, 결과는 아이디 순으로 조회해주시오.

이때, 젊은 동물은 INTAKE_CONDITION이 Aged가 아닌 경우를 뜻한다.


 

해결

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE UPPER(INTAKE_CONDITION) <> 'AGED'
ORDER BY ANIMAL_ID;

 

 추가 설명 

1. 비교 연산자 IN()을 쓰면 오답인 이유

SELECT ANIMAL_ID, NAME 
FROM ANIMAL_INS 
WHERE UPPER(INTAKE_CONDITION) IN ('NORMAL', 'INJURED', 'SICK')
ORDER BY ANIMAL_ID

 

결과로만 본다면 위 쿼리문과 해결 쿼리문의 조회결과는 동일하다.

하지만 위 쿼리문의 경우, 조건절에서 INTAKE_CONDITION이 NORMAL, INJURED, SICK 경우의 행만 조회되도록 명시하고 있다. 

그러나 이는 내가 전체 데이터를 조회해봤을 때, INTAKE_CONDITION 값을 NORMAL, INJURED, SICK, AGED로만 보았기 때문에 이렇게 한정하여 조건을 만든 것이다.

즉, INTAKE_CONDITION 컬럼 값이 위 4개의 값 외에도 존재할 수 있기 때문에 위 쿼리문은 답이 될 수 없다.