본문 바로가기
Mysql

프로그래머스 SQL 고득점 Kit (JOIN) 오랜 기간 보호한 동물(1)

by 열정적인 이찬형 2021. 11. 9.

문제 링크

프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr

문제 설명

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의 외래 키입니다.

아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다.


테이블

ANIMAL_INS

ANIMAL_OUTS


문제 결과

예를 들어 ANIMAL_INS 테이블이

ANIMAL_OUTS 테이블이 이와 같다면.

따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.


접근 방법

  • SQL 문의 조회 명령어 SELECT문에서 NAME,DATETIME을 출력해야 한다.
  • ANIMAL_INS ANIMAL_OUTS에 동일한 이름의 속성이 존재하여 AS로 별칭을 주어 분류하였습니다.
  • 입양을 못 간 동물들의 ANIMAL_ID가 ANIMAL_OUTS은 존재하지 않는 것으로 볼 수 있습니다.
  • LEFT OUTER JOIN을 통해서 ANIMAL_OUTS에 존재하지 않는 값을 NULL값으로 받게 하였습니다.
  • ANIMAL_ID 값이 같은 조건에서 B.ANIMAL_ID가 NULL값을 가진 것이 입양 가지 못한 것으로 보기 때문에 ON A.ANIMAL_ID = B.ANIMAL_ID를 작성하였습니다.
  • B.ANIMAL_ID가 NULL 값을 찾아야 하기 때문에 WHERE 문을 통해서 조건을 만들어주었습니다.
  • 출력값이 보호시작일 기준으로 정렬되기 때문에 ORDER BY를 A.DATETIME으로 하였습니다.
  • 3마리를 출력하라는 조건이 있었으므로 LIMIT을 사용하여 제한하였습니다.

 


결과 코드

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

댓글