https://school.programmers.co.kr/learn/courses/30/lessons/59044
동물 시작일이 들어 있는 animal_ins 테이블과 동물의 입양일 데이터가 들어있는 animal_outs 테이블을 JOIN으로 합쳐줘야하는데요
아직 입양을 못 간 동물의 데이터를 조회해야하기 때문에 OUTER JOIN으로 합쳐줘야합니다.
보호 시작일 데이터가 있는 테이블을 A로 하고 LEFT JOIN으로 합쳐줍니다.
SELECT *
FROM animal_ins A LEFT join animal_outs B USING (animal_id)
WHERE절에서 null 을 이용해 입양일 데이터가 없는 이름과, 보호 시작일 데이터를 불러옵니다. 여기서 중요한 것은 어느 테이블의 이름을 가져오는지 입니다.
left join으로 A 테이블 기준으로 가져왔기 때문에 A테이블의 이름을 가져와야합니다. B 테이블의 이름을 가져오면, null 값으로 값이 없습니다.
datetime는 보호 시작일 데이터를 가져와야해서 A테이블에서 가져왔습니다.
SELECT A.name,A.datetime
FROM animal_ins A LEFT join animal_outs B USING (animal_id)
WHERE B.datetime is null
이제 보호 시작일 오름차순으로 정렬해주고, 3가지의 데이터만 출력하면 정답입니다.
ORDER BY A.datetime
LIMIT 3
정답
SELECT A.name,A.datetime
FROM animal_ins A LEFT join animal_outs B USING (animal_id)
WHERE B.datetime is null
ORDER BY A.datetime
LIMIT 3
https://school.programmers.co.kr/learn/courses/30/lessons/59411
두 테이블을 합쳐줘야하는데요 입양간 동물의 정보만 가져와야하기에,
inner join으로 합쳐주고 지정된 칼럼을 불러옵니다.
SELECT animal_id, B.name
FROM animal_ins A join animal_outs B USING (animal_id)
이제 보호기간이 긴 순으로 조회해야하는데요,
DATEDIFF로 입양일 - 보호시작일을 빼주고, 그 데이터 기준 날짜를 내림차순 정렬, 상위 2마리의 데이터만 불러오면 정답입니다.
ORDER BY DATEDIFF(B.datetime, A.datetime) DESC
LIMIT 2
정답
SELECT animal_id, B.name
FROM animal_ins A join animal_outs B USING (animal_id)
ORDER BY DATEDIFF(B.datetime, A.datetime) DESC
LIMIT 2