- 서로 관계 있는 데이터가 저장된 다중 테이블의 데이터를 효율적으로 검색하기 위해 서로 연관된 데이터를 비교하여 조회하는 기법
- 두 릴레이션으로 부터 관련된 튜플들을 결합하여 하나의 튜플로 만드는 대표적인 데이터 연결 방법
종류
- 내부조인
- Equi-Join : SELECT * FROM user a, group b WHERE a.group_id**=**b.group_id
- Semi-Join : SELECT b.* FROM group b WHERE b.group_id IN (SELECT a.group_id FROM user a WHERE a.salary>60,000)
- Anti-Join : SELECT a.* FROM user a WHERE NOT EXISTS ( SELECT 1 FROM group b WHERE a.group_id=b.group_id AND b.leader_id IS NULL)
- Self-Join : SELECT * FROM user a, user b WHERE a.user_id < b.user_id AND a.group_id=b.group_id AND group_id=’5032’
- 외부조인
- Left Outer Join : SELECT * FROM user a, group b WHERE a.group_id = b.group_id (+)
- Right Outer Join : SELECT * FROM user a, group b WHERE a.group_id (+) = b.group_id
- Full Outer Join (Cartesian Product) : SELECT * FROM user a, group b;
- ANSI조인
- Inner Join : SELECT * FROM user a INNER JOIN group b ON (a.group_id=b.group_id) WHERE a.salary>60000;
- Left Outer Join : SELECT * FROM user a LEFT OUTER JOIN group b ON (a.group_id=b.group_id) WHERE a.salary>60000;
- Right Outer Join : SELECT * FROM user a RIGHT OUTER JOIN group b ON (a.group_id=b.group_id) WHERE a.salary>60000;
- Cross Join : SELECT * FROM user a CROSS JOIN group b;
- user와 group 컬럼 하나씩 매핑해야함. 3:2 → 3*2
- 알고리즘 분류
- Nested Loop Join : 먼저 선행테이블의 처리범위를 하나씩 액세스하면서 그 추출된 값으로 연결할 테이블을 조인하는 방식
- Sort Merge Join : 양쪽 테이블의 처리범위를 각자 액세스하여 정렬한 결과를 차례로 scan하면서 연결고리의 조건으로 merge해 가는 방식
- Hash Join : 해시값을 이용하여 테이블을 조인하는 방식