Join 이란?
● 둘 이상의 테이블에서 데이터가 필요한 경우 두 테이블을 연결하는 것
● Inner Join, Outer Join, Natural Join, Cross Join 등이 존재함
● 조인의 처리는 어느 테이블을 먼저 읽을지를 결정하는 것이 성능차이를 일으키기 때문에 중요함
● Inner Join은 어느 테이블을 먼저 읽어도 결과가 달라지지 않아 옵티마이저가 조인의 순서를 조절해 최적화를 진행
● Outer Join은 옵티마이저가 조인 순서 선택이 불가능함
* Inner Join
● 가장 일반적인 Join으로, 교집합을 의미함.
● 동등 조인 ( Equal Join )이라고도 하며 N개의 테이블을 조회하려면 N-1번의 Join이 필요함
● Join 후 Select를 할 때, 두 테이블에 공통된 이름으로 존재하는 컬럼에 Alias 설정을 안하면 에러 발생
--> A테이블에도 id, B테이블에도 id가 있을 때 a.id 혹은 b.id라고 명시해둬야함
--> 혹은 Using절을 사용하여 Using(공통 컬럼)의 형식으로 on절을 대신하여 사용도 가능함
--> Using을 사용하면 (공통컬럼) 의 컬럼 명에 Alias 사용 불가
● Natural Join은 두 테이블이 가지고 있는 공통 컬럼을 토대로 Join을 한다는 의미
--> 하지만 두 테이블의 공통 속성이 여러개라면 on 절의 조건을 and로 묶어 연산하는 것이기 때문에
사용시 더욱 주의해야함.
* Outer Join
● Left Outer Join, Right Outer Join, Full Outer Join이 존재함.
● 어느 한쪽 테이블에는 데이터가 존재하는데, 다른 쪽 테이블에 데이터가 존재하지 않을 경우를 해결하기 위한 방법
* Left Outer Join
● 왼쪽 테이블을 기준으로 Join 조건에 일치하지 않는 데이터까지 출력
Select COL1, COL2, ... ,COLN
From table1 Left Outer Join table2
on or Using
* Right Outer Join
● 오른쪽 테이블을 기준으로 Join 조건에 일치하지 않는 데이터까지 출력
Select COL1, COL2, ... , COLN
From Table1 RIGHT OUTER JOIN Table2
on or Using
* Full Outer Join
● 양쪽 테이블을 기준으로 Join 조건에 일치하지 않는 데이터까지 출력
● MySQL은 지원하지 않는 방식 --> Union 사용으로 해결 가능
Select *
from Table1 LEFT OUTER JOIN Table2
on or Using
UNION
Select *
from Table1 RIGHT OUTER JOIN Table2
on or Using
* Self Join (셀프 조인)
- 하나의 테이블에 존재하는 컬럼을 활용하여 Join하는 방법
Select a.col1, a.col2, b.col1, b.col2
from Table1 a join Table1 b
on a.col1 = b.col2
* None-Equal Join
- table의 PK, FK가 아닌 일반 Column을 Join으로 지정하는 방식
- None-Equal이기 때문에 표현식을 사용하여 값 비교 등을 진행
Select a.COL1, a.COL2, b.COL1, b.COL2
from Table1 a join Table1 b
on a.COL1 >= b.COL2
and b.COL1 >= a.COL2;
'DB' 카테고리의 다른 글
[MySQL] SubQuery (서브쿼리) (0) | 2024.04.15 |
---|---|
[MySQL] 집계함수 ( MAX, MIN, SUM, AVG, COUNT ) (0) | 2024.04.14 |
[MySQL] Index, View ( 인덱스, 뷰 ) (0) | 2024.04.13 |
[MySQL] DDL, 데이터 정의어(Data Definition Language) (0) | 2024.04.13 |
[MySQL] Data Type 데이터 타입 (0) | 2024.04.13 |