1. 문제
https://programmers.co.kr/learn/courses/30/lessons/59044
코딩테스트 연습 - 오랜 기간 보호한 동물(1)
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디
programmers.co.kr
2. 풀이
- 아직 입양을 못 간 동물 (INS 테이블에는 있지만 OUT 테이블에 없는 동물) : NOT EXISTS
- NOT EXISTS 서브쿼리 : 서브쿼리 목록에 값이 존재하지 않는 것들만 출력하도록 하는 조건
- 가장 오래 보호소에 있던 동물 3마리 : ORDER BY , ROWNUM(오라클), LIMIT(MYSQL)
3. 답안
--MYSQL
SELECT I.NAME, I.DATETIME
FROM ANIMAL_INS I
WHERE NOT EXISTS (SELECT 1 FROM ANIMAL_OUTS O WHERE I.ANIMAL_ID = O.ANIMAL_ID)
ORDER BY I.DATETIME
LIMIT 3
--ORACLE
SELECT * FROM
(SELECT I.NAME, I.DATETIME
FROM ANIMAL_INS I
WHERE NOT EXISTS (SELECT 1 FROM ANIMAL_OUTS O WHERE I.ANIMAL_ID = O.ANIMAL_ID)
ORDER BY I.DATETIME
) T
WHERE ROWNUM <= 3
반응형