-
[SQL] JOIN 정리Computer Science/Database 2022. 7. 14. 17:49728x90
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'Computer Science > Database' 카테고리의 다른 글
[Kafka] 아파치 카프카(Apache Kafka)에 대해서 (1) 2023.12.20 [메시지 큐] 메시지 큐에 대해서 (메시지 큐, MOM, 특징, 이점 등) (0) 2023.12.10 [Redis] Redis에 대해서 (Redis란, 특징, 영속성, 자료구조, 아키텍처) (0) 2023.12.10 [SQL] 집계 함수를 쓰기 어려울 때 over()와 서브 쿼리 중 뭐를 사용해야 할까? (0) 2023.10.13 [SQL] DML (0) 2022.07.14