꾸물꾸물 졔의 개발공부
[MySQL] 프로그래머스 - 보호소에서 중성화한 동물 (JOIN, String, LIKE) 본문
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;
'알고리즘 > SQL' 카테고리의 다른 글
[MySQL] 프로그래머스 - 식품분류별 가장 비싼 식품의 정보 조회하기 (WHERE-IN, SubQuery) (0) | 2023.05.12 |
---|---|
[MySQL] 프로그래머스 - 5월 식품들의 총매출 조회하기 (JOIN, DATE, GROUP BY, SUM) (0) | 2023.05.11 |
[MySQL] 프로그래머스 - 없어진 기록 찾기 (OUTER JOIN) (0) | 2023.05.02 |
[MySQL] 프로그래머스 - 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (GROUP BY ~ HAVING , SubQuery) (0) | 2023.05.02 |
[MySQL] 프로그래머스 - 있었는데요 없었습니다 (JOIN, DATETIME) (0) | 2023.04.30 |