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은 실제 데이터가 아닌 존재 여부만 확인하기 위한 용도이다
'코딩테스트' 카테고리의 다른 글
| [26.03.26 코테/회고(MySQL/Oracle)]-입양 시각 구하기(2) (0) | 2026.03.26 |
|---|---|
| [26.03.25 코테/회고(MySQL/Oracle)]-입양 시각 구하기(1) (0) | 2026.03.25 |
| [26.03.23 코테/회고(MySQL/Oracle)]-년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2026.03.23 |
| [26.03.20 코테/회고(MySQL)]-업그레이드 할 수 없는 아이템 구하기 (0) | 2026.03.20 |
| [26.03.19 코테/회고(MySQL)]-주문량이 많은 아이스크림 조회하기 (0) | 2026.03.19 |