코딩테스트

[26.03.24 코테/회고(MySQL)]-없어진 기록 찾기

지니248 2026. 3. 24. 16:06

Lv3. 없어진 기록 찾기 (MySQL)

링크: https://school.programmers.co.kr/learn/courses/30/lessons/59042

 

내가 작성한 코드

-- 풀이1 (RIGHT JOIN)
SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_INS I
RIGHT JOIN ANIMAL_OUTS O
        ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE I.ANIMAL_ID IS NULL
ORDER BY O.ANIMAL_ID ASC;

-- 풀이2 (NOT EXISTS)
SELECT ANIMAL_ID, NAME
FROM ANIMAL_OUTS O
WHERE NOT EXISTS (SELECT 1
                  FROM ANIMAL_INS I
                  WHERE O.ANIMAL_ID = I.ANIMAL_ID)
ORDER BY O.ANIMAL_ID;

 

문제 회고

1. RIGHT JOIN 사용

- ANIMAL_INS(입소)와 ANIMAL_OUTS(입양) 중 유실된 데이터를 포함해 모든 결과가 남아있는

  ANIMAL_OUTS 테이블을 기준으로 삼기 위해 RIGHT JOIN을 사용했다

- 두 테이블을 조인했을 때 입소 기록이 없는 동물은 I.ANIMAL_ID값이 NULL로 생성되는데

  이를 WHERE절에서 IS NULL로 필터링하여 문제에서 요구하는 입양 기록만 존재하는 데이터를 추출한다

2. 서브쿼리 NOT EXISTS

- 입양을 간 모든 동물의 기록을 가져온 후, 기록 중에서 ANIMAL_INS 테이블에 동일한 ANIMAL_ID가
  존재하지 않는(NOT EXISTS)만 골라낸다

- SELECT 1은 실제 데이터가 아닌 존재 여부만 확인하기 위한 용도이다