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 JOIN과 RIGHT JOIN의 UNION 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