코딩테스트/SQL 문제

[프로그래머스] 59044 오랜 기간 보호한 동물(1) - SQL

glorypang 2025. 4. 23. 10:30
728x90
반응형
SMALL

📌 문제 정보

  • 출처: 문제 링크
  • 난이도: ⭐
  • 문제 유형: JOIN
  • 사용 언어: SQL

🔍 문제 설명

`ANIMAL_INS` 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. `ANIMAL_INS` 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

 

`ANIMAL_OUTS` 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다. ANIMAL_OUTS 테이블의 ANIMAL_ID ANIMAL_INS ANIMAL_ID의 외래 키입니다.

 

아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다.


💡 풀이 노트

입양 못 간 동물이란?

ANIMAL_INS 테이블에는 존재하지만,
ANIMAL_OUTS 테이블에는 존재하지 않는 동물 ID

즉, 입소는 했지만 아직 출소 기록이 없는 동물들을 의미

 

WHERE ANIMAL_ID NOT IN (
    SELECT ANIMAL_ID
    FROM ANIMAL_OUTS
)
  • 입양된 동물들의 ID를 제외

`ANIMAL_OUTS` 의 입양된 동물 ID

ANIMAL_ID 
A354597
A373687
A368930

🚀 코드 (Java)

SELECT A.NAME, A.DATETIME
FROM ANIMAL_INS A 
WHERE ANIMAL_ID NOT IN (
    SELECT ANIMAL_ID
    FROM ANIMAL_OUTS
)
ORDER BY A.DATETIME
LIMIT 3

🖥 실행 결과

출력

NAME	DATETIME
Shelly	2015-01-29 15:01:00
Jackie	2016-01-03 16:25:00
Benji	2016-04-19 13:28:00

📌 깃허브 코드 저장소: https://github.com/glorypang/CodingTest

728x90
반응형
LIST