오랜 기간 보호한 동물(1)

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문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다.

오랜 기간 보호한 동물(1)Lv.3

59044

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

해설

ANIMAL_INS 테이블에서 아직 ANIMAL_OUTS 테이블로 옮겨지지 않은(출고되지 않은), 이름이 있는 동물들 중 가장 오래된 3마리의 이름과 시간을 선택하여 보여줍니다.

  • Name
    ANIMAL_INS.NAME, ANIMAL_INS.DATETIME
    Type
    Description

    ANIMAL_INS 테이블에서 동물의 이름(NAME)과 시간(DATETIME)을 선택합니다.

  • Name
    LEFT JOIN ANIMAL_OUTS ON ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
    Type
    Description

    ANIMAL_INS 테이블과 ANIMAL_OUTS 테이블을 ANIMAL_ID를 기준으로 연결합니다. LEFT JOIN은 ANIMAL_INS 테이블의 모든 행과 ANIMAL_OUTS 테이블의 해당되는 행을 함께 가져옵니다.

  • Name
    WHERE ANIMAL_OUTS.ANIMAL_ID IS NULL AND ANIMAL_INS.NAME IS NOT NULL
    Type
    Description

    ANIMAL_OUTS 테이블에 ANIMAL_ID가 없는(즉, 아직 출고되지 않은) 동물들과, 이름이 NULL이 아닌 동물들을 필터링합니다.

  • Name
    ORDER BY ANIMAL_INS.DATETIME
    Type
    Description

    결과를 ANIMAL_INS 테이블의 DATETIME 열을 기준으로 정렬합니다.

  • Name
    LIMIT 3
    Type
    Description

    문제 요구에 맞게 사우이 3개 행만 반환합니다. 이는 가장 오래된 3마리의 동물의 이름과 시간을 보여줍니다.

오랜 기간 보호한 동물(1)

SELECT
    ANIMAL_INS.NAME,
    ANIMAL_INS.DATETIME
FROM
    ANIMAL_INS
LEFT JOIN
    ANIMAL_OUTS
ON
    ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
WHERE
    ANIMAL_OUTS.ANIMAL_ID IS NULL
    AND ANIMAL_INS.NAME IS NOT NULL
ORDER BY
    ANIMAL_INS.DATETIME LIMIT 3;