꾸물꾸물 졔의 개발공부

[MySQL] 프로그래머스 - 보호소에서 중성화한 동물 (JOIN, String, LIKE) 본문

알고리즘/SQL

[MySQL] 프로그래머스 - 보호소에서 중성화한 동물 (JOIN, String, LIKE)

체제 2023. 5. 10. 21:57

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

 

프로그래머스

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

programmers.co.kr

 

  • ANIMAL_INS : 동물 보호소에 들어온 동물의 정보 (SEX_UPON_INTAKE : 중성화 여부)
  • ANIMAL_OUTS : 동물 보호소에서 입양 보낸 동물의 정보 (SEX_UPON_OUTCOME : 중성화 여부)

 

문제

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


 

구현 과정

  • 두 테이블 JOIN 
  • 각 테이블의 중성화 여부 컬럼 확인하여 조건을 만족하는 동물 정보 조회 

 

1️⃣ 두 테이블 JOIN 

각 테이블의 중성화 여부 컬럼 (SEX_UPON_INTAKE, SEX_UPON_OUTCOME)을 모두 사용해야 하므로, 두 테이블을 JOIN하여 두 컬럼의 값을 확인한다. 기본키이자 외래키인 ANIMAL_ID 컬럼을 사용해서 JOIN 한다. 두 테이블 모두 해당 컬럼과 값을 가지고 있으므로 INNER JOIN ! 

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

👉각 테이블에 A,B 별칭을 사용하여 "테이블명.컬럼"을 보다 간편하게 조회.

 

 

2️⃣ 각 테이블의 중성화 여부 컬럼 확인, 조건을 만족하는 동물 정보 조회 

ANIMAL_INS 테이블의 SEX_UPON_INTAKE 컬럼ANIMAL_OUTS의 SEX_UPON_OUTCOME 컬럼이 아래의 조건을 '모두' 만족하는 데이터를 찾아야 한다. AND 연산자를 사용하여 조건을 '모두' 만족하는 동물을 찾는다.

  • 보호소에 들어올 당시에는 중성화 되지 않았지만 : SEX_UPON_INTAKE = 'Intact Male' or 'Intact Female' 
  • 보호소를 나갈 당시에는 중성화 된 : SEX_UPON_OUTCOME = 'Neutered Male' or 'Spayed Female' 

 

LIKE 연산자를 사용하여 SEX_UPON_INTAKE 가 앞쪽에 'Intact'를 포함하는지 즉, 'Intact%' 인지 확인할 수 있다. 또한 SEX_UPON_OUTCOME 'Neutered%' 또는 'Spayed%' 인지 확인할 수 있다. SEX_UPON_OUTCOME 컬럼은 ['Neutered', 'Spayed'] 중 하나면 되므로 OR 연산자를 사용한다. 

SELECT *
FROM (두 테이블 JOIN) 
WHERE A.SEX_UPON_INTAKE LIKE 'Intact%'
AND 
(B.SEX_UPON_OUTCOME LIKE 'Spayed%' OR B.SEX_UPON_OUTCOME LIKE 'Neutered%')

 

✔️코드

SELECT B.ANIMAL_ID, B.ANIMAL_TYPE, B.NAME
FROM ANIMAL_INS A JOIN ANIMAL_OUTS B 
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.SEX_UPON_INTAKE LIKE 'Intact%'
AND (B.SEX_UPON_OUTCOME LIKE 'Spayed%' OR B.SEX_UPON_OUTCOME LIKE 'Neutered%')
ORDER BY B.ANIMAL_ID;