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
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.
'Database > Goldilocks' 카테고리의 다른 글
[GOLDILOCKS] 데이터베이스 관리 gmaster 프로세스 알아보기 (0) | 2018.05.24 |
---|---|
[GOLDILOCKS] SQL 쿼리 HINT 사용해보기 (0) | 2018.05.22 |
[GOLDILOCKS] 쿼리 옵티마이저, 쿼리 최적화, QUERY OPTIMIZER 알아보기 (0) | 2018.05.22 |
[GOLDILOCKS] SQL 함수 사용해보기 (0) | 2018.05.21 |
[GOLDILOCKS] 테이블 IDENTITY 컬럼 제약사항 및 사용해보기 (0) | 2018.05.18 |