본문 바로가기
프로그래머스/코딩테스트 연습

sql 오랜 기간 보호한 동물(1)

by 포잉띠 2024. 3. 6.

아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다.

 

 

입양을 가지 못한 동물의 NAME, DATETIME을 조회하기 위해 select에 ANIMAL_INS를 사용했다

ANIAML_INS left join ANIMAL_OUTS 를 하면 

ANIMAL_INS 테이블에만 있는 ANIMAL_ID (입양을 가지 못한 동물의 ID) 가

ANIMAL_OUTS 테이블에서는 존재할수가 없다.

ID 기준으로 left join을 했을 때 입양을 가지 못한 동물의 ID의 레코드에 NULL값이 존재할 것이다.

ANYMAL_TYPE, NAME, SEX_UPON_OUTCOME 컬럼 같은 경우에는 중복된 값들이 많아 정확히 분별해내기 어렵다고 판단하여 DATETIME 컬럼에서 null이 있는 레코드만 조회해서 정렬했다.

3마리만 출력하기 위해 limit 3 주었다.

 

정답코드

 

 

 

SELECT ANIMAL_INS.NAME, ANIMAL_INS.DATETIME 
from ANIMAL_INS
left join ANIMAL_OUTS on ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
where ANIMAL_OUTS.DATETIME is null
order by DATETIME asc
limit 3

 

 

딱 완벽하게 알고 풀기보다는 where 절에서 진짜 절었다.

ANIMAL_INS.DATETIME is null 을 하면 테케에서 아무런 값이 출력되지 않아서 

OUTS로 바꾸고 했는데 테케 출력이 괜찮아서 제출 했더니 정답이 떠버렸다...

쿼리를 다시 작성해보면서 OUTS의 ID들을 포함한 INS 에 OUTS를 left join 했는데,

INS에서 null을 찾으려는 것 자체가 오류였다는것을 깨달았다.

 Join이 어떤 역할을 수행하는지는 이해했지만 어떻게 수행하는지까지는 완벽하지 않은 것 같다.