[SQL 프로그래머스 문제풀이] (JOIN) '오랜 기간 보호한 동물(1)'

윤상혁·2025년 10월 30일

1. 문제 소개

전 게시글들과 테이블 정보들은 동일합니다.
이번 역시, 요구하는 문제만 다릅니다.


2. 문제 풀이

우리는 문제를 이렇게 세분화할 수 있습니다.

  1. 아직 입양을 못 간 동물
  2. 가장 오래 보호소에 있었던 동물 3마리 -> ORDER BY ASC
  3. 보호 시작일

예시 테이블을 보는데, 뭔가 이상한 점이 있습니다.

ANIMAL_INS와 OUTS의 테이블을 자세히 보는데,
DATETIME이 각각 NOT NULL입니다.

어? 입양 못가면 NULL 되어야 하는 거 아니야? 하고 자세히 봤는데,
예시에 나와 있는 ANIMAL_OUTS를 보니, 그냥 이 테이블은 입양간 애들만 기록한 테이블입니다.

즉, 입양 못 간 애들은 기록을 아예 안 한 거죠.

어떤 조인법으로 해야할까... 고민을 하던 와중에,
정답은 'LEFT OUTER JOIN'임을 깨달았습니다.

Q. 왜 왼쪽 조인이냐?

A. INS가 무조건 OUTS보다 데이터 튜플(행)의 갯수가 크거나 같을 것입니다.(입양소 안(INS)에서 입양을 보내는 거니깐(OUTS). 근데 입양을 못 보낼 수도 있으니)

ANIMAL_ID를 공통 속성(열)로 LEFT OUTER JOIN을 해야하는데,
이 때 공통된 부분들은 정보가 다 유지된 채로 JOIN이 되고,

이제 공통된 속성에서 튜플(행)이 없으면 왼쪽 테이블의 튜플 정보만 다 남기고, 오른쪽 테이블의 튜플 정보는 다 NULL이게 되는 것이죠.

그림으로 한번 제대로 이해해봅시다.

두 개의 예시 테이블과 LEFT OUTER JOIN을 설명하는 그림이 있습니다.(저퀄이지만 양해 부탁드립니다;; ^^)

공통된 속성인 'ANIMAL_ID'로 겹치는 부분은 다 채워지고, 그 부분이 노란색입니다.

그 다음엔, 겹쳐지지 않는 부분들을 처리를 해야하는데, LEFT OUTER JOIN이므로 왼쪽 테이블의 정보들은 그대로 저장이 됩니다. 하지만, 오른쪽 테이블의 정보들은 다 NULL이 됩니다.

따라서, 왼쪽 테이블의 정보들 부분을 초록색으로, 오른쪽 테이블의 NULL을 파란색으로 표현하였습니다.


그럼 우리는 이제 WHERE절을 통해서, 오른쪽 테이블의 DATETIME IS NULL이면, 문제가 요구하는 정답을 얻을 수 있게 됩니다.

이를 SQL문으로 표현하면,

-- 코드를 입력하세요
SELECT
    ANIMAL_INS.NAME,
    ANIMAL_INS.DATETIME
FROM ANIMAL_INS LEFT OUTER JOIN ANIMAL_OUTS
ON ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
WHERE ANIMAL_OUTS.DATETIME IS NULL;

이렇게 됩니다.


2-1. 오답 및 문제 풀이 수정

어? 왜 틀리지?
논리 부분에서 이상한 부분이 안 보입니다.

그래서 CLAUDE에게 물어봤습니다.

아..문제에서 요구하는 ORDER BY와 LIMIT절을 빼먹었네요.

바로 적용해줍시다.

-- 코드를 입력하세요
SELECT
    ANIMAL_INS.NAME,
    ANIMAL_INS.DATETIME
FROM ANIMAL_INS LEFT OUTER JOIN ANIMAL_OUTS
ON ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
WHERE ANIMAL_OUTS.DATETIME IS NULL
ORDER BY ANIMAL_INS.DATETIME ASC LIMIT 3;

정답입니다!!


3. 마무리 및 결론

이렇게 해서 또 다른 JOIN LEVEL-3 문제를 풀어보았습니다.

LEVEL-3 문제는 이렇게 해서 끝입니다.

LEVEL-3의 문제의 공통점은 JOIN을 찾고 다만 여기에 WHERE절이라는 조건절을 적용하면 되는 문제였네요.

처음 풀면 다소 어려울 수 있으나, 풀수록 너무 어렵지도 않고 재밌는 문제였습니다.

이렇게 해서 글을 마무리하겠습니다.
끝까지 봐주셔서 감사합니다~ :) bb

profile
통합형 개발자. 기획부터 개발, 자동화까지. 문제를 구조적으로 이해하고, AI를 능동적으로 활용해 본질적인 해결책을 제시하는 사람입니다.

0개의 댓글