728x90
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제는 아직 입양가지 않은 동물중 가장 먼저 들어온 3마리를 찾는 쿼리이다.
내가 처음 작성한 코드는 다음과 같다.

이 쿼리에는 3가지 문제점이 있다.
1. NOT IN 으로 인한 성능 저하
NOT IN은 서브쿼리의 모든 결과를 메모리에 로드한 뒤, 바깥쪽 테이블(ANIMAL_INS)의 모든 행과 하나씩 비교한다.
2. 서브 쿼리의 불필요한 JOIN
ANIMAL_OUTS 만 조회하면 되는데 불필요하게 JOIN 하고 있다.
3. 불필요한 GROUP BY
이건 아무리 봐도 왜 했는지 모르겠는 GROUP BY다. 삭제해야한다. (이전 문제 풀다가 습관적으로 적은듯..)
따라서 LEFT JOIN을 사용한 후 ANIMAL_OUTS에 기록이 있을 경우 WHERE 절로 필터링하는게 더 좋다.
SELECT ANIMAL_INS.NAME, ANIMAL_INS.DATETIME
FROM ANIMAL_INS
LEFT JOIN ANIMAL_OUTS ON ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
WHERE ANIMAL_OUTS.DATETIME IS NULL
ORDER BY ANIMAL_INS.DATETIME
LIMIT 3;728x90
'데이터베이스' 카테고리의 다른 글
| 프로그래머스: 대장균의 크기에 따라 분류하기 2 (0) | 2025.11.03 |
|---|---|
| SQL PARTITION BY 와 GROUP BY 차이 (0) | 2025.11.02 |
| SQLD 제 2과목 - 제 3장 관리구문 (2) | 2024.11.17 |
| SQLD 제 2과목 - 제 2장 SQL 활용 (1) | 2024.11.17 |
| SQLD 제 2과목 - 제 1장 SQL 기본 (0) | 2024.11.16 |