티스토리 뷰

1. 조인

조인 (JOIN)은 2개 이상의 테이블을 묶어서 하나의 결과물을 만들 때 사용하는 것이다.  

조회를 할 때 각각의 테이블은 공유하고 있는 동일한 컬럼이 있어야 하며, 그 컬럼을 사용해 JOIN된 테이블의 데이터를 검색할 수 있다. 이때 사용된 컬럼은 PK키나 FK키로 사용된다. 

 

 2. 조인의 종류 

 

 

1) Inner Join , 내부조인

  • 내부 조인은 두 테이블 간에 교집합을 나타낸다 
  • 가장 흔하게 쓰이는 조인 방식이다.
  • 조인을 사용하는 방식에는 명시적 조인 표현과 암시적 조인 표현이 있다.

-- 1.명시적 조인 표현  --
select * from table a
inner join table b 
on a.key = b.key

-- 2. 암시적 조인 표현 --
select * 
from table a, table b
where a.key = b.key

 

2) Left Outer Join , 왼쪽 조인

  • 조인 기준 왼쪽에 있는 데이터 전체 조회한다.
  • 외부조인중 하나로 오른쪽 테이블에 조인할 데이터가 없는경우 사용한다.
  • 왼쪽에 있는 모든 데이터를 조회하는데 왼쪽 테이블에 데이터가 없다면 NULL 값이 넣어진다.

 

-- 1.명시적 조인 표현  --
select * from table a
left outer join table b 
on a.key = b.key

-- 2. 암시적 조인 표현 --
select * 
from table a, table b
where a.key = b.key(+)

3) Right Outer Join, 오른쪽 조인

  • 조인 기준 오른쪽에 있는 데이터 전체 조회한다.

 

-- 1. 명시적 조인 표현 --
select * from table a
right outer join table b 
on a.key = b.key

-- 2. 암시적 조인 표현 --
select * 
from table a, table b
where a.key(+) = b.key

4) Full Outer Join, 합집합 조인 

  • 오른쪽, 왼쪽에 있는 데이터 전체 조회
  • 두 테이블에 있는 모든 데어터가 필요할 때 사용한다.
  • 오라클에는 OUTER JOIN 연산이 있지만 MySQL은 없기 때문에 LEFT/RIGHT OUTER JOIN을 함께 사용해 FULL OUTER JOIN 을 사용한다.

select * from table a
full outer join table b 
on a.key = b.key

 

3. 조인의 원리 

1) 중첩 루프 조인 (NESTED LOOP JOIN)

  • NL조인
  • 2개 이상의 테이블에서 하나의 집합을 기준으로 순차적으로 상대방 행을 결합하여 원하는 결과를 조합하는 조인 방식
  • 인덱스에 의한 랜덤 엑세스에 기반하기 때문에 비용이 많이 증가한다 -> 대용량 테이블에 부적절하다.
  • driving 테이블로는 데이터가 적거나 where절 조건으로 row의 숫자를 줄일 수 있는 테이블이어야함.
  • driven테이블에는 조인을 위한 적절한 인덱스가 있어야 함
  • 선행 테이블 결과를 통해 후행 테이블을 엑세스 할때 랜덤 I/O가 발생함
NL조인 동작 방식
테이블 A를 driving 테이블로 선정하고 이 테이블로부터 where절에 정의된 검색 조건을 만족하는 데이터를 걸러낸다. 이 값을 가지고 조인 대상 테이블을 반복적으로 검색하면서 조인 조건을 만족하는 최종 결과 값을 얻어낸다.


for(i=0; i<dept.length; i++){ // driving table : 조인을 할때 먼저 액세스 되는 테이블
	for(j=0; j<emp.length; j++){ // driven table : 나중에 액세스 되는 테이블
    } 
}

 

중첩 for문과 같은 원리로 조건에 맞는 조인을 하는 방식이다. 위의 사진을 예로 들면 먼저 dept_loc인덱스를 사용해 dept테이블에 있는 데이터 gb=2를 추출한다. 추출된 값을 사용해서 emp_deptno 인덱스에서 같은 deptno를 가지는 사원들의 정보를 sal>=1500 이라는 조건을 통해 emp테이블을 조회한다.

2) 정렬 병합 조인 (SORT MERGE JOIN)

  • 조회의 범위가 넓을 때 주로 사용하는 조인 방식
  • 각각의 테이블을 조인할 필드 기준으로 정렬하고 정렬이 끝난 후 조인작업을 수행하는 조인
  • 조인할 때 적절한 인덱스가 없는 경우
  • 대용량의 테이블을 조인하는 것이 유리한 경우
  • 조인 조건으로 부등호와 같이 범위 비교 연산자가 사용된 경우
  • 인덱스 사용에 랜덤 엑세스의 오버헤드가 많은 경우
정렬 병합 조인 동작 방식

각 테이블에 대해 동시에 독립적으로 데이터 먼저 읽고 읽혀진 각 테이블의 데이터를 조인을 위한 연결고리에 대해 정렬을 수행한다.  정렬이 끝난 후 조인을 수행한다. 
즉 A테이블의 데이터를 중 조건을 만족하는 행을 찾고 정렬하는 과정을 반복한다. B 테이블도 A테이블과 동일한 과정이 반복된다. 두 테이블 사이 연결된 컬럼을 기준으로 정렬을 수행하고 조인을 하는 방식으로 동작한다.

3) 해시 조인

  •  해시 테이블을 기반으로 하는 조인방법
  • 조인될 두 테이블중 하나를 해시 테이블로 선정해 조인될 테이블의 조인 키 값을 해시 알고리즘으로 비교해 매치되는 결과값을 얻는 방식
  • 비용기반 옵티마이저를 사용할 때만 사용가능하다
  • 동등 비교를 통한 조인에서만 사용된다
  • 많은 양의 데이터를 조인해야할 때 사용된다.
해시 조인 동작 방식

1. 빌드단계
입력 테이블 중 하나 중에서 작은 집합을 읽어 Hash area에 해시 테이블을 생성한다.
*바이트가 더 작은 테이블 기반
-> 해시 함수에서 리턴 받은 버킷 주소로 찾아가 해시 체인에 앤트리를 연결한다,

2. 프로브 단계
반대쪽 큰 집합을 읽어 해시테이블을 탐색하면서 조인한다.
해시 함수에서 리턴받은 버킷 주소로 찾아가 해시 체인을 스캔하면서 데이터를 찾는다.
-> 각 테이블은 한번씩만 읽게 되기 때문에 NL조인보다 성능이 좋다.

 

 

 

참고 자료

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함