기술이야기 (Technomian)/MySQL

[MySQL 문제풀이 공부] 프로그래머스 MySQL 문제 - JOIN

economian 2021. 10. 1. 16:44

 

 


 

 

 

 

01. 없어진 기록 찾기

 

프로그래머스 내 작성

 

입양은 갔지만, 보호소에 들어온 기록은 없는 것을 찾아야 한다.

ANIMAL_OUTS(입양 보낸) 테이블을 기준으로 ANIMAL_ID를 KEY로 해서 JOIN을 한다. 그러면, ANIMAL_INS(보호소에 들어온) 테이블에 NULL값이 입력될 것이다.

이 때, 보호소에서 NULL값이 있는 것을 SELECT한다.

 

 

/* JOIN 문 활용법 */

 

JOIN문은 두 개 이상의 테이블이나 데이터베이스를 연결해서 데이터를 검색하는 방법이다. (어려워...)

 

Table A(a, b, c)와 Table B(a, b, c, d)이 있을 때,

 

1) Full JOIN

SELECT *
FROM A
FULL JOIN B ON A.key = B.key

이 경우, A와 B 테이블 모두 join 된다. 특히, 어느 한 쪽에 NULL 값이 있을 때 NULL값을 확인할 수 있다.

--> A테이블에 d값이 없으므로, NULL값이 나타남

 

2) RIGHT JOIN (inclusive)

SELECT *
FROM A
RIGHT JOIN B ON A.key = B.key

B를 기준으로 join 된다.

--> d값이 B테이블에만 있고 A테이블에는 없으므로, A테이블에서 NULL값을 확인할 수 있다.

 

3) RIGHT JOIN (exclusive)

SELECT *
FROM A
RIGHT JOIN B ON A.key = B.key
WHERE A.key is NULL

B를 기준으로 join하되, WHERE절 조건에 따라서 B에만 있는 값(d)이 나온다.

 

4) LEFT JOIN

SELECT *
FROM A
LEFT JOIN B ON A.key = B.key
WHERE B.key is NULL

A를 기준으로 join된다.

--> A테이블에 없는 d 값은 나타나지 않는다. 즉, NULL값이 없다.

 

5) INNER JOIN

SELECT *
FROM A
INNER JOIN B ON A.key = B.key

A테이블과 B테이블에 동시에 있는 값(a, b, c)만 나타난다. 즉, 교집합 같은 것

 

 

 


 

 

 

02. 있었는데요 없었습니다

 

프로그래머스 내 작성

 

보호 시작일보다 입양날짜가 더 빠른 동물을 찾는 것.

 

입양일이 기준으로 해야되기 때문에 ANIMAL_OUTS(입양 보낸) 테이블을 기준으로 LEFT JOIN을 한다.

 

ANIMAL_INS(보호일)과 ANIMAL_OUTS(입양일)의 DATETIME을 비교해서 입양일이 더 빠른 것을 조건(WHERE문)으로 해서 SELECT 한다.

 

 

 


 

 

 

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

 

프로그래머스 내 작성

아직 입양을 못 간 동물을 찾아야 되기 때문에, ANIMAL_INS(보호) 테이블을 기준으로 LEFT JOIN을 하면, INS테이블에 NULL값을 찾을 수 있다.INS테이블에서 NULL을 조건으로 Order by와 Limit를 활용해 SELECT 한다.

 

 


 

 

04. 보호소에서 중성화한 동물

 

프로그래머스 내 작성

 

보호소(INS)에 들어올 때는 중성화되지 않았지만, 입양(OUTS)될 때는 중성화된 동물을 찾는다.

 

보호소에 들어올 때 중성화되지 않은 것

 --> ins.SEX_UPON_INTAKE like '%Intact%'

입양될 때 중성화된 것

 --> outs.SEX_UPON_OUTCOME like ('%Neutered%') OR outs.SEX_UPON_OUTCOME like ('%Spayed%')

 

 

 


출처.

프로그래머스 MySQL 코딩테스트 연습

programmers.co.kr/learn/courses/30/parts/17042

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

이전글.

https://econimian.tistory.com/28

 

[MySQL 문제풀이 공부] 프로그래머스 MySQL 문제 - IS NULL

01. 이름 없는/있는 동물의 아이디 WHERE NAME is NULL --> '이름(NAME)이 없는(NULL)' 조건문 WHERE NAME is not NULL --> '이름(NAME)이 있는(NULL이 아닌)' 조건문 (크게 사진을 보기 위해 병합하지 않음...)..

econimian.tistory.com

 

728x90
반응형