민트맛녹차 2023. 2. 14. 16:56

Join operation 이란 두 개이상의 relation 을 하나의 relation 처럼 만들어 주는 연산이다. Join operation 은 relation 의 tuple 들이 특정 조건에 의해 match 되기를 요구하는 Cartesian product 이다. 

 

예시를 위해 사용할 relation 들이다. 위의 relation 은 course, 아래 relation 은 prereq 이다. 

 

Inner Join

Inner join 은 모든 공통 column 들 중 같은 값을 가지는 tuple 들을 match 하고,  match 되지 않는 tuple 은 유지하지 않는다. 공통된 column 은 하나만 유지한다. 

SELECT * FROM course INNER JOIN prereq ON course.course_id = prereq.course_id

 

 

Outer Join

정보의 손실이 발생하는 inner join 과 다르게, 정보의 손실을 막기 위한 join operation 이다. inner join 과 유사하게 동작하지만,  join 에 의해 손실될 수 있는 tuple 들을 null 값으로 채워 보존한다. 

 

Left Outer Join

Left outer join 은 왼쪽 table 의 값을 유지한 채로 join 하고, 조건에 일치하지 않는 오른쪽 테이블의 값은 null 로 채운다.

SELECT * FROM course LEFT OUTER JOIN prereq ON course.course_id = prereq.course_id

 

 

Right Outer Join

Right outer join 은 오른쪽 table 의 값을 유지한 채로 join 하고, 조건에 일치하지 않는 왼쪽 테이블의 값은 null 로 채운다.

SELECT * FROM course RIGHT OUTER JOIN prereq ON course.course_id = prereq.course_id

 

Full Outer Join

Full outer join 은 모든 table 의 값을 유지한 채로 join 하고, 조건에 일치하지 않는 왼쪽 테이블의 값은 null 로 채운다.

SELECT * FROM course FULL OUTER JOIN prereq ON course.course_id = prereq.course_id

 

Join Condition

natural

join 하려는 table 들 중 같은 이름을 가진 공통된 column 들을 사용하여 암묵적으로 join 조건을 생성한다. inner join, left outer join, right outer join, full outer join 에 모두 사용 가능하며 기본적으로 inner join 을 사용한다. 

SELECT * FROM course NATURAL (INNER) JOIN prereq

SELECT * FROM course NATURAL RIGHT OUTER JOIN prereq

natural join 은 같은 이름을 가진 관계없는 column 들이 합쳐지는 등 잘못된 결과가 나올 수 있으므로 사용에 주의해야한다.

 

on

이전 예시들에서 확인한 것 처럼 join 하려는 table 의 조건을 설정한다. on <predicate> 의 형태를 띈다.

 

using

조인할 두 컬럼의 이름이 같다면 on 대신 사용 가능하다. using (A1, A2, ..., An) 의 형태를 띈다.

SELECT * FROM course FULL OUTER JOIN prereq USING (course_id)

 

 

마지막으로 join 에 관하여 이해하기 쉽게 벤다이어그램으로 표현한 이미지가 있어 첨부한다.

 

 

참조
Database-System-Concepts-7th-Edition
https://doh-an.tistory.com/30