개발하는 자몽

[프로그래머스] JOIN > 없어진 기록 찾기 본문

SQL

[프로그래머스] JOIN > 없어진 기록 찾기

jaamong 2024. 1. 29. 21:31

문제

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

천재지변으로 인해 일부 데이터가 유실되었습니다. 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해 주세요.

 

풀이

  • 입양을 간 기록만 있고, 보호소에 들어온 기록이 없음
  • 동물의 ID, 이름 조회
SELECT o.ANIMAL_ID, o.NAME
FROM ANIMAL_INS i RIGHT OUTER JOIN ANIMAL_OUTS o on i.ANIMAL_ID = o.ANIMAL_ID
WHERE i.ANIMAL_ID IS NULL;
  1. `동물의 ID`, `이름`을 조회하므로 SELECT 절에 작성
  2. 두 테이블의 데이터를 합쳐서 비교해야 하므로 JOIN 절 작성
    • 입양 기록만 있고, 보호소에 들어온 기록이 없는 경우를 찾아야 하므로, 두 테이블을 겹쳐서 입양 테이블의 기록만 출력해야 한다. 따라서 `LEFT/RIGHT OUTER JOIN`을 사용해야 한다.

      • `ANIMAL_INS`를 왼쪽 테이블로, `ANIMAL_OUTS`를 오른쪽 테이블로 둔 상태로 `RIGHT OUTER JOIN`을 사용한다. 이때 ID 값으로 비교하므로 `ON`에 작성한다.
    • 위와 같은 그림처럼 출력하기 위해서는 한 가지 조건이 더 필요하다. 단순히 OUTER JOIN만 하게 되면, 왼쪽 테이블에 없는 데이터도 `NULL`로 같이 출력된다. 왼쪽 테이블에서 기록이 없을 때를 조회해야 하므로 WHERE 절에 왼쪽 테이블의 조건을 추가한다. 

 

 

Notice   `RIGHT OUTER JOIN`시 추가 제약조건 규칙

  • ON에 오른쪽 테이블 제약조건 작성
  • WHERE에 왼쪽 테이블 제약조건 작성 

 

 

 

Comments