Coding Test

(SQL > JOIN) : 7일차 오랜 기간 보호한 동물(1)

Santino 2025. 2. 11. 15:02

00:45

 

# 모르거나 헷갈렸던 부분

- 조건 중, 3개만 출력하는 법?

--> limit 3 이런식으로 3개만 출력 가능

- INS테이블에는 있으나, OUTS테이블에는 없는 경우?

--> NOT EXISTS 사용

 

 

 

 

1. 내가 푼 답(오답)

# 입양 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리(이름,보호 시작일)
# 정렬: 보호시작일 순
# in left join, in-out 같은 animal_id 기준, 남는 in의 animal_id중 3개를 뽑고, 정렬 해보기

SELECT 
FROM ANIMAL_INS i
LEFT JOIN ANIMAL_OUTS o
ON i.ANIMAL_ID != o.ANIMAL_ID
WHERE (ORDER BY i.DATETIME ASC)
ORDER BY i.DATETIME ASC;

# (가장 빠른 3개를 어떻게 가져오지?)

 

2. 정답 (풀이3으로 푸는게 제일 나을듯)

<풀이1>
# NOT EXISTS 사용해서 풀어보기

SELECT NAME, DATETIME
FROM ANIMAL_INS i
WHERE NOT EXISTS (SELECT ANIMAL_ID FROM ANIMAL_OUTS o WHERE i.ANIMAL_ID = o.ANIMAL_ID)
ORDER BY DATETIME
limit 3;
<풀이2>
# NOT IN 이용하여 풀어보기

SELECT NAME, DATETIME
FROM ANIMAL_INS i
WHERE i.ANIMAL_ID NOT IN (SELECT ANIMAL_ID FROM ANIMAL_OUTS o)
ORDER BY DATETIME ASC
limit 3;
<풀이3>
# JOIN을 이용하여 풀기

SELECT i.NAME, i.DATETIME
FROM ANIMAL_INS i
LEFT JOIN ANIMAL_OUTS o
ON i.ANIMAL_ID = o.ANIMAL_ID
WHERE o.ANIMAL_ID is NULL
ORDER BY DATETIME ASC
limit 3;