코딩테스트/SQL 코딩테스트
<프로그래머스> 오랜 기간 보호한 동물(1)
배또가또
2023. 12. 19. 16:44
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/59044
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 문제 요구사항
- 아직 입양을 가지못한 동물 중 가장 오래 보호소에 있었던 동물 3마리의 이름, 보호시작일을 조회
- 결과는 보호시작일을 기준으로 조회함
ANIMAL_INS(동물보호소에 들어온 동물 정보) 테이블과 ANIMAL_OUTS(동물보호소에서 입양보낸 동물의 정보) 테이블을 조인해야함
아직 입양을 가지 못한 동물을 조회해야하기 때문에 INS에는 있는데 OUTS에는 없는 데이터를 조회해야한다.
따라서 INS를 왼쪽에 두고 LEFT OUTER JOIN을 사용하여 조인한다. 그리고 OUTS의 특정 컬럼 데이터가 NULL인 데이터를 조회한다
가장 오래 있었던 동물을 알아내기 위해서 INS의 DATETIME을 기준으로 정렬하고
MySQL의 경우 LIMIT구문, Oracle의 경우에는 ROWNUM을 이용하여 3개의 데이터만을 출력한다.
1) Oracle
SELECT NAME, DATETIME
FROM
(
SELECT A.NAME, A.DATETIME
FROM ANIMAL_INS A LEFT OUTER JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE B.DATETIME IS NULL
ORDER BY A.DATETIME
)
WHERE ROWNUM <= 3
서브쿼리로 목표하는 데이터를 불러오고 ROWNUM <=3을 이용해 상위 3개 즉 가장 오래된 3마리의 동물 데이터를 조회함
2) MySQL
SELECT A.NAME, A.DATETIME
FROM ANIMAL_INS A LEFT OUTER JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE B.DATETIME IS NULL
ORDER BY A.DATETIME
LIMIT 3;