비전공자 공부일기/:: ALGORITHM

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

와니_ 2021. 10. 11. 19:27
문제 (너무 길어서 핵심만 가져옴)

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

내 풀이 썰풀기 - 이중쿼리

원래 JOIN문 써서 풀어야 하는데
내가 실제로 회사에서 젤 많이 쓰는 방법으로 풀음
그것은 바로 NOT IN을 이용한 이중쿼리

보호소에 들어온 동물들(ANIMAL_INS 테이블) 중에서 입양간 동물들(ANIMAL_OUTS 테이블)이 없으면
아직 입양 못갔다는 말이므로(문제에 감정이입되네 슬펑..) 이 중에서 날짜로 정렬한 뒤 3줄만 뽑으면 된다.

1. 입양 못 간 동물들 걸러내기 ---- ANIMAL_ID NOT IN (SELECT ANIMAL ID FROM ANIMAL_OUTS)
2. 날짜로 정렬하기 ---- ORDER BY DATETIME
3. 3줄만 뽑기 ---- LIMIT 3  (MYSQL의 경우임)

SELECT NAME, DATETIME
FROM ANIMAL_INS
WHERE 1=1
AND ANIMAL_ID NOT IN (SELECT ANIMAL_ID FROM ANIMAL_OUTS)
ORDER BY DATETIME
LIMIT 3

 

LEFT JOIN 이용

그런데 문제의 취지가 JOIN절을 쓰는 것이었으니
JOIN절을 써서 한번 풀어보자.

SELECT INS.NAME AS INS_NAME, INS.DATETIME AS DATETIME
FROM ANIMAL_INS INS LEFT OUTER JOIN ANIMAL_OUTS OUTS
ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
WHERE OUTS.DATETIME IS NULL
ORDER BY INS.DATETIME
LIMIT 3;