관계대수는 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을 이용한 작업을 할 것이니 여태까지 배운 이론들이 무의미한 것이 아니라는 걸 느낄 수 있을 것이다.
(이 글이 도움이 됐다면 광고 한번씩만 클릭 해주시면 감사드립니다, 더 좋은 정보글 작성하도록 노력하겠습니다 :) )
'간단 지식 > Database' 카테고리의 다른 글
08. SQL을 이용한 데이터 조작 - insert, delete, update, search (0) | 2020.01.23 |
---|---|
07. SQL과 MySQL (0) | 2020.01.22 |
05. 관계대수 - select, project, join (0) | 2020.01.19 |
04. DB의 기본키와 왜래키 (0) | 2020.01.17 |
03. 관계형 데이터베이스 (Relational Database) (0) | 2020.01.15 |