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
'기술이야기 (Technomian) > MySQL' 카테고리의 다른 글
[MySQL 문제풀이 공부] 프로그래머스 MySQL 문제 - String, Date (0) | 2021.10.01 |
---|---|
[MySQL 문제풀이 공부] 프로그래머스 MySQL 문제 - IS NULL (0) | 2021.10.01 |
[MySQL 문제풀이 공부] 프로그래머스 MySQL 문제 - GROUP BY (0) | 2021.10.01 |
[MySQL 문제풀이 공부] 프로그래머스 MySQL 문제 - SUM, MAX, MIN (0) | 2021.10.01 |
[MySQL 문제풀이 공부] 프로그래머스 MySQL 문제 - SELECT문 (2) (0) | 2021.10.01 |