<목차>
- BOOK 테이블과 AUTHOR 테이블
- INNER JOIN
- NATURAL JOIN
- LEFT [OUTER] JOIN
- RIGHT [OUTER] JOIN
- NATURAL LEFT JOIN
- NATURAL RIGHT JOIN
- FULL OUTER JOIN ( = UNION)
- CROSS JOIN
- SELF JOIN
내가 만든 예시를 통해 JOIN에 대해 알아보기로 한다. (프로그래머스 문제 참고하여 간단하게 만듬)
BOOK 테이블과 AUTHOR 테이블
BOOK 테이블의 book_id 4번 행과
AUTHOR 테이블의 author_id 3번 행은 left join, right join을 위해서 만든 것. 서로 연관된 것이 없음.
[INNER] JOIN
- INNER JOIN은 보통 조건 ON과 함께 사용되어 두 테이블간 JOIN 조건을 만족하는 행을 반환
- (=교집합)
SELECT *
FROM BOOK [INNER] JOIN AUTHOR
-- FROM BOOK, AUTHOR -- 같은 결과
ON BOOK.author_id = AUTHOR.author_id;
SELECT *
FROM BOOK [INNER] JOIN AUTHOR;
-- ON 조건을 쓰지 않은 JOIN은 CROSS JOIN과 같은 값이 나옴
-- FROM BOOK, AUTHOR; -- 같은 결과
NATURAL JOIN
- INNER JOIN과 같은 느낌이지만 조건을 따로 명시하지 않아도 되고, 중복된 컬럼은 나타나지 않는다.
SELECT *
FROM BOOK NATURAL JOIN AUTHOR;
LEFT [OUTER] JOIN
- 조인문의 왼쪽에 있는 테이블의 모든 결과를 가져온 후 오른쪽 테이블의 데이터를 매칭하고, 매칭되는 데이터가 없는 경우 NULL로 표시
SELECT *
FROM BOOK LEFT JOIN AUTHOR
ON BOOK.author_id = AUTHOR.author_id;
RIGHT JOIN
- 조인문의 오른쪽에 있는 테이블의 모든 결과를 가져온 후 왼쪽 테이블의 데이터를 매칭하고, 매칭되는 데이터가 없는 경우 NULL로 표시
SELECT *
FROM BOOK RIGHT JOIN AUTHOR
ON BOOK.author_id = AUTHOR.author_id;
NATURAL LEFT JOIN
SELECT *
FROM BOOK NATURAL LEFT JOIN AUTHOR;
NATURAL RIGHT JOIN
SELECT *
FROM BOOK NATURAL RIGHT JOIN AUTHOR;
FULL OUTER JOIN
- LEFT JOIN과 RIGHT JOIN을 합친 것으로 양쪽 모두 조건이 일치하지 않는 것들까지 모두 결합하여 출력. 매칭되는 데이터가 없는 경우 NULL 표시
- MySQL에서는 FULL OUTER JOIN이 따로 없고, UNION을 사용하여 만들 수 있음
SELECT *
FROM BOOK LEFT JOIN AUTHOR
ON BOOK.author_id = AUTHOR.author_id
UNION
SELECT *
FROM BOOK RIGHT JOIN AUTHOR
ON BOOK.author_id = AUTHOR.author_id;
CROSS JOIN
- cartesian product라고도 하며 각 테이블에서 가능한 모든 조합의 결과를 나타냄
- m의 열을 가진 테이블과 n열을 가진 테이블이 교차조인되면 m*n의 열을 생성
- CROSS JOIN과 **쉼표,**는 같은 것을 의미
SELECT *
FROM BOOK CROSS JOIN AUTHOR;
SELF JOIN
- 자기 자신과 조인하는 것으로, 같은 테이블을 사용하여 반드시 별명을 붙여야 함
- 명령어가 따로 있는 것은 아님
SELECT *
FROM AUTHOR A JOIN AUTHOR B;
참고 :
https://velog.io/@yanghl98/Database-JOIN
https://school.programmers.co.kr/learn/courses/30/lessons/144854
'공부 > DATABASE' 카테고리의 다른 글
프로그래머스 SQL 문제 다 풀었다 히히 (0) | 2023.04.19 |
---|---|
SQL SELECT쿼리 실행 순서 (0) | 2023.04.18 |
[프로그래머스]대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기(MySQL 풀이) (0) | 2023.04.12 |
[MySQL]논리 관련 함수, NULL처리 정리(IFNULL,IF,NULLIF,COALESCE,CASE문) (0) | 2023.04.03 |
[DB]DROP, TRUNCATE, DELETE 정리 (1) | 2022.10.19 |
댓글