관리자의 실수로 일부 동물의 입양일이 잘못 입력되었습니다. 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일이 빠른 순으로 조회해야합니다.
문제에 대한 해석
입양일이 보호시작일보다 빠른 동물의 아이디와 이름
풀이(MYSQL)
<오답>..? with temp as ( select ins.animal_id, ins.name, ins.datetime as indate ,outs.datetime as outdate from animal_ins ins join animal_outs outs on ins.animal_id = outs.animal_id ) select animal_id, name, indate, outdate from temp where datediff(indate,outdate) > 0 order by indate
<정답> with temp as ( select ins.animal_id, ins.name, ins.datetime as indate ,outs.datetime as outdate from animal_ins ins join animal_outs outs on ins.animal_id= outs.animal_id ) select animal_id, name, indate, outdate from temp where (indate-outdate) > 0 order by indate
작동순서
💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환
FROM, JOIN, WITH 절: animal_ins테이블과 animal_outs테이블을 animal_i를 기준으로 조인하여 쿼리에 필요한 아이디, 이름, 보호일, 입양일을 조회하여 임시테이블에 저장한다
WHERE 절: 보호일이 입양일보다 빠른일을 알기위해 보호일과 입양일의 차가 0보다 클 경우 필터링한다
SELECT 절: 해당 동물의 아이디, 이름을 조회한다
ORDER BY 절: 보호시작일이 빠른순으로 오름차순한다. (최근일자 또는 미래일수록 날짜의 수가 크므로)