Post

보호소에서 중성화한 동물

JOIN

보호소에서 중성화한 동물


문제 설명

다음은 동물 보호소에서 관리하는 정보를 담은 ANIMAL_INS 테이블과 동물 보호소에서 입양 보낸 동물의 정보를 담은 ANIMAL_OUTS 테이블입니다.


ANIMAL_INS 테이블

Column nameTypeNullableDescription
ANIMAL_IDVARCHAR(N)FALSE동물 ID
ANIMAL_TYPEVARCHAR(N)FALSE생물 종
DATETIMEDATETIMEFALSE보호 시작일
INTAKE_CONDITIONVARCHAR(N)FALSE보호 시작 당시 상태
NAMEVARCHAR(N)TRUE동물의 이름
SEX_UPON_INTAKEVARCHAR(N)FALSE보호 시작 시의 성별 및 중성화 여부


ANIMAL_OUTS 테이블

Column nameTypeNullableDescription
ANIMAL_IDVARCHAR(N)FALSE동물 ID
ANIMAL_TYPEVARCHAR(N)FALSE생물 종
DATETIMEDATETIMEFALSE입양일
NAMEVARCHAR(N)TRUE동물의 이름
SEX_UPON_OUTCOMEVARCHAR(N)FALSE입양 시의 성별 및 중성화 여부




문제

보호소에서 중성화 수술을 거친 동물 정보를 알아보려 합니다. 보호소에 들어올 당시에는 중성화 되지 않았지만, 보호소를 나갈 당시에는 중성화된 동물의 아이디와 생물 종, 이름을 조회하는 아이디 순으로 조회하는 SQL 문을 작성해주세요.




풀이 과정
  1. 조건 확인
    • 입양되지 못한 동물만 찾기 위해 ANIMAL_OUTS에 해당 동물의 기록이 없는 경우를 필터링해야 함
    • Intact는 중성화되지 않은 상태를 의미함
    • 보호소에서 나갈 당시 SEX_UPON_OUTCOMESpayed 또는 Neutered로 시작함
    • Spayed는 암컷 중성화, Neutered는 수컷 중성화를 의미함
  2. 테이블 결합 (JOIN)
    • 두 테이블을 ANIMAL_ID를 기준으로 INNER JOIN
    • INNER JOIN 사용 이유 : 입양 기록이 있는 동물만 조회하면 되기 때문
  3. 조건 필터링
    • SEX_UPON_INTAKE LIKE ‘Intact%’ 사용해서 보호소에 들어올 당시 중성화되지 않은 동물만을 필터링
    • SEX_UPON_OUTCOME LIKE ‘Spayed%’ OR SEX_UPON_OUTCOME LIKE ‘Neutered%’`사용해서 보호소에서 나갈 때 중성화된 동물만을 필터링
  4. 결과 정렬
    • 정렬 기준에 따라 ORDER BY로 결과 정렬
      • ORDER BY ANIMAL_ID ASC로 동물의 ID 기준으로 오름차순 정렬
  5. 최종 출력
    • SELECT 절에서 동물의 ID(ANIMAL_ID), 생물 종(ANIMAL_TYPE), 이름(NAME) 출력
  • 교훈
    • WHERE AND 조건에 괄호로 잘 묶어라..




정답

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT 
    AI.ANIMAL_ID, 
    AI.ANIMAL_TYPE, 
    AI.NAME
FROM 
    ANIMAL_INS AI
JOIN 
    ANIMAL_OUTS AO 
ON 
    AI.ANIMAL_ID = AO.ANIMAL_ID
WHERE 
    AI.SEX_UPON_INTAKE LIKE 'Intact%' 
    AND (AO.SEX_UPON_OUTCOME LIKE 'Spayed%' OR AO.SEX_UPON_OUTCOME LIKE 'Neutered%')
ORDER BY 
    AI.ANIMAL_ID ASC;


Tip

중성화 여부 필터링

  • 보호소에 들어올 당시 중성화되지 않은 동물은 SEX_UPON_INTAKE 컬럼이 Intact로 시작되며
  • 보호소에서 나갈 때 중성화된 동물은 Spayed 또는 Neutered로 시작함
  • 이를 위해 LIKE 연산자를 사용하여 필터링

SQL Dialect Used: Oracle




개념 확인

  • INNER JOIN
    • 두 테이블의 공통된 컬럼을 기준으로 데이터를 연결
    • 양쪽 테이블 모두에 일치하는 행만 결과에 포함됨
  • LIKE 연산자
    • 문자열의 특정 패턴이 일치하는 데이터를 찾을 때 LIKE 연산자 사용
    • %는 0개 이상의 문자를 대체하는 와일드카드




보호소에서 중성화한 동물

This post is licensed under Park Juyoung by the author.

Trending Tags