SELECT OUTS.ANIMAL_ID, OUTS.NAME
FROM ANIMAL_INS INS
RIGHT OUTER JOIN ANIMAL_OUTS OUTS
ON INS.ANIMAL_ID =OUTS.ANIMAL_ID
WHERE INS.ANIMAL_ID IS NULL
입양을 간 기록은 있는데 보호소에 들어온 기록은 없는 동물들의 아이디와 이름을 조회하기
입양을 OUT테이블에는 있지만 IN 테이블에는 없어야하므로 OUT테이블을 기준으로 조인을 한다
IN테이블에는 없기때문에 공통된 값을 기준으로 하는 INNER JOIN을 할 수 없다(?)
OUT테이블을 driven테이블로 사용할 것이므로 RIGHT OUTER JOIN을 사용한다 (순서를 바꿔서 driving이 되면 LEFT OUTER JOIN을 써도 된다)
들어온 기록이 없으므로 NULL값으로 조인이 되어 저장될 것이기 때문에 INS에 NULL로 저장된 값을 찾는다
근데 ID가 없으면 다른 기록도 다 없어서 NULL로 저장될 것 같은데 INS의 다른 칼럼 값들이 NULL일 경우를 조회하면 결과가 조금씩 다르게 나온다
아래 결과와 같이 WHERE INS.NAME IS NULL
로 조건을 걸면 하나가 더 나온다
ANIMAL_ID NAME
A349480 Daisy
A349733 Allie
A349990 Spice
A362137 *Darcy
A368930
조건식 그대로 NAME이 NULL이라서 나온 것 같은데 NAME이 없는 건 그냥 정말 동물의 이름이 없는 경우일 수도 있어서 그런것 같다 보호소 기록이 있고, 입양간 기록도 있지만 이름만 없는 예외적인 그런 상황?
각각 테이블을 조회해보니 정말 모든 테이블에 다 있는 ID였다 역시 이런 경우에는 유일한 값이면서 NULL값일 수도 없는 프라이머리 키를 사용하는 게 맞는 것 같다