[프로그래머스/MySQL] JOIN

bye9·2021년 3월 11일
0

알고리즘(코테)

목록 보기
95/130

https://programmers.co.kr/learn/courses/30/lessons/59042


문제풀이

동물이 입양을 간 기록이 있는데(ANIMAL_OUTS에 있는데) 보호소에 들어온 기록이 없는(ANIMAL_INS에 없는) 동물의 ID와 이름을 ID 순으로 조회해야 한다.

LEFT JOIN을 활용한다.

코드2와 같은 경우도 성립한다.

소스코드

코드1

-- 코드를 입력하세요
SELECT ANIMAL_OUTS.ANIMAL_ID, ANIMAL_OUTS.NAME
FROM ANIMAL_OUTS
LEFT JOIN ANIMAL_INS 
ON ANIMAL_INS.ANIMAL_ID=ANIMAL_OUTS.ANIMAL_ID
WHERE ANIMAL_INS.ANIMAL_ID IS NULL

코드2

select animal_id, name  
from animal_outs  
where animal_id not in (select animal_id from animal_ins); 


https://programmers.co.kr/learn/courses/30/lessons/59043


문제풀이

보호 시작일(ANIMAL_INS의 DATETIME)보다 입양일(ANIMAL_OUTS의 DATETIME)이 더 빠른 경우를 조회해야 한다.

소스코드

-- 코드를 입력하세요
SELECT ANIMAL_INS.ANIMAL_ID, ANIMAL_INS.NAME
FROM ANIMAL_INS
LEFT JOIN ANIMAL_OUTS
ON ANIMAL_INS.ANIMAL_ID=ANIMAL_OUTS.ANIMAL_ID
WHERE ANIMAL_INS.DATETIME>=ANIMAL_OUTS.DATETIME
ORDER BY ANIMAL_INS.DATETIME


https://programmers.co.kr/learn/courses/30/lessons/59044


문제풀이

아직 입양을 못 간 동물을 조회해야하므로 ANIMAL_INS에는 있지만 ANIMAL_OUTS에 없는 동물을 조회해야한다.

이때 가장 오래 있었던 3마리만 조회해준다.

소스코드

-- 코드를 입력하세요
SELECT ANIMAL_INS.NAME, ANIMAL_INS.DATETIME
FROM ANIMAL_INS
LEFT JOIN ANIMAL_OUTS
ON ANIMAL_INS.ANIMAL_ID=ANIMAL_OUTS.ANIMAL_ID
WHERE ANIMAL_OUTS.ANIMAL_ID IS NULL
ORDER BY ANIMAL_INS.DATETIME LIMIT 3


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


문제풀이

보호소에 들어올 당시에는 중성화되지 않았지만(ANIMAL_INS테이블에서 SEX_UPON_INTAKE가 Intact Male, Intact Female이면서) 보호소를 나갈 당시에는 중성화된 동물(ANIMAL_OUTS테이블에서 SEX_UPON_OUTCOME이 Spayed Female, Neutered Male인 경우)을 조회해야 한다.

코드2의 경우도 성립한다.

소스코드

코드1

-- 코드를 입력하세요
SELECT ANIMAL_INS.ANIMAL_ID, ANIMAL_INS.ANIMAL_TYPE, ANIMAL_INS.NAME
FROM ANIMAL_INS
LEFT JOIN ANIMAL_OUTS
ON ANIMAL_INS.ANIMAL_ID=ANIMAL_OUTS.ANIMAL_ID
WHERE (ANIMAL_INS.SEX_UPON_INTAKE="Intact Male" or ANIMAL_INS.SEX_UPON_INTAKE="Intact Female") 
and (ANIMAL_OUTS.SEX_UPON_OUTCOME="Spayed Female" or ANIMAL_OUTS.SEX_UPON_OUTCOME="Neutered Male")
ORDER BY ANIMAL_INS.ANIMAL_ID

코드2

SELECT A.ANIMAL_ID, A.ANIMAL_TYPE, A.NAME
FROM ANIMAL_INS A
INNER JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.SEX_UPON_INTAKE IN ('Intact Male','Intact Female')
AND B.SEX_UPON_OUTCOME IN ('Neutered Male','Spayed Female')

0개의 댓글