0507 TIL

looggi·2023년 5월 6일
1

TILs

목록 보기
66/114
post-thumbnail

SQL 문제 풀기

없어진 기록 찾기

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값일 수도 없는 프라이머리 키를 사용하는 게 맞는 것 같다

profile
looooggi

0개의 댓글