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

- Author: @mildsalmon
- Published: 2021-10-15
- Updated: 2021-10-16
- Source: http://blex.me/@mildsalmon/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-join-%EC%98%A4%EB%9E%9C-%EA%B8%B0%EA%B0%84-%EB%B3%B4%ED%98%B8%ED%95%9C-%EB%8F%99%EB%AC%BC1
- Tags: 프로그래머스, 코딩테스트, 문제, 오라클, sql

---

# 1. 오랜 기간 보호한 동물(1)

### A. 문제

위 프로그래머스 사이트에 접속하여 문제를 확인해주세요.

### B. 내 답안

```SQL

-- 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)](https://programmers.co.kr/learn/courses/30/lessons/59044). Programmers. (accessed Oct 15, 2021)
