[Programmers] 없어진 기록 찾기
정답
-- ANIMAL_INS: ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE
-- ANIMAL_OUTS: ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME
SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_OUTS AS O
LEFT JOIN ANIMAL_INS AS I
ON O.ANIMAL_ID = I.ANIMAL_ID
WHERE I.ANIMAL_ID IS NULL
ORDER BY 1, 2;
✅ Point
- I 에는 없고, O 에만 있는 정보 =>
Left JOIN + NULL
로 접근
다른 풀이
NOT EXISTS
를 이용한 풀이OUTER JOIN + IS NULL
과NOT EXISTS
의 성능은 거의 비슷NOT EXISTS
은 “부재”의 의미를 명확히 표현한다는 장점 존재
-- ANIMAL_INS: ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE
-- ANIMAL_OUTS: ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME
SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_OUTS AS O
WHERE NOT EXISTS (
SELECT 1
FROM ANIMAL_INS AS I
WHERE I.ANIMAL_ID = O.ANIMAL_ID
)
ORDER BY 1, 2;
SELECT 1
은 “해당 행이 존재하는지만 확인”할 때 쓰는 표현 (정확한 값을 알 필욘 없고 그저 존재 여부만 확인할 때…)