[프로그래머스 / SQL] JOIN (MySQL)

SQL

목록 보기
4/8


출처 https://chlgpdus921.github.io/basecamp/MySQL-JOIN/

조건에 맞는 도서와 저자 리스트 출력 (Lv.2)

https://school.programmers.co.kr/learn/courses/30/lessons/144854

SELECT B.BOOK_ID, A.AUTHOR_NAME, DATE_FORMAT(B.PUBLISHED_DATE, '%Y-%m-%d') PUBLISHED_DATE 
FROM AUTHOR A, BOOK B
WHERE B.CATEGORY = '경제' AND A.AUTHOR_ID = B.AUTHOR_ID
ORDER BY PUBLISHED_DATE 

교집합에 대해 찾는 구문으로 inner join으로 해결해줌.

SELECT B.BOOK_ID, A.AUTHOR_NAME, DATE_FORMAT(B.PUBLISHED_DATE, '%Y-%m-%d') PUBLISHED_DATE
FROM BOOK B JOIN AUTHOR A
    ON B.AUTHOR_ID = A.AUTHOR_ID
WHERE B.CATEGORY = '경제'
ORDER BY PUBLISHED_DATE

없어진 기록 (Lv.3)

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

SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_INS I RIGHT JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE I.NAME IS NULL AND O.NAME IS NOT NULL
ORDER BY ANIMAL_ID

차집합 조회하는 부분 숙지하기. 조회하는 부분의 알리아스를 써주기..

있었는데 없었습니다 (Lv.3)

SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I JOIN ANIMAL_OUTS O
    ON I.ANIMAL_ID = O.ANIMAL_ID
    AND I.DATETIME > O.DATETIME
ORDER BY I.DATETIME

datetime 조회를 o로 해서 틀렸음..ㅎ
굉장히 중요하다!

오랜기간 보호 (Lv.3)

SELECT I.NAME, I.DATETIME
FROM ANIMAL_INS I LEFT JOIN ANIMAL_OUTS O
    ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE O.ANIMAL_ID IS NULL
ORDER BY I.DATETIME LIMIT 3
  1. 기준값으로 들어오는 쪽 잘 생각하기
  2. left join 할 때 key값 동일, b.key is null

보호소에서 중성화 (Lv.4)

SELECT I.ANIMAL_ID, 
I.ANIMAL_TYPE, I.NAME
FROM ANIMAL_INS I JOIN ANIMAL_OUTS O
    ON I.ANIMAL_ID = O.ANIMAL_ID
    AND I.SEX_UPON_INTAKE LIKE 'Intact%'
WHERE O.SEX_UPON_OUTCOME LIKE 'Spayed%'
    OR O.SEX_UPON_OUTCOME LIKE 'Neutered%'
ORDER BY I.ANIMAL_ID

다른 풀이

SELECT I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAME 
FROM ANIMAL_INS as I JOIN ANIMAL_OUTS as O 
WHERE I.ANIMAL_ID = O.ANIMAL_ID AND I.SEX_UPON_INTAKE != O.SEX_UPON_OUTCOME
ORDER BY I.ANIMAL_ID

유념하자! 풀고나서 다른 사람 풀이 참고하기!
join 할 때 어디기준인지, 차집합인지 합집합인지 교집합인지!

profile
두둥탁 뉴비등장

0개의 댓글