1 minute read

조인

데이터베이스에서의 “조인 (Join)”은 둘 이상의 테이블에서 가져온 데이터를 결합하여 단일 결과 집합을 생성하는 작업을 말한다. 여러 개의 테이블에 분산된 데이터를 합쳐서 하나의 테이블 형태로 만들어주는 것인데 이를 통해 서로 관련된 데이터를 함께 조회하거나 분석할 수 있다.

조인 종류

cross join (카테지안 곱) 두 릴레이션의 모든 튜플의 조합을 만들어 반환한다. 유용하게 사용될수 있지만 시간복잡도가 높아 다른 조인 전략에 비해 잘 사용되지 않는다.

inner join (내부조인) 두 릴레이션의 속성을 하나씩 골라서 조건에 맞는 조합만 만들어 반환한다. cross join과 다르게 검사시 인덱스를 활용할수 있으므로 시간복잡도를 줄일수 있고, 조건에 맞는 쌍이 적다면 공간복잡도 역시 줄어든다.

조건이 equals 인경우를 특별히 자연조인이라고 한다.

Outer Join (외부조인) 두 릴레이션의 속성을 하나씩 골라서 조건에 맞는 조합을 만들어 반환한다. 이때 조건이 맞지 않는다면 해당 속성을 null로 표시하여 반환한다. 어떤 릴레이션의 null 표시를 허용하느냐에 따라 left, right, full 전략으로 나눌수 있다.

조인 전략

중첩 루프(nested loop) 조인 방법

  • 모든 join 연산에 적용 가능하다
  • 일일히 비교하기 때문에 성능이 떨어진다.

색인된 중첩 루프(indexed nested loop) 조인 방법

  • (동등 join) or (자연 join) or (내부 태이블의 조인 속성에 대해 인덱스가 있는 경우) 사용 가능하다.
  • 조인 연산을 위해 인덱스를 임시로 생성해서 사용할 수 있다.
  • 내부, 외부 테이블 모두 인덱스가 있으면 튜플 수가 적은 것을 외부 테이블로 한다.

정렬 합병(sort-merge) 조인 방법

  • 동등 join, 자연 join에서만 사용 가능하다.
  • 각자 정렬한 후 차례로 스캔하며 병합한다.

해시(Hash) 조인 방법

  • 동등 join, 자연join에서만 사용 가능하다.
  • 비용이 많이 발생하지만 대량의 데이터를 조인 시 sort-merge나 nested-loop보다 성능이 좋다.

외부, 내부 테이블

외부 테이블(driving table)은 LEFT JOIN, RIGHT JOIN 또는 FULL JOIN과 같은 외부 조인을 수행할 때 기준이 되는 테이블을 말한다. 외부 테이블의 모든 행은 결과에 포함되며, 조인 기준에 맞지 않는 경우에는 NULL 값으로 채워질 수 있다. 외부 테이블은 조인의 왼쪽 테이블 (LEFT JOIN) 또는 오른쪽 테이블 (RIGHT JOIN)이 될 수 있다. FULL JOIN의 경우 양쪽 모두를 의미한다.

내부 테이블(driven table)은 INNER JOIN을 수행하는 데 참여하는 테이블을 말한다. INNER JOIN은 두 테이블 간의 공통된 값을 가진 행만 결과에 포함시킨다. 따라서 INNER JOIN을 사용하는 경우, 내부 테이블에는 조인 기준을 만족하는 행만 결과에 포함한다.

Leave a comment