본문 바로가기

Computer Engineering/DB

관계대수(relational algebra)7 - 자연조인(natural join), 외부조인

1. 자연조인(natural join)

 

 

조인(join)연산은 두 개의 릴레이션으로부터 연관된 투플들을 결합하는 연산자로서, ‘관계’대수식의 연산자 중에서 가장 직무에 충실한 연산자라고 할 수도 있겠네요.

 

조인(join)은 종류도 여러 가지인데요.

세타조인(theta join), 동등조인(equi join), 자연조인(natural join), 세미조인(semi join), 외부조인(outer join) 등이 있습니다.

여기서는 조인연산 중 가장 중요하고 많이 다루어지는 자연조인(natural join)을 중심으로 공부를 하겠습니다.

 

먼저 예제부터 하나 보도록 하죠.

 

Query “Employee릴레이션과 Department릴레이션을 동등조인(equi join)하라”

 

 

 

세타조인(theta join), 동등조인(equi join), 자연조인(natural join)

 

조인(join)연산은 앞에서 공부한 <카티션 곱(cartesian product) + 선택연산(select)>의 형태입니다. 선택연산의 비교연산자가 { =, <>, ≤, <, ≥, > } 등이 사용되는 연산이 세타조인(theta join), 세타조인 중 특별히 비교연산자가 = 인 경우 동등조인(equi join), 동등조인에서 중복속성 중 하나가 제거된 것이 바로 자연조인(natrual join)입니다. 세미조인은 자연조인에서 한쪽 릴레이션의 속성은 제거되고 다른 한쪽의 속성만 나타나는 조인연산입니다. 위의 경우로 보면 자연조인한 결과테이블의  제일 마지막 컬럼인 <Department>릴레이션의 DeptName가 제거되고 오직 <Employee>릴레이션의 속성들만 나타나는 조인연산이죠.

 

자연조인(natural join)의 핵심은 두 릴레이션의 공통된 속성(common attribute)을 매개체로 하여 두 릴레이션의 정보를 '관계'로 묶어 내는 연산입니다. 일반 테이블에서는 보통 외래키(foreign key)가 이 매개체 역할을 담당하겠지요. 어쨌든 '공통'된 속성을 매개로 하는 연산인만큼 공통이 아닌 것은 당연히 연산의 결과에 나타나지 않습니다. 위의 경우를 보면 4번 부서인 총무부는 공통이 아니므로 결과에 나타나지 않고 있지요.

 

다른 예를 하나 더 볼까요.

 

Query “Employee릴레이션과 Department릴레이션을 동등조인(equi join), 자연조인

          (natural join), 세미조인(semi join)하라”




 

2. 외부조인(outer join)

 

외부조인(outer join)은 확장된 조인연산(extended join operation)입니다.

자연조인(natural join)으로는 뭔가 부족한 것이 있어서 확장(extension)을 했겠지요.

무엇이 부족했을까요.

 

릴레이션의 하나의 투플은 보존하고 관리할 가치가 있는 정보의 집합체입니다.

하나라도 그냥 버릴게 없는, 우리에게 꼭 필요한 정보들인 것입니다.

그러나 자연조인 등의 일반조인연산을 하면, 공통된 속성을 매개로 하지 않는 투플들은 모두 버려집니다. 경우에 따라서 공통된 속성은 아니더라도 이 정보를 남기고 싶을 경우 어떻게 해야 할까요.

 

바로 이 해결책을 외부조인(outer join)이 가져다 줍니다.

공통된 속성을 매개로 하는 정보는 아니더라도 버리지 않고 연산의 결과 릴레이션에 정보를 남겨 두는 것이지요.

 

외부조인에는 왼쪽 외부조인(left outer join), 오른쪽 외부조인(right outer join), 완전 외부조인(full outer join) 등이 있습니다. 각각 왼쪽의 정보를 남길 것인가, 오른쪽의 정보를 남길 것인가, 둘 다 남길 것인가에 대한 구분입니다. 해당 정보가 없는 컬럼은 null값으로 채우게 됩니다.

 

예를 한번 보도록 하지요.


 
<자연조인, 왼쪽 외부조인, 오른쪽 외부조인, 완전 외부조인>
 
 
 
 

연산자가 많아지면 많아질수록 데이터를 다루는 것이 훨씬 더 자유스럽고 섬세해지겠죠. 물론 공부해야 할 양은 그만큼 더 늘어나 머리는 아프겠지만요. 잽기술만 가지고 있는 복서보다 잽, 스트레이트, 어퍼컷, 훅 등을 모두 가진 복서의 공격기술이 훨씬 다양해지는 것과 마찬가지 이치입니다. 그러면 어디까지 확장시키는 것이 좋을까요. ^^...

 

☞ Inner Join vs Outer Join

     inner join : 두 릴레이션의 공통 속성을 가지는 투플만 가져 옴(natural join)

    outer join : 공통 속성을 가지는 투플 + 공통 속성이 없는 투플

 


3. 나누기(division) & 배정(assignment) 연산

 

나누기(division)연산은 다음과 같습니다.

 
 
 

배정(assignment)연산은 프로그래밍 언어에서의 배정과 비슷합니다. 관계대수의 능력을 확장시키는 새로운 연산이라기보다는 복잡한 질의를 단순하고 간편하게 표현하는 방법이죠.

배정연산은 로 나타냅니다. 배정연산을 이용하여 r ÷ s 는 다음과 같이 나타낼 수 있습니다.



계속해서 집계함수(aggregation function) 등 확장된 관계대수를 좀 더 공부해보도록 하죠.

 

2 b continued....