[MySQL] 프로그래머스 JOIN

nayoon-kim·2021년 8월 7일
0

📙 SELECT 문제 공통 지문

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다. ANIMAL_OUTS 테이블의 ANIMAL_ID는 ANIMAL_INS의 ANIMAL_ID의 외래 키입니다.

📌 없어진 기록 찾기
📌 있었는데요 없었습니다
📌 오랜 기간 보호한 동물(1)
📌 보호소에서 중성화한 동물

검색

JOIN을 이용한 검색

📝 없어진 기록 찾기

천재지변으로 인해 일부 데이터가 유실되었습니다. 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요.


입양을 간 적이 있지만 보호소에 들어간 기록이 없는 동물을 찾기 위해서는 위와 같은 모양에서 ANIMAL_INS에 겹치지 않는 ANIMAL_OUTS를 구해야 한다.

RIGHT JOIN 후 ANIMAL_INS의 ID가 NULL인 레코드를 뽑았다.

📝 있었는데요 없었습니다

관리자의 실수로 일부 동물의 입양일이 잘못 입력되었습니다. 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일이 빠른 순으로 조회해야합니다.

보호 시작일보다 입양일이 더 빠를 경우 O.DATETIME < I.DATETIME 으로 연산자 표기에 신경써야한다.
(예. 2021.08.07 < 2021.09.01)

📝 오랜 기간 보호한 동물(1)

아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다.

입양을 가지 못했기 때문에 ANIMAL_OUTS에는 존재하지 않는 동물이다.

따라서 JOIN 후 ANIMAL_OUTS의 ANIMAL_ID가 NULL인 레코드를 DATETIME 순으로 정렬해서 3개를 뽑아낸다.

📝 보호소에서 중성화한 동물

보호소에서 중성화 수술을 거친 동물 정보를 알아보려 합니다. 보호소에 들어올 당시에는 중성화되지 않았지만, 보호소를 나갈 당시에는 중성화된 동물의 아이디와 생물 종, 이름을 조회하는 아이디 순으로 조회하는 SQL 문을 작성해주세요.

입양을 간 동물들 중

보호소에 들어왔을 때는 중성화되지 않았지만, 보호소를 나갈 당시 중성화된 동물을 찾는 문제이므로

JOIN과 LIKE를 사용해서 문제를 풀면 된다.

RIGHT JOIN을 이용해서 풀었는데, 입양을 간 동물들 중 조건에 따라 레코드를 조회해야 하기 때문이다.

LEFT JOIN을 이용해서 푼다면 아래와 같이 풀면 된다.

profile
뚜벅뚜벅 열심히 공부하는 개발자

0개의 댓글