
💻 코드1
SELECT AI.ANIMAL_ID, AI.ANIMAL_TYPE, AI.NAME
FROM ANIMAL_INS AI
LEFT JOIN ANIMAL_OUTS AO
ON AI.ANIMAL_ID = AO.ANIMAL_ID
WHERE AI.SEX_UPON_INTAKE LIKE 'Intact%'
AND AO.SEX_UPON_OUTCOME
IN ('Neutered Female', 'Spayed Female', 'Neutered Male', 'Spayed Male')
ORDER BY AI.ANIMAL_ID ASC;
💻 코드2
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 'Neutered%' OR AO.SEX_UPON_OUTCOME LIKE 'Spayed%')
ORDER BY AI.ANIMAL_ID ASC;
코드1도 결과는 똑같이 나오지만 두 가지를 바꿨다.
- LEFT JOIN을 그냥 JOIN(INNER JOIN)으로 바꿨다.
WHERE절에서 AO.SEX_UPON_OUTCOME에 조건을 걸기 때문에, 입양 기록이 아예 없는(AO가 NULL인) 동물은 어차피 걸러진다. - IN ('Neutered Female', 'Spayed Female', 'Neutered Male', 'Spayed Male')처럼 네 가지 조합을 나열하는 대신 LIKE 'Neutered%' OR LIKE 'Spayed%'로 바꿨다.
AI.SEX_UPON_INTAKE LIKE 'Intact%'에서도 성별은 신경 안 쓰고 접두어만 봤던 것처럼, 나가는 쪽도 접두어 기준으로 통일하는 게 더 일관되고 값 조합을 일일이 나열할 필요가 없다.
📖 새로 배운 부분
- LIKE 'Intact%'처럼 접두어 패턴으로 값을 걸러내면, 뒤에 붙는 성별(Male/Female)과 상관없이 상태만 확인할 수 있다는 걸 다시 확인했다.
참고
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
'코테 > MySQL' 카테고리의 다른 글
| [프로그래머스, SQL] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (0) | 2026.08.02 |
|---|---|
| [프로그래머스, SQL] 상품 별 오프라인 매출 구하기 (0) | 2026.08.02 |
| [프로그래머스, SQL] 오랜 기간 보호한 동물(1) (0) | 2026.08.02 |
| [프로그래머스, SQL] 있었는데요 없었습니다 (0) | 2026.08.02 |
| [프로그래머스, SQL] 없어진 기록 찾기 (0) | 2026.08.02 |