Computer Science/Database

[SQL] JOIN 정리

mirae.kwak 2022. 7. 14. 17:49
728x90

JOIN

  • 두 개 이상의 테이블들을 공통 필드를 가지고 통합하는 SQL언어
  • star schema로 구성된 테이블로 분산되어있던 정보를 통합하는데 사용
  • JOIN의 결과롤 양쪽의 필드를 모두 가진 새로운 테이블이 생성됨

 

JOIN의 종류

 
  • JOIN 시에는 중복 레코드가 없고 primary key와 uniqueness가 보장됨을 체크
  • 조인하는 테이블들 간의 관계를 명확히 정의
    • one to one : 완전한 one to one / 한쪽이 부분집합이 되는 one to one
    • one to many : 중복 문제가 발생할 수 있음
    • many to one : one to many와 동일
    • many to many : 가능하다면 one to many와 one to one으로 변경하여 조인
  • 어떤 테이블을 베이스로 둘 것인지 결정

 

INNER JOIN

양쪽 테이블에서 매치가 되는 레코드들만 리턴함

양쪽 테이블의 필드가 모두 채워진 상태로 리턴됨

SELECT * FROM database_name.table_name a
JOIN database_name.table_name b on a.field1 = b.field2;

 

LEFT/RIGHT JOIN

한쪽 테이블의 모든 레코드들을 리턴함

다른쪽 테이블의 필드는 한쪽 테이블의 레코드와 매칭되는 경우에만 채워진 상태로 매칭됨

SELECT * FROM database_name.table_name a
LEFT JOIN database_name.table_name b on a.field1 = b.field2;
SELECT * FROM database_name.table_name a
RIGHT JOIN database_name.table_name b on a.field1 = b.field2;
 

FULL JOIN

양쪽 테이블의 모든 레코드들을 리턴함

매칭되는 경우에만 양쪽 테이블들의 모든 필드들이 채워진 상태로 리턴됨

LEFT JOINRIGHT JOINUNION ALL

SELECT * FROM database_name.table_name a
LEFT JOIN database_name.table_name b on a.field1 = b.field2;

UNION

SELECT * FROM database_name.table_name a
RIGHT JOIN database_name.table_name b on a.field1 = b.field2;

 

OUTER JOIN

MYSQL에서 제공하는 공식적인 SQL어는 없음

LEFT JOIN RIGHT JOIN UNION 

 

CROSS JOIN

왼쪽 테이블과 오른쪽 테이블의 모든 레코드들의 조합을 리턴함

SELECT * FROM database_name.table_name a
CROSS JOIN database_name.table_name b;

 

SELF JOIN

동일한 테이블의 alias를 달리해서 자기 자신과 조인함

SELECT * FROM database_name.table_name a
JOIN database_name.table_name b on a.field1 = b.field2;
728x90