HwangHub

[토막 지식] 관계대수의 theta join, natural join, semi join, outer join 본문

CS-STUDY/데이터베이스

[토막 지식] 관계대수의 theta join, natural join, semi join, outer join

HwangJerry 2023. 10. 15. 16:55

관계 대수를 학습하던 중, semi join이 궁금해서 찾아본 후, 간단하게 정리해둔다.

관계 대수( Relational Algebra )란?

DB의 쿼리는 데이터를 처리 요구를 표현하는 질의문이다. 이러한 쿼리 연산을 이해하는 방식 중에서, 데이터 처리 과정을 순서대로 기술하는 절차적 언어(procedural language)를 관계 대수라 한다.

관계 대수 (Relational Algebra) 와 관계 해석(relational calculus)은 SQL과 같은 데이터 처리 언어가 유용한지를 검증하는 기준으로 사용된다.  오늘날 일반적으로 우리는 대부분의 데이터베이스 쿼리를 SQL로 수행하기 때문에, 관계 대수와 관계 해석에 대해서 이론적으로만 학습할 뿐, 실제 업무에서 사용할 일은 극히 드물다. 그냥... 나중엔 자연스럽게 잊어버리더라도 데이터베이스를 처음 배울때 기본적으로 이해하는 목적으로 알아두자.
출처: https://archive-me-0329.tistory.com/13

 

관계 대수의 join

theta join (⨝)

기본적으로 >, >=, <, <=, =와 같은 조인 애트리뷰트 간의 연산을 통해 join하는 것을 기술하는 방식이다. 사용 기호로는 옆으로 누운 모래시계와 닮은 R⨝[조건식]S를 사용한다.

출처 : 위키피디아

 

표현 예시를 확인해보자.

Car ⨝[CarPrice>=BoatPrice] Boat

위와 같이 표현하는 join을 theta join이라고 한다. 여기서 join 조건식을 '>='로 사용했는데, 세타 조인 중에서 '='를 사용하여 join하는 것을 equi-join이라고 별도로 칭하기도 한다. 실제 SQL에서는 이처럼 등호 연산을 통해 조인하는 것이 일반적이기 때문에 이러한 별칭이 붙은 것으로 보인다.

 

 

natural join ( * or ⨝[N])

dno=dnumber를 조건식으로 하는 theta join을 마친 결과 테이블에는 dno와 dnumber가 둘다 애트리뷰트로 존재한다. 즉, 중복되는 값이 존재하는 것이다. 따라서 이러한 중복된 결과를 제거한, 즉 조인 애트리뷰트의 중복을 제거한 결과 테이블을 얻는 조인 방식을 natural join이라고 하며 R*S 또는 R⨝[N]S로 표현한다.

출처 : 위키피디아

이를 활용하여 자연 조인을 다시 직관적으로 설명하자면, Q <- R(A,B,C,D) * S(C,D,E) 를 수행하면 Q(A,B,C,D,E)가 되는 것이다.

(Employee * Dept)

 

semi join (⋉ and ⋊)

일반적으로 두 개의 기본 테이블을 조인한 경우에는 두 테이블의 모든 애트리뷰트가 하나의 조인 테이블로 합쳐진 결과를 얻게 된다. 세미 조인은 조인은 하되, 그 결과는 한 쪽 테이블의 애트리뷰트로만 구성하는 방식의 조인이다.

출처 : 위키피디아

 

만약에 "Jason이 매니저인 부서에서 근무하는 employee의 이름들을 출력하라"는 작업을 수행하려면 employee 테이블과 department 테이블을 조인해야 하는 것은 맞지만, 결과 데이터를 출력할 때 department의 애트리뷰트들까지 필요한 것은 아니다. 이처럼, 두 테이블 간의 관계성을 이용하여 조회해야 하지만 결과 테이블은 한 쪽의 테이블 데이터만 필요할 때에는 세미 조인을 이용하면 된다.

π(ename)(Employee ⋉[dno=dnumber] (σ[mgr_name='jason']Department)

 

anti join (▷)

세미 조인은 두 테이블을 조인한 이후의 결과를 한쪽 테이블의 애트리뷰트들로만 채우는 것이었다면, anti join은 한쪽 테이블의 애트리뷰트로만 채우는 것은 동일하나, 조인되지 않는 튜플들만 결과로 남기는 것을 의미한다.

출처 : 위키피디아

안티 조인의 경우는 아래 식을 참고하면 그 관계가 더 명확히 다가올 것이다.

R ▷ S = R − R ⋉ S

 

outer join ( ⟕, ⟖, ⟗)

outer join은 우리가 SQL을 하면서 익히 알고 있는 left outer join, right outer join, full outer join과 같다. 두 테이블을 조인한 결과는 물론, 조인되는 테이블에 관련 데이터가 없어 null값이 발생하더라도 기준이 되는 테이블의 모든 데이터를 결과 데이터로 구성하는 것을 허용하는 방식이다. 이를 더 직관적으로 이해하기 위해서는 밴 다이어그램으로 표현한 join시의 데이터 포함 관계 그림을 확인해보는 것을 권장한다. ⟕ 는 left outer join, ⟖ 는 right outer join, ⟗ 는 full outer join을 의미한다.

출처 : 위키피디아

Employee ⟕ Dept
Comments