내가 만든 예시를 통해 JOIN에 대해 알아보기로 한다. (프로그래머스 문제 참고하여 간단하게 만듬)

BOOK 테이블과 AUTHOR 테이블



[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

profile
즐겁

0개의 댓글