본문 바로가기
Database

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

by 진홍이 2021. 7. 14.
728x90

없어진 기록 찾기

문제

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다.
ANIMAL_INS 테이블 구조는 다음과 같으며,
ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각
동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. 
ANIMAL_OUTS 테이블 구조는 다음과 같으며, 
ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 
동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다. 
ANIMAL_OUTS 테이블의 ANIMAL_ID는 ANIMAL_INS의 ANIMAL_ID의 외래 키입니다.

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

예시

문제에서 원하는것은

  • SELECT로 ANIMAL_ID,NAME 2가지만 조회
  • JOIN을 사용해 두 테이블 조회
  • ANIMAL_ID순으로 조회

이렇게 3가지 입니다.

 

쿼리문을 작성하기전에 JOIN에 대해서 짚고 넘어가야 하지만

완벽히 이해해야할 부분이 많고 이해가 어렵다는 분들도 많아 따로 정리해서 올리도록 하겠습니다.

 

지금 우리가 사용할 JOIN은 LEFT OUTER JOIN입니다. 

입양을 간 기록 즉 ANIMAL_OUTS에는 있는데

입양을 들어온 기록 즉 ANIMAL_INS에는 없는 데이터를 찾는 쿼리이기때문에

붉은 색으로 칠한 부분을 찾아야 합니다.

 

작성해 보겠습니다.

SELECT 
    *
FROM 
    ANIMAL_OUTS A
LEFT OUTER JOIN 
    ANIMAL_INS B
ON 
    B.ANIMAL_ID = A.ANIMAL_ID

확인해보면 몇군데 비어있는 데이터들을 확인 할 수 있습니다.

우리가 필요한건 확인해 봤듯 ANIMAL_INS에는 없는 데이터를 찾고있기 때문에

WHERE에 'B.ANIMAL_ID IS NULL'만 추가해 주면 완료입니다.

 

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

후에 추가로 ORDER BY로 정렬을, 필요한 컬럼만 SELECT로 뽑아 왔습니다. 

 

 

 

출처:[프로그래머스 코딩테스트 연습] - https://programmers.co.kr/learn/courses/30/lessons/59042

728x90