https://programmers.co.kr/learn/courses/30/lessons/59045
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는 항상 같아야 하며 동시에 중성화 여부가 다를 때, 즉 중간에 중성화를 한 경우를 골라낸다.
'SQL' 카테고리의 다른 글
[SQLD] SQLD 요약본 아카이브 (0) | 2021.07.02 |
---|---|
[ORACLE] 프로그래머스 헤비 유저가 소유한 장소 (+ MySQL) (0) | 2021.05.30 |
[ORACLE] 프로그래머스 오랜 기간 보호한 동물(2) (+MySQL) (0) | 2021.05.27 |
[ORACLE] 프로그래머스 중성화 여부 파악하기 (0) | 2021.05.27 |
[ORACLE] 프로그래머스 이름에 el이 들어가는 동물 찾기 (0) | 2021.05.27 |