[JOIN] 있었는데요 없었습니다

2024. 9. 23. 18:00SQL 고득점 Kit/JOIN

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

 

프로그래머스

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

programmers.co.kr


문제 설명

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다.

ANIMAL_INS 테이블며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

NAME TYPE NULLABLE
ANIMAL_ID VARCHAR(N) FALSE
ANIMAL_TYPE VARCHAR(N) FALSE
DATETIME DATETIME FALSE
INTAKE_CONDITION VARCHAR(N) FALSE
NAME VARCHAR(N) TRUE
SEX_UPON_INTAKE VARCHAR(N) FALSE


ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다.

ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다.

ANIMAL_OUTS 테이블의 ANIMAL_IDANIMAL_INSANIMAL_ID의 외래 키입니다.

NAME TYPE NULLABLE
ANIMAL_ID VARCHAR(N) FALSE
ANIMAL_TYPE VARCHAR(N) FALSE
DATETIME DATETIME FALSE
NAME VARCHAR(N) TRUE
SEX_UPON_OUTCOME VARCHAR(N) FALSE


관리자의 실수로 일부 동물의 입양일이 잘못 입력되었습니다. 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일이 빠른 순으로 조회해야합니다.


예시
예를 들어, ANIMAL_INS 테이블과 ANIMAL_OUTS 테이블이 다음과 같다면

<ANIMAL_INS> 테이블

ANIMAL_ID ANIMAL_TYPE DATETIME INTAKE_CONDITION NAME SEX_UPON_INTAKE
A350276 Cat 2017-08-13 13:50:00 Normal Jewel Spayed Female
A381217 Dog 2017-07-08 09:41:00 Sick Cherokee Neutered Male


<ANIMAL_OUTS> 테이블

ANIMAL_ID ANIMAL_TYPE DATETIME NAME SEX_UPON_INTAKE
A350276 Cat 2018-01-28 17:51:00 Jewel Spayed Female
A381217 Dog 2017-06-09 18:51:00 Cherokee Neutered Male


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

ANIMAL_ID NAME
A381217 Cherokee

보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 문제입니다.

 

보호소에 입소하기 전에 입양이 되었던 동물들을 찾는 문제입니다.

여기서는 기록이 누락된 부분은 없기 때문에, 동물들의 ID를 기준으로 이너 조인을 실행한 다음, WHERE 조건으로 입소 시간과 입양 시간을 비교하면 됩니다.

 

정답 코드를 작성해보겠습니다.

  SELECT AI.ANIMAL_ID, AI.NAME
    FROM ANIMAL_INS AI
         INNER JOIN
         ANIMAL_OUTS AO
         USING(ANIMAL_ID)
   WHERE AI.DATETIME > AO.DATETIME
ORDER BY AI.DATETIME ASC;

 

입소 시간이 입양 시간보다 크다면, 입양이 먼저 이뤄지고 입소가 되었다는 뜻입니다.

해당하는 조건을 WHERE 조건절에 작성해주시면 됩니다.