2024. 6. 17. 22:52ㆍMYSQL_알고리즘(코딩테스트)/level3

내가 제출한 코드
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 I.DATETIME LIMIT 3;
LEFT JOIN을 사용한 이유는
- 모든 동물을 기준으로 한다.
- ANIMAL_INS 테이블의 모든 동물을 기준으로 ANIMAL_OUTS 테이블과 결합한다.
- 이렇게 하면 입양되지 않은 동물(ANIMAL_OUTS에 없는 동물)을 쉽게 식별할 수 있다.
- 입양되지 않은 동물 필터링
- LEFT JOIN 결과에서 ANIMAL_OUTS 테이블에 일치하는 행이 없는 경우. 즉, O.ANIMAL_ID가 NULL인 경우를 필터링 하여 입양되지 않은 동물을 찾는다. (WHERE절)
다른 블로그 참고한 다른코드
SELECT NAME, DATETIME
FROM ANIMAL_INS A
WHERE NOT EXISTS (
SELECT ANIMAL_ID
FROM ANIMAL_OUTS B
WHERE A.ANIMAL_ID = B.ANIMAL_ID
)
ORDER BY DATETIME
LIMIT 3;
- WHERE NOT EXISTS (SELECT ANIMAL_ID FROM ANIMAL_OUTS B WHERE A.ANIMAL_ID = B.ANIMAL_ID)
- 서브쿼리를 사용하여 ANIMAL_OUTS 테이블에서 현재 ANIMAL_INS 테이블의 동물이 존재하는지 확인한다.
- WHERE A.ANIMAL_ID = B.ANIMAL_ID 조건을 사용하여 A 테이블의 ANIMAL_ID와 B 테이블의 ANIMAL_ID가 일치하는지 확인한다.
- NOT EXISTS는 서브쿼리의 결과가 존재하지 않는 경우, 즉 ANIMAL_OUTS 테이블에 해당 동물이 존재하지 않는 경우 참을 반환한다.
- 결과적으로, ANIMAL_OUTS 테이블에 존재하지 않는 ANIMAL_ID를 가진 행만 선택된다. 이는 아직 입양되지 않은 동물을 의미한다.
'MYSQL_알고리즘(코딩테스트) > level3' 카테고리의 다른 글
| level3_대여 기록이 존재하는 자동차 리스트 구하기 (0) | 2024.07.04 |
|---|---|
| level3_조건별로 분류하여 주문상태 출력하기 (0) | 2024.06.26 |
| level3_오랜 기간 보호한 동물(2) (0) | 2024.06.25 |
| level3_있었는데요 없었습니다. (0) | 2024.06.16 |
| level3_카테고리 별 도서 판매량 집계하기 (1) | 2024.06.15 |