SQL JOIN 정리(LEFT RIGHT OUTER JOIN, INNER JOIN, FULL OUTER JOIN, CROSS JOIN, SELF JOIN)

728x90

SQL 코테 풀다가 JOIN문 이해가 부족한 거 같아 다시 학습하고 정리해 보았다!

 

강의: 유튜브 생활코딩, 참고 자료 및 사이트

https://www.youtube.com/watch?v=2Xa54XBXbk0&list=PLuHgQVnccGMAG1O1BRZCT3wkD_aPmPylq

https://github.com/egoing/sql-join/blob/master/dump.sql

https://sql-joins.leopard.in.ua/

 

JOIN

 

JOIN: 여러개의 분산된 테이블을 묶어서 하나의 테이블로 만든다.

 

하나의 테이블은 하나의 '주제'만 가져야 한다.

 

LEFT JOIN(LEFT OUTER JOIN)

  • 왼쪽 테이블의 모든 행과 오른쪽 테이블의 일치하는 행을 반환한다.
  • 일치하는 행이 없는 경우에도 왼쪽 테이블의 행은 반환된다.

 

 

실습 1.

두 개의 테이블

 

SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.aid;

 

NULL: 왼쪽에는 값이 있지만, 오른쪽테이블에는 그 값과 일치하는 값이 없음을 뜻함

 

 

실습 2.

 

SELECT * FROM topic

LEFT JOIN author ON topic.author_id = author.aid

LEFT JOIN profile ON author.profile_id = profile.pid;

 

필요한 컬럼만 나오게 하거나 WHERE을 사용해서 조건 지정 가능

 

RIGHT JOIN도 방향만 반대일 뿐 동일

 

 

INNER JOIN

  • 가장 일반적인 JOIN 유형 중 하나이다(성능이 좋다).
  • 두 테이블 간에 일치하는 행만 반환한다.

 

 

실습 3.

 
SELECT * FROM topic INNER JOIN author ON topic.author_id = author.aid

 

FULL OUTER JOIN

  • 왼쪽 테이블과 오른쪽 테이블의 모든 행을 반환한다.
  • 일치하는 행이 없는 경우에도 양쪽 테이블의 행은 반환된다

 

거의 사용하지 않는다!

 

많은 RDBMS에서 FULL OUTER JOIN을 지원하지 않지만 LEFT JOIN + RIGHT JOIN을 해서 중복된 결과를 지움(UNION)으로써 동일한 결과를 가져 올 수 있다.

 

CROSS JOIN

  • 두 테이블 간의 모든 가능한 조합을 반환한다.
SELECT *
FROM table1
CROSS JOIN table2;

 

SELF JOIN

  • 동일한 테이블 내에서 JOIN을 수행합니다.
SELECT *
FROM table1 t1
INNER JOIN table1 t2 ON t1.column = t2.column;

 

 

728x90