간단 지식/Database

06. 관계대수의 확장(세미 join, 외부 join, 외부합집합)과 집계연산

납작한돌맹이 2020. 1. 21. 18:15
반응형

관계대수는 join과 합집합에 대해 확장이 가능한데 tistory에서는 관련 기호를 제공하지 않아 이미지로 대체하겠다.


역시 이론보단 실전이니 각 연산에 대한 예시를 하나씩 들어보겠다.

 

세미 join에 대한 예제다.

relation R                                                                               relation S

A B C 구분칸 B C D
a1 b1 c1 b1 c1 d1
a2 b1 c1 b1 c1 d2
a3 b1 c2 b2 c3 d3
a4 b2 c3  

relation R과 S를 세미 join 하기 위해 먼저 relation S에 대해서 R과 S에 모두 속한 부분만 뽑아 새로운 relation을 만든다.

두 relation에 모두 속할 수 있는 값들은 무조건 attribute B,C에 해당하니까 열을 2개로 추리고 시작하면 된다.

B C
b1 c1
b2 c3

새롭게 만들어진 위 relation과 R을 자연 join하면 된다.

결과는 다음과 같다.(세미 조인은 교환법칙이 불가능하다! 이 예시는 위 이미지에 있는 대로 푸는 것이다)

A B C
a1 b1 c1
a2 b1 c1
a4 b2 c3

추가적으로 위에서 세미 조인 결과에 두 번째 join relation을 자연 join 시키면 R과 S를 자연 join한 결과가 나온다 했다.

맞는지 확인해보기 위해 계산해보면

A B C D
a1 b1 c1 d1
a1 b1 c1 d2
a2 b1 c1 d1
a2 b1 c1 d2
a4 b2 c3 d3

알맞게 relation이 생겨났다!


똑같이 외부 join에 대한 예제도 풀어보도록 하겠다.

relation R                                                                                 relation S

A B C 구분칸 B C D
a1 b1 c1 b1 c1 d1
a2 b1 c1 b1 c1 d2
a3 b1 c2 b2 c3 d3
a4 b2 c3 b3 c3 d3

외부 join은 대응되는 값이 없어도 null로 채우면 되기 때문에 다음과 같은 모양새의 relation이 탄생한다.

A B C D
a1 b1 c1 d1
a1 b1 c1 d2
a2 b1 c1 d1
a2 b1 c1 d2
a3 b1 c2  
a4 b2 c3 d3
  b3 c3 d3

빨간색으로 적힌 행을 보면 한군데씩 비어있는 게 보일 것이다. join을 했을 때, relation R 쪽에서는 <a3, b1, c3>와 attribute D에 대응되는 값이 없었고, relation S에서는 <b3, c3, d3>와 attribute S에 대해 대응되는 값이 없는 투플이 없었기 때문이다.


마지막으로 외부합집합은 매우 쉽다.

relation R                                                                                 relation S

A B C 구분칸 B C D
a1 b1 c1 b1 c1 d1
a2 b1 c1 b1 c1 d2
a3 b1 c2 b2 c3 d3
a4 b2 c3  

그냥 더하면 된다!

A B C D
a1 b1 c1  
a2 b1 c1  
a3 b1 c2  
a4 b2 c3  
  b1 c1 d1
  b1 c1 d2
  b2 c3 d3

마지막으로 집계연산에 대해 정리하면 이번 글도 마무리가 된다.

데이터를 막 갖다쓰는 것도 물론 좋지만, 이왕 쓰는 김에 평균도 내주고, 최댓값도 구해주면 얼마나 좋을까란 생각에 등장하지 않았나 싶다.

GROUP

SUM

AVG

MAX

MIN

COUNT

이렇게 총 6개의 집계함수가 있다. 사용 방법은 간단하다. (첨자 때문에 또 이미지로 대체하겠다)

GROUP과 AVG에 대한 예시만 보여줬지만 나머지는 굳이 안 적어줘도 알 거라고 생각한다.

참고로 3번째 예시처럼 GROUP은 항상 나머지 집계함수보다 먼저 와야 한다.


아직까지는 데이터를 다룬다는 느낌이 딱히 들지 않았을 것이다. 다음 글부터는 본격적으로 sql을 이용한 작업을 할 것이니 여태까지 배운 이론들이 무의미한 것이 아니라는 걸 느낄 수 있을 것이다.

 

(이 글이 도움이 됐다면 광고 한번씩만 클릭 해주시면 감사드립니다, 더 좋은 정보글 작성하도록 노력하겠습니다 :) )

반응형