1. 오랜 기간 보호한 동물(1)
A. 문제
위 프로그래머스 사이트에 접속하여 문제를 확인해주세요.
B. 내 답안
-- Oracle
SELECT A.NAME, A.DATETIME
FROM (
SELECT INS.NAME AS NAME, INS.DATETIME AS DATETIME
FROM ANIMAL_INS INS LEFT OUTER JOIN ANIMAL_OUTS OUTS ON (INS.ANIMAL_ID = OUTS.ANIMAL_ID)
WHERE OUTS.ANIMAL_ID IS NULL
ORDER BY INS.DATETIME ASC
) A
WHERE ROWNUM <= 3
a. 회고
내 풀이
- 입양 못간 동물
LEFT OUTER JOIN
을 사용하여 ANIMAL_INS에 존재하지만 ANIMAL_OUTS에 존재하지 않는 데이터를 찾는다.
- 가장 오래 보호소에 있던
LEFT OUTER JOIN
문을 서브쿼리(인라인 뷰)로 추출하여 FROM절에서 사용한다.
- 왜냐하면, 메인쿼리에서 ORDER BY를 통해 보호소에 오래 있던 순서를 출력하고, WHERE절에서 3마리를 출력할 수 없기 때문이다.
- ORDER BY보다 WHERE절을 먼저 실행한다.
- 서브쿼리에서 찾은 값을 ROWNUM으로 상위 3개만 선택해서 출력한다.
참고문헌
-- Oracle
SELECT A.NAME, A.DATETIME
FROM (
SELECT INS.NAME AS NAME, INS.DATETIME AS DATETIME
FROM ANIMAL_INS INS LEFT OUTER JOIN ANIMAL_OUTS OUTS ON (INS.ANIMAL_ID = OUTS.ANIMAL_ID)
WHERE OUTS.ANIMAL_ID IS NULL
ORDER BY INS.DATETIME ASC
) A
WHERE ROWNUM <= 3
내 풀이
- 입양 못간 동물
LEFT OUTER JOIN
을 사용하여 ANIMAL_INS에 존재하지만 ANIMAL_OUTS에 존재하지 않는 데이터를 찾는다.
- 가장 오래 보호소에 있던
LEFT OUTER JOIN
문을 서브쿼리(인라인 뷰)로 추출하여 FROM절에서 사용한다.- 왜냐하면, 메인쿼리에서 ORDER BY를 통해 보호소에 오래 있던 순서를 출력하고, WHERE절에서 3마리를 출력할 수 없기 때문이다.
- ORDER BY보다 WHERE절을 먼저 실행한다.
- 서브쿼리에서 찾은 값을 ROWNUM으로 상위 3개만 선택해서 출력한다.
참고문헌
JOIN. 코딩테스트 연습 - 오랜 기간 보호한 동물(1) | 프로그래머스 (programmers.co.kr). Programmers. (accessed Oct 15, 2021)
Ghost