보호소에서 중성화한 동물↗️ 문제풀이
(우유와 요거트가 담긴 장바구니의 심화버전이다.)
문제
보호소에 들어올 당시에는 중성화되지 않았지만, 보호소를 나갈 당시에는 중성화된 동물의 아이디와 생물 종, 이름을 조회하는 아이디 순으로 조회하는 SQL 문을 작성해주세요.
이 때 중성화를 거치지 않은 동물은 성별 및 중성화 여부에 Intact, 중성화를 거친 동물은 Spayed 또는 Neutered라고 표시되어있습니다.
해설
우유와 요거트가 담긴 장바구니와 마찬가지로 보호소에 들어올 당시에 중성화 되지않은 것과 보호소 나갈 당시 중성화 두 경우의 교집합을 구하면된다.
우유와 요거트가 담긴 장바구니와는 달리 데이터를 두개의 테이블을 조인을 한뒤 에서 데이터를 추출해야한다.
여기서 ANIMAL_INS
는 INS
로 치환, ANIMAL_OUTS
는 OUTS
로 치환하였다.
1. A전체 구하기
SELECT OUTS.ANIMAL_ID FROM ANIMAL_OUTS OUTS WHERE OUTS.SEX_UPON_OUTCOME LIKE 'Spayed%' or OUTS.SEX_UPON_OUTCOME LIKE 'Neutered%'
2. B 끄집어내기 ( A와 B 교집합)
WHERE OUTS.ANIMAL_ID IN (SELECT OUTS.ANIMAL_ID FROM ANIMAL_OUTS OUTS WHERE OUTS.SEX_UPON_OUTCOME LIKE 'Spayed%' or OUTS.SEX_UPON_OUTCOME LIKE 'Neutered%') AND INS.SEX_UPON_INTAKE LIKE 'Intact%'
3. 두 테이블 (ANIMAL_INS와 ANIMAL_OUTS) 조인하기
SELECT OUTS.ANIMAL_ID, OUTS.ANIMAL_TYPE, OUTS.NAME FROM ANIMAL_OUTS OUTS JOIN ANIMAL_INS INS ON OUTS.ANIMAL_ID = INS.ANIMAL_ID
4. 조인한 테이블에서 A와 B교집합 꺼내기 (즉, 1+2+3)
SELECT OUTS.ANIMAL_ID, OUTS.ANIMAL_TYPE, OUTS.NAME FROM ANIMAL_OUTS OUTS JOIN ANIMAL_INS INS ON OUTS.ANIMAL_ID = INS.ANIMAL_ID WHERE OUTS.ANIMAL_ID IN (SELECT OUTS.ANIMAL_ID FROM ANIMAL_OUTS OUTS WHERE OUTS.SEX_UPON_OUTCOME LIKE 'Spayed%' or OUTS.SEX_UPON_OUTCOME LIKE 'Neutered%') AND INS.SEX_UPON_INTAKE LIKE 'Intact%'
댓글 쓰기