없어진 기록 찾기

bird.j·2021년 6월 29일
0

sql

목록 보기
9/16

프로그래머스

입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요.

처음에 내가 의도한 풀이 방법은 'OUTS의 ID가 INS에 없으면 그것을 출력해라' 로 NOT IN을 사용하고 싶었다.

그래서 다음과 같이 했는데 틀렸다.

SELECT B.ANIMAL_ID, B.NAME
FROM ANIMAL_OUTS B, ANIMAL_INS A
WHERE B.ANIMAL_ID NOT IN A.ANIMAL_ID
ORDER BY B.ANIMAL_ID ASC

NOT IN 뒤에 SELECT절로 INS의 ID를 찾아야했다.

SELECT B.ANIMAL_ID, B.NAME
FROM ANIMAL_OUTS B
WHERE B.ANIMAL_ID NOT IN (SELECT A.ANIMAL_ID FROM ANIMAL_INS A)
ORDER BY B.ANIMAL_ID ASC


JOIN을 이용하는 방법이 정석인 것 같다.

LEFT OUTER JOIN

SELECT B.ANIMAL_ID, B.NAME
FROM ANIMAL_OUTS B
LEFT OUTER JOIN ANIMAL_INS A
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.ANIMAL_ID IS NULL
ORDER BY B.ANIMAL_ID ASC

ANIMAL_OUTS 테이블을 왼쪽에 두고, ANIMAL_INS 테이블을 조회하면 ANIMAL_INS에 없어도 ANIMAL_OUTS이 기준이므로 ANIMAL_OUTS의 ID는 모두 조회가 된다.
이 때 조건이 ANIMAL_INS와 ANIMAL_OUTS의 아이디가 같은 걸 가져오고 싶은데 ANIMAL_INS에는 없는 아이디라면 NULL값으로 연결된다.
따라서 ANIMAL_INS가 NULL값인 것을 조회하면 된다.

RIGHT OUTER JOIN

SELECT B.ANIMAL_ID, B.NAME
FROM ANIMAL_INS A
RIGHT OUTER JOIN ANIMAL_OUTS B
ON B.ANIMAL_ID = A.ANIMAL_ID
WHERE A.ANIMAL_ID IS NULL

JOIN

  • LEFT OUTER JOIN : 왼쪽 테이블은 무조건 조회. 오른쪽 테이블에 조건이 맞는 것이 있다면 같이 보여줌
  • RIGHT OUTER JOIN : 오른쪽 테이블은 무조건 조회. 왼쪽 테이블에 조건이 맞는 것이 있다면 같이 보여줌
  • INNER JOIN : 두 테이블의 공통 부분
  • FULL OUTER JOIN : 두 테이블의 합집합

reference

0개의 댓글