문제풀이/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인 값이 구하고자하는 차집합 영역에 해당됨