Post

DB - 조인

데이터베이스 스터디 2주차에서 학습하고 정리한 내용입니다.

1. Join

관계 대수에서 조인은 Cross Product한 결과에 여러 조건을 추가한 것이다. Cross Product한 결과에 조건에 맞는 결과만 Selection하거나 Projection 한다. img.png

예제 테이블

customers

customer_idcustomer_name
1Kim
2Lee
3Park

orders

order_idcustomer_idtotal_amount
118000
213000
328000
429000
5411000

2. Cross Join

Cross Join은 관계 대수에서 Cross Product를 적용한 결과와 같다. Cross Product는 두 테이블의 튜플을 조합하여 가능한 모든 경우의 수이다. Cross Join의 튜플 수는 각 테이블의 튜플 수를 곱한 값과 일치한다.


3. Inner Join

Cross Join에서 조인 조건과 일치하는 결과만 반환하면 Inner Join이다. 조인 조건과 일치하는 튜플들만 남고 나머지는 다 버려진다.

1) Theta Join(θ)

Cross Product한 결과의 조건으로 =, >, <, >=, <= 등으로 표현되면 Theta Join이라고 한다.

1
2
SELECT * FROM customers CROSS JOIN orders 
ON customers.customer_id > orders.customer_id;
customer_idcustomer_nameorder_idcustomer_id(orders)total_amount
2Lee118000
2Lee213000
3Park118000
3Park213000
3Park328000
3Park429000

2) Equi Join

세타 조인 중 조건 θ가 =인 특별한 경우를 Equi Join이라고 한다. MySQL에서 JOIN은 Equi Join을 의미한다.

1
2
SELECT * FROM customers CROSS JOIN orders 
ON customers.customer_id = orders.customer_id;
customer_idcustomer_nameorder_idcustomer_id(orders)total_amount
1Kim118000
1Kim213000
2Lee328000
2Lee429000

3) Natural Join

Equi Join은 동일한 이름을 가진 customer_id 열이 중복해서 나오고 있다. 이 Equi Join에서 중복되어 나오는 customer_id 열을 하나로 통합하면 자연 조인이 된다.

1
SELECT * FROM customers NATURAL JOIN orders;
customer_idcustomer_nameorder_idtotal_amount
1Kim18000
1Kim23000
2Lee38000
2Lee49000

4. Outer Join

Inner Join과 달리 조인 조건을 만족하지 않는 데이터도 포함될 수 있다.

1) Left Outer Join

조인 조건을 만족하는 데이터에 조인 조건을 만족하지 않는 왼쪽 테이블의 데이터도 모두 추가한다. customers.customer_id = orders.customer_id 조인 조건을 만족하지 않아 포함되지 않았던 Park이 포함되어 있다. order table의 정보는 null로 표시되어 있다.

customer_idcustomer_nameorder_idcustomer_id(orders)total_amount
1Kim118000
1Kim213000
2Lee328000
2Lee429000
3Parknullnullnull

2) Right Outer Join

조인 조건을 만족하는 데이터에 조인 조건을 만족하지 않는 오른쪽 테이블의 데이터도 모두 추가한다. 조인 조건을 만족하지 않아 포함되지 않았던 5번째 주문 내역이 포함되어 있다.

customer_idcustomer_nameorder_idcustomer_id(orders)total_amount
1Kim118000
1Kim213000
2Lee328000
2Lee429000
nullnull5411000

3) Full Outer Join

조인 조건을 만족하는 데이터에 조인 조건을 만족하지 않는 왼쪽, 오른쪽 테이블의 데이터를 모두 추가한다.

customer_idcustomer_nameorder_idcustomer_id(orders)total_amount
1Kim118000
1Kim213000
2Lee328000
2Lee429000
3Parknullnullnull
nullnull5411000

Reference

0

그림 출처: https://medium.com/@iammanolov98/mastering-sql-joins-coding-interview-preparation-cross-join-230abb340336

1

홍봉희 편저, 데이터베이스 SQL 프로그래밍 ‘MySQL 실습’, 부산대학교출판문화원

2

https://velog.io/@haerong22/LEFT-OUTER-JOIN-%EC%9D%98-%ED%95%A8%EC%A0%95

This post is licensed under CC BY 4.0 by the author.