blueorpurple

프로그래머스 연습문제 JOIN 없어진 기록 찾기 본문

SQL

프로그래머스 연습문제 JOIN 없어진 기록 찾기

에테RR 2021. 8. 23. 22:06

https://programmers.co.kr/learn/courses/30/lessons/59042

 

코딩테스트 연습 - 없어진 기록 찾기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

-- 코드를 입력하세요
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_ID ASC;

 

테이블에 없는 걸 찾아야 되는 걸 몰라서 헤매다가 WHERE로 IS NULL 하면 되는 걸 알게 돼서 풀었다. 

사실 구글링으로 IS NULL을 쓰면 된다는 걸 깨달았다. 

 

이걸 보면 

 

우선 ANIMAL_OUTS 테이블에는 있는데 ANIMAL_INS에는 없는 행을 찾아서 ID 열과 NAME 열을 출력하면 된다. 

그래서 1번 줄의 SELECT를 하고, 

기준이 되는 테이블이 ANIMAL_OUTS를 왼쪽에 두고 외부 결합을 하기 위해 LEFT OUTER JOIN을 한다. 이때 OUTER을 빼고 LEFT JOIN만 해도 정답이다. 

그 다음이 결합 조건인데, OUTS 테이블과 INS 테이블의 ID를 비교해서 같으면 출력한다. 

이때 주의할 것은 기준이 되는 테이블이 OUTS라는 것이다. 

 

WHERE 전까지를 실행해보면 OUT에만 있는 데이터가 결과에 나온다. 

이 결과에서 WHERE로 INS의 ID가 NULL인 걸 찾으면 된다. 

 

이때 주의해야 할 건 WHERE로 NULL인 걸 찾을 때 NAME이 NULL인 걸 찾으면 틀린 결과가 나온다. 

ID가 외래키가 되기 때문이다. 

 


아 연습문제를 푸는 건 오랜만이어서 어려웠다

Comments