JOIN 은 두 테이블의 데이터들을 하나의 결과 데이터로 결합하는 과정을 말합니다.


JOIN 의 처리과정은 Tree 형태로 표현됩니다.

Tree 에서 왼쪽에 놓여진 테이블을 Outer Node, 오른쪽에 놓여진 테이블을 Inner Node 라고 불립니다.

일반적으로 Outer Node 의 데이터를 읽어 Inner Node 에서 조건에 일치하는 데이터를 읽어와 결합하는 형태로 수행됩니다.



JOIN 대상의 테이블이 3개 이상이 되는 경우, 2개의 테이블을 먼저 Join 한 후 그 결과를 나머지 테이블에 다시 Join 하는 형태로 수행됩니다.

먼저 Join 된 결과가 Outer Node 쪽인 경우 Left Deep Join Tree 라 불리며, Inner Node 쪽인 경우 Right Deep Join Tree 라 합니다.

만약 Join 된 결과가 Outer Node 와 Inner Node 양쪽에 존재한다면 Hybrid Join Tree 라고 합니다.



이해가 어려울 수 있으므로, 그림으로 확인해 보겠습니다.



GOLDILOCKS 는 JOIN 의 종류로 다음 5가지를 지원합니다.

- Cross Join

- Inner Join

- Outer Join

- Semi Join

- Anti-Semi Join


 Join 종류

 설명

 Cross Join

 Outer Node 의 각 row 에 대해 Inner Node 의 모든 row가 결합되어 반환

 Inner Join

 Outer Node 의 각 row 에 대해 Inner Node 의 모든 row 중 Join 조건을 만족하는 row 에 대해서만 결합되어 반환

 Equi Join

 조건의 연산자가 = 인 경우
 Non Equi Join 조건의 연산자가 = 가 아닌 경우

 Outer Join

 Outer Node 의 각 row 에 대해 Inner Node 의 Join 조건을 만족하는 row 가 존재하면 해당 row 와 결합한 row 를 결과로 반환, Join 조건을 만족하는 row 가 없으면 NULL 을 결합한 row 를 반환

 Left Outer Join FROM 절의 좌측에 존재하는 테이블이 Outer Node 방식
 Right Outer Join

 FROM 절의 우측에 존재하는 테이블이 Outer Node 방식

 Full Outer Join

 Left Outer Join 과 Right Outer Join 의 합집합 방식

 Semi Join

 Outer Node 의 각 row 에 대해 Inner Node 에 Join 조건을 만족하는 row 가 존재하면 Outer Node 의 row 를 반환

 Anti-Semi Join

 Outer Node 의 각 row 에 대해 Inner Node 에 Join 조건을 만족하는 row 가 존재하지 않으면 Outer Node 의 row 를 반환



Inner Join 과, Outer Join 의 예시

MOZI 테이블과, TISTORY 테이블에 다음과 같은 데이터가 있습니다.

gSQL> SELECT * FROM MOZI;

  C1   C2
---- ----
   1    1
   2 null
null    3

3 rows selected.

gSQL> SELECT * FROM TISTORY;

  C1   C2
---- ----
   4    4
   5 null
null    6

3 rows selected.

Inner Join 의 결과입니다.

gSQL> SELECT * FROM MOZI, TISTORY WHERE MOZI.C1 + 3 = TISTORY.C1;

C1   C2 C1   C2
-- ---- -- ----
 1    1  4    4
 2 null  5 null
Left Outer Join 의 결과입니다.
gSQL> SELECT * FROM MOZI LEFT OUTER JOIN TISTORY ON MOZI.C1 = TISTORY.C1;

  C1   C2   C1   C2
---- ---- ---- ----
   1    1 null null
   2 null null null
null    3 null null

3 rows selected.

Right Outer Join 의 결과입니다.

gSQL> SELECT * FROM MOZI RIGHT OUTER JOIN TISTORY ON MOZI.C1 = TISTORY.C1;

  C1   C2   C1   C2
---- ---- ---- ----
null null    4    4
null null    5 null
null null null    6

3 rows selected.


블로그 이미지

사용자 꽁담