보호소에서 중성화한 동물↗️ 문제풀이

(우유와 요거트가 담긴 장바구니의 심화버전이다.)

문제

보호소에 들어올 당시에는 중성화되지 않았지만, 보호소를 나갈 당시에는 중성화된 동물의 아이디와 생물 종, 이름을 조회하는 아이디 순으로 조회하는 SQL 문을 작성해주세요.
이 때 중성화를 거치지 않은 동물은 성별 및 중성화 여부에 Intact, 중성화를 거친 동물은 Spayed 또는 Neutered라고 표시되어있습니다.

해설

우유와 요거트가 담긴 장바구니와 마찬가지로 보호소에 들어올 당시에 중성화 되지않은 것과 보호소 나갈 당시 중성화 두 경우의 교집합을 구하면된다. 교집합

A = 보호소를 나갈 당시에는 중성화되있는 동물 B = 보호소에 들어올 당시에는 중성화되지 않은 동물

우유와 요거트가 담긴 장바구니와는 달리 데이터를 두개의 테이블을 조인을 한뒤 에서 데이터를 추출해야한다.

여기서 ANIMAL_INSINS로 치환, ANIMAL_OUTSOUTS로 치환하였다.

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%'

댓글 쓰기