SQL

[ORACLE] 프로그래머스 보호소에서 중성화한 동물

랩실외톨이 2021. 5. 27. 07:51
반응형

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

 

1. 서론

 

처음에는 엄청 복잡한 문제인가 보다 생각했는데 풀어보니 간단한 문제.

 

2. 문제 풀이

 

ANIMAL_INS: 동물 보호소에 들어온 동물의 정보를 담은 테이블

테이블 구조

ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE

(각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부)

 

ANIMAL_OUTS: 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블

테이블 구조:

ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME

(각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부)

 

 

Q. 보호소에 들어올 당시에는 중성화되지 않았지만, 보호소를 나갈 당시에는 중성화된 동물의 아이디와 생물 , 이름을 조회하는 아이디 순으로 조회하는 SQL 문을 작성해주세요.

 

조금만 생각해보면 간단한 문제다. animal_ins 테이블과 animal_outs 테이블의 중성화 여부를 비교하면 된다. 처음부터 중성화되어 있거나 계속 중성화를 안 한 상태가 유지가 되었다면 두 테이블에서 중성화 여부 값이 같을 것이다. 하지만 문제에서는 그 둘이 다른 경우를 조회해달라는 것이니 != 를 이용해서 비교해주면 된다.

 

3. 코드 설명

 

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 != b.sex_upon_outcome;

 

두 테이블을 이용해야 하기 때문에 조인해주고 이름을 붙여줬다.

비교 대상은 같은 동물이여야 하므로 둘의 animal_id는 항상 같아야 하며 동시에 중성화 여부가 다를 때, 즉 중간에 중성화를 한 경우를 골라낸다.

 

 

반응형