본문 바로가기
코딩테스트/SQL

[프로그래머스] JOIN 〉Lv4. 보호소에서 중성화한 동물

by imsha 2021. 10. 24.

문제 설명

 


예시

 


풀이 방법

보호소에서 중성화 수술을 거친 동물 정보를 알아보기 위한 쿼리를 짭니다. 보호소에 들어올 당시에는 중성화되지 않았지만(성별 및 중성화 여부에 Intact인 동물), 보호소를 나갈 당시에는 중성화된(성별 및 중성화 여부에 Spayed 또는 Neutered로 표시되어 있는 동물) 동물의 아이디와 생물 종, 이름을 조회하는 아이디 순으로 조회하는 문제입니다. FROM절에서 보호소에 들어온 동물의 정보가 담긴 테이블 ANIMAL_INS와 입양간 동물의 정보가 담긴 테이블 ANIMAL_OUTS를 동물의 아이디로 매치하여 JOIN합니다. WHER절에서 중성화 여부에 대한 조건을 명시하는데, 글자를 포함하는지 알아보기 위해서는 LIKE 연산자 와 와일드카드('%,_')를 사용하여 해당 문자가 포함되어 있는지를 살펴봅니다. 이 때, 보호소에 들어올 당시 중성화 되지 않은 동물과 입양 당시 중성화된 동물로 AND와 OR 연산자를 적절히 활용하여 조건을 짭니다. 그 다음 동물의 아이디를 ORDER BY 합니다.


LIKE연산자와 와일드카드(%, _) 사용

LIKE는 패턴 매칭 연산자로 특정한 패턴을 포함하는 데이터만을 검색하기 위해 사용됩니다. 문제에서 묻는 보호소에 들어올 당시 중성화되지 않은 동물의 경우, 시작하는 문자가 'Intact'인 것을 알고 있습니다. 이를 WHERE절에서 표현하면 아래와 같습니다.

WHERE SEX_UPIN_INTAKE LIKE "Intact%"

'%'는 0개 이상의 문자라는 의미로 'Intact'라는 문자 이후 0개 이상의 문자를 의미합니다. 즉, 시작하는 문자로 Intact라는 단어가 존재할 때 라는 조건이 만들어지는 것입니다. '%'는 와일드카드 문자라고 합니다.

이러한 와일드카드 문자는 '_'도 존재하며 이는 1개의 문자를 의미합니다. 만약 년도별(YEAR)로 정리된 '졸업'테이블에서 2020년대 졸업한 사람들의 데이터를 조회하려고 한다면 아래와 같이 쿼리를 작성할 수 있습니다.

SELECT * FROM 졸업
WHERE YEAR LIKE '202_'

 

이처럼 '202_'는 '202' 다음으로 1개의 문자가 들어간 졸업년도를 조회하여 2020년대의 연도를 추출하게 됩니다. 이와 같이 2000년대라면 '2___'로 '_'을 3번 사용하여 표현할 수도 있습니다. 



문제 풀이

SELECT OUTS.ANIMAL_ID, OUTS.ANIMAL_TYPE, OUTS.NAME
FROM ANIMAL_INS INS JOIN ANIMAL_OUTS OUTS
     ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
WHERE SEX_UPON_INTAKE LIKE 'INTACT%'
      AND (SEX_UPON_OUTCOME LIKE 'SPAYED%' 
           OR SEX_UPON_OUTCOME LIKE 'NEUTERED%')
ORDER BY ANIMAL_ID

 


실행 결과

댓글