아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 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이 어떤 역할을 수행하는지는 이해했지만 어떻게 수행하는지까지는 완벽하지 않은 것 같다.
'프로그래머스 > 코딩테스트 연습' 카테고리의 다른 글
SQL DATETIME에서 DATE로 형 변환 (0) | 2024.03.07 |
---|---|
sql 가격이 제일 비싼 식품의 정보 출력하기 (0) | 2024.03.07 |
sql NULL 처리하기 (0) | 2024.03.04 |
sql 이름에 el이 들어가는 동물 찾기 (0) | 2024.03.04 |
sql 동명 동물 수 찾기 (0) | 2024.03.04 |