본문 바로가기
공부/DATABASE

[MySQL] JOIN 총 정리

by happyeuni 2023. 3. 7.

<목차>

- 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;

위로 올리지 말고 보세여 22

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글