본문 바로가기
개발/database

[Oracle] programmers - 보호소에서 중성화한 동물

by ujin2021 2021. 8. 5.

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

 

코딩테스트 연습 - 보호소에서 중성화한 동물

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

ANIMAL_INS의 SEX_UPON_INTAKE는 Intact Male or Intact Female이고, ANIMAL_OUTS의 SEX_UPON_OUTCOME은 Spayed Male or Spayed Female or Neutered Male or Neutered Female인 동물의 ID, TYPE, NAME을 찾는 문제입니다.

 

풀이

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

까다로운 JOIN문이 아니기 때문에 ANIMAL_ID 로 JOIN을 한 후, LIKE 문을 이용해 SEX_UPON_INTAKE와 SEX_UPON_OUTCOME 을 체크해 주었습니다.

저는 처음에 B.SEX_UPON_OUTCOME을 찾을 때 OR을 사용해서 두개를 적었는데, 그 대신 NOT LIKE를 사용할 수 있습니다.

 

풀이 - NOT LIKE 사용

SELECT A.ANIMAL_ID, A.ANIMAL_TYPE, A.NAME
FROM ANIMAL_INS A, ANIMAL_OUTS B
WHERE A.ANIMAL_ID = B.ANIMAL_ID
AND A.SEX_UPON_INTAKE LIKE 'Intact%'
AND B.SEX_UPON_OUTCOME NOT LIKE 'Intact%'
ORDER BY A.ANIMAL_ID

더 깔끔해졌습니당!