Skills/SQL

프로그래머스: 없어진 기록 찾기 (MySQL)

듀공🥕 2024. 3. 4. 23:23

 

1. 문제


2. 문제 풀기 전에,

  • ANIMAL_INS  👉🏻 X
  • ANIMAL_OUTS 👉🏻 동물 ID, 이름 조회
  • 입양을 간 기록은 있지만, 보호소에 들어온 기록이 없는 동물 조회
  • 동물 ID ASC
  • JOIN의 종류와 그 개념 생각하기

3. 테이블

ANIMAL_INS AS I

 

ANIMAL_OUTS AS O

 

4. 풀이 과정

1단계) 먼저 테이블 I와 테이블 O를 이용하여 쿼리문을 작성하기 위해 JOIN을 해줘야 하는데, 이번에는 조금 다르게 생각해 볼 필요가 있다.

    👨🏻‍🏫 INNER JOIN은 테이블들을 연결할 때 기본적으로 가장 많이 사용되는 형태이다.

 

‘보호소에 들어온 기록은 없지만, 입양을 간 기록은 있는’ 동물을 찾아야 하는데, '입양 간 기록 테이블 - 보호소 들어온 기록 테이블'로 계산이 가능하다.

    ▶ 두 테이블의 교집합은 제외하고 ANIMAL_OUTS 테이블에만 해당되는 데이터를 조회하기 위해 RIGHT OUTER JOIN을 적용해야 한다.

SELECT 
FROM ANIMAL_INS AS I
RIGHT OUTER JOIN ANIMAL_OUTS AS O ON I.ANIMAL_ID=O.ANIMAL_ID

 

2단계) 교집합 제외를 위해 WHERE절에 ANIMAL_INS 테이블은 IS NULL 처리를 해준다.

그러면 위 그림에서와 같이 ‘ANIMAL_OUTS 테이블에서 ANIMAL_INS 테이블을 뺀 값(B-A)’을 구할 수 있다.

SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_INS AS I
RIGHT OUTER JOIN ANIMAL_OUTS AS O ON I.ANIMAL_ID=O.ANIMAL_ID
WHERE I.ANIMAL_ID IS NULL

 

3단계) 테이블 O의 동물 ID이름을 조회하는 쿼리문을 작성해 준다.

SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_INS AS I
RIGHT OUTER JOIN ANIMAL_OUTS AS O ON I.ANIMAL_ID=O.ANIMAL_ID
WHERE I.ANIMAL_ID IS NULL

 

4단계) ORDER BY절을 이용하여 문제에서 제시한 방식으로 정렬해 준다.

SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_INS AS I
RIGHT OUTER JOIN ANIMAL_OUTS AS O ON I.ANIMAL_ID=O.ANIMAL_ID
WHERE I.ANIMAL_ID IS NULL
ORDER BY ANIMAL_ID;

 

5. 완성코드

SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_INS AS I
RIGHT OUTER JOIN ANIMAL_OUTS AS O ON I.ANIMAL_ID=O.ANIMAL_ID
WHERE I.ANIMAL_ID IS NULL
ORDER BY ANIMAL_ID;

 

 

🔗 관련 링크

프로그래머스 문제 - https://school.programmers.co.kr/learn/courses/30/lessons/59042 
JOIN 종류 정리 - https://hongong.hanbit.co.kr/sql-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-joininner-outer-cross-self-join/

 

 

 

728x90