문제풀이/SQL
없어진 기록 찾기(SQL) 문제풀이
soo-dal
2024. 3. 13. 22:31
문제
https://school.programmers.co.kr/learn/courses/30/lessons/59042
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 접근 방식
animal_outs에는 존재하나 animal_ins에는 존재하지 않는 동물 정보를 찾는 문제이며, 문제의 요구사항을 정리하면 아래와 같다.
1. animal_outs에는 존재하지 않고, animal_ins에는 존재하는 테이블을 찾는다
>> LEFT OUTER JOIN을 사용하여 animal_outs에는 존재하는 튜플을 필터링
>> (animal_outs) - (animal_ins) 를 구해야하므로 WHERE animal_ins.id IS NULL 로 다시 필터링
2. animal_id를 기준으로 정렬
>> ORDER BY animal_id
코드
SELECT animal_outs.animal_id,animal_outs.name
FROM animal_outs
LEFT OUTER JOIN animal_ins
ON animal_outs.animal_id = animal_ins.animal_id
WHERE animal_ins.animal_id IS NULL
ORDER BY animal_outs.animal_id;
회고
처음에는 차집합을 구하는 함수가 따로 있나 했는데 들어본적은 없어서 아는 범위에서 해결하려고함.
LEFT OUTER JOIN 시 ins.id가 NULL인 값이 구하고자하는 차집합 영역에 해당됨