문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/59044
코드 및 설명
입양을 못간 동물 중,
가장 오래 보호소에 있었던 동물 3마리 이름과 보호 시작일 조회
- animal_outs 에 기록이 없는 동물
- 그 중 보호 시작일이 빠른애
- limit 3 3마리 제한
SELECT AI.NAME,AI.DATETIME
FROM ANIMAL_INS AS AI
LEFT JOIN ANIMAL_OUTS AS AO
ON AI.ANIMAL_ID = AO.ANIMAL_ID
WHERE AO.ANIMAL_ID IS NULL
ORDER BY AI.DATETIME ASC
LIMIT 3
LEFT OUTER JOIN을 이용
- ANIMAL_INS 를 기준으로 하기 때문에 LEFT OUTER JOIN사용
- LEFT OUTER JOIN -> 왼쪽에 데이터 결과를 모두 가져 온다음 오른 쪽 데이터의 매칭하고, 매칭 되는 데이터가 없는 경우 NULL 표시를 하고 전부 만들어진다.
- LEFT JOIN을 할때 ON을 통해서 AI.ANIMAL_ID = AO.ANIMAL_ID를 해서 테이블을 합친다.
- LEFT 테이블 기준이기 때문에 둘이 ID가 같은게 없는 경우에는 AO.ANIMAL_ID에 NULL이 추가되며 새로 만들어지는 테이블에 추가된다.
- JOIN을 통해서 만들어진 테이블에서 WHERE 조건문으로 AO.ANIMAL_ID가 NULL인 경우를 체크
- NULL 이라는 것은 입양 기록이 없다는 것을 의미
- 오름 차순으로 정렬하고 최대 데이터 개수를 3개로 제한해서 문제에서 조건으로 건 3마리를 맞춘다.