JOIN - 오랜 기간 보호한 동물(1)

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개만 선택해서 출력한다.

참고문헌

JOIN. 코딩테스트 연습 - 오랜 기간 보호한 동물(1) | 프로그래머스 (programmers.co.kr). Programmers. (accessed Oct 15, 2021)

이 글이 도움이 되었나요?

신고하기
0분 전
작성된 댓글이 없습니다. 첫 댓글을 달아보세요!
    댓글을 작성하려면 로그인이 필요합니다.