본문 바로가기
Computer Science/Database

[SQL] INNER JOIN, OUTER JOIN, NATURAL JOIN

by JuHy_ 2020. 6. 16.

Join이란?

Join 연산은 서로 다른 2개의 테이블을 결합하는 연산이다.

이 때 결합하는 방식에 따라 Inner Join, Outer Join, Natural Join 등으로 나뉜다.

 

 

Inner Join

SELECT * FROM instructor JOIN teaches
SELECT * FROM instructor, teaches

SQL에서 기본적으로 JOIN 키워드를 사용하거나 콤마(,)를 통해 연결하면 Inner Join 연산을 수행한다.

이 때, 조건이 설정되지 않은 Inner Join은 Cross Join과 같은 연산을 수행한다.

 

Cross Join은 곱연산으로, 테이블의 각 행끼리의 모든 조합을 나타내준다.

따라서 위와 같이 2행짜리 테이블 2개를 Join을 하면 2×2=4행의 테이블이 만들어진다.

 

 

SELECT * FROM instructor I JOIN teaches T ON I.id=T.id

이 때, Inner Join 뒤에 ON 키워드를 통해 일치하는 속성을 기준으로 결합할 수도 있으며, 이를 Equi Join이라고 한다.

 

 

 

Outer Join

Outer Join은 공통된 부분만 결합하는 Inner Join과 다르게 공통되지 않은 row도 유지한다.

 

이 때, 왼쪽 테이블의 row를 유지하면 Left Outer Join,

오른쪽 테이블의 row를 유지하면 Right Outer Join,

양쪽 테이블의 row를 모두 유지하면 Full Outer Join이다.

 

Left Outer Join

SELECT * FROM instructor I LEFT OUTER JOIN teaches T ON I.id=T.id

LEFT OUTER JOIN을 수행하면 왼쪽 테이블(instructor)을 기준으로 id가 일치하는 row만 결합되고,

일치하지 않는 부분은 null 값으로 채워진다.

 

Right Outer Join

SELECT * FROM instructor I RIGHT OUTER JOIN teaches T ON I.id=T.id

RIGHT OUTER JOIN을 수행하면 오른쪽 테이블(teaches)을 기준으로 id가 일치하는 row만 결합되고,

일치하지 않는 부분은 null 값으로 채워진다.

 

Full Outer Join

SELECT * FROM instructor I FULL OUTER JOIN teaches T ON I.id=T.id

FULL OUTER JOIN을 수행하면 id가 일치하는 row만 결합한 뒤 일치하지 않는 row의 빈 칸은 모두 null 값으로 채워진다.

 

※ MySQL에서는 FULL OUTER JOIN을 지원하지 않으므로 LEFT OUTER JOIN 결과와 RIGHT OUTER JOIN 결과를 UNION 키워드를 통해 합쳐 사용해야 한다.

 

 

 

Natural Join

Natural Join을 사용하면 공통된 속성을 찾아 같은 값을 갖는 항목끼리 결합시켜준다.

만약 같은 값을 갖는 항목이 없다면 해당 항목은 제외한다.

 

SELECT * FROM instructor NATURAL JOIN teaches

SQL은 마찬가지로 FROM 절의 결합할 두 테이블 사이에 NATURAL JOIN 키워드를 넣어주면 된다.