관계대수
이번엔 관계대수에 대해 알아보겠다!
관계대수(Relational Algebra)
릴레이션 단위로 데이터를 처리, 조작하는 연산의 집합을 관계대수라고 한다.
릴레이션은 테이블이면서, 투플들의 집합을 말한다.
관계대수에는 집합 연산자, 순수 관계 연산자 등을 사용하는데,
집합연산자에는 합집한, 교집합, 차집합, 카티션 프로덕트가 있다.
집합 연산자
- 합집합(U)

- 교집합(∩)

- 차집합(-)

- 카티션 프로덕트(x)

합병가능한 릴레이션에는 합집합, 교집합, 차집합이 있고
합병 가능하려면
1. 차수가 같아야하고
2. 대응 애트리뷰트 쌍 별로 도메인이 같아야 한다!
합집합, 교집합, 카티션 프로덕트는 결합법칙, 교환법칙이 성립하지만,
차집합은 결합법칙, 교환법칙이 성립하지 않는다!


순수 관계 연산자에는 실렉트, 프로젝트, 조인, 디비전이 있다.
순수 관계 연산자
- 실렉트(SELECT: σ)
select 연산은 단항 연산자이다.
연산 결과는 릴레이션의 수평적 부분집합이고 즉, 조건에 맞는 행들이 뽑혀나온다는 말이다. 가로로 뽑혀진다는 말! 그 말을 조금 어렵게 하면 ‘조건을 만족하는 투플들만으로 구성된 릴레이션’ 이라고 할 수 있겠다.

선택도(selectivity)는 실렉트 연산의 선택 조건에 의해 검색되는 투플의 비율을 말한다. 즉, 전체 투플이 30개 인데, 실렉트 연산을 통해 10개의 투플들이 검색된다면 그때의 선택도는 10/30 = 1/3 이 된다.

- 프로젝트(PROJECT: π)
릴레이션의 수직적 부분집합이다. 즉, 검색 결과가 가로행이 아니라 세로 열로 뽑혀져 나온다는 말이다.
결과에 투플이 중복되는 경우에는 제거한다.
결과도 투플의 집합이 된다(릴레이션) → 이는 폐쇄 성질을 만족시킨다.
여기서 폐쇄 성질이란?? 피연산자와 연산 결과가 모두 릴레이션이라는 것.
릴레이션끼리 연산이 가능하다는 말이다. 그리고 중첩된 수식의 표현이 가능하다.

- 세타 조인(JOIN: ⋈)
학생, 과목, 등록 테이블이 있을 때 ‘과목번호를 가지고 해당 과목을 듣는 학생들의 학번을 출력하라’ 는 결과물을 내려고 할 때 하나의 테이블만을 가지고는 결과값을 도출해낼 수 없다. 왜냐면 과목 테이블에만 과목 번호가 있고, 학생 테이블에만 학번이 있기 때문이다! 그래서 테이블 두개를 세타 조건에 맞춰서 합치는 연산자가 바로 세타 조인이다.
세타조인의 의미적 해석은 두 릴레이션 R 과 S 의 곱집합에서 세타 조건을 만족하는 투플만 모은 수평적 부분집합이라고 할 수 있다.
결과 차수 = R 의 차수 + S 의 차수

- 동일조인
세타조인에서 세타가 "=" 인 경우를 말한다.
릴레이션 학생과 등록의 동일 조인 예시는 다음과 같다.

- 자연 조인(natural join : ⋈_N)
R과 S를 자연조인하려면, R 과 S 에 동일한 애트리뷰트가 존재해야만하고, 그 애트리뷰트가 동일한 투플들을 중심으로 조인하는 것을 자연조인이라고 한다.
즉, 동일 조인의 결과에서 중복되는 애트리뷰트를 제거한 것이 자연조인!
연결된 데이터를 두 테이블로 분리하여 데이터의 중복성을 피하고, 필요할 때에만 연결하는 원리이다.

- 디비전(DIVISION, ÷)
디비전을 할 때에는 한 릴레이션이 다른 릴레이션의 부분집합이어야지만 가능하고
그렇지 않다면 프로젝션으로 그렇게 만든 후에 연산을 해야한다!
디비전은 S 에 있는 모든 투플과 쌍을 이루는 R 의 투플을 구하라는 의미이다.

기본 연산과 복합 연산이 있는데
기본 연산은 다른 연산으로 대체할 수 없는 하나의 논리적 기능을 수행하는 연산을 말한다.
예를 들면, 합집합, 차집합, 곱집합, 프로젝트, 실렉트 를 말할 수 있다.
복합 연산은 기본 연산의 조합으로 대체할 수 있는 연산을 말한다.
예를 들면, 교집합, 조인, 디비전이 있다.
위에서 언급한 복합연산 3가지는 다음과 같이 기본연산으로 표현할 수 있다.




- 세미조인(⋉)
R 과 S 의 조인 애트리뷰트를 Z 라고 하면 R 과 S 의 세미조인은 S 와 자연 조인이 가능한 R 의 투플의 집합이라고 할 수 있다.
조금 쉽게 설명하면 R 과 S를 자연 조인할 때, R 에서 사용하는 투플들만이 뽑힌다는 의미이다.
다시 말하면, R 의 투플들 중에서 S 와 자연 조인할 수 있는 투플들을 말한다.
세미조인의 특징은 교환법칙, 결합법칙이 성립하지 않는다.

- 외부조인(⋈+)
한 릴레이션에 있는 투플이 조인할 상대 릴레이션에 대응되는 투플이 없을 경우, 상대를 널(null) 투플로 만들어 결과 릴레이션에 포함한다.
누락정보를 처리하기 위한 조인의 확장이다. 그래서 두 조인 릴레이션의 투플들이 전부 결과 릴레이션에 포함된다!
- 왼쪽 외부조인 (left outer join) : 왼쪽의 릴레이션의 투플들만 추가
- 오른쪽 외부조인 (right outer join) : 오른쪽의 릴레이션의 투플들만 추가집계연산

- 외부 합집합(∪+)
합병 가능하지 않은 릴레이션 간의 합집합을 하고 싶을 때 외부 합집합을 한다.
애트리뷰트 수가 다르거나 대응하는 애트리뷰트의 도메인이 다른 두 릴레이션 간의 합집합을 말한다.
두 릴레이션의 모든 애트리뷰트를 포함하는 확장된 릴레이션으로 만든다.
확장된 릴레이션에 해당하는 애트리뷰트 값이 없을 때는 null 값으로 채운다.
외부 조인과 외부 합집합의 차이점은 외부 조인은 조인이 가능한 것들 중에서 값이 없는 걸 null 로 채운다는 것인데,
외부 합집합은 그냥 두 릴레이션을 합쳐서 전부 다 쓴다는 차이점을 가진다.

집계연산
릴레이션의 특정 애트리뷰트의 집계 값을 계산하는 것을 집계연산이라고 하고,
릴레이션의 특정 애트리뷰트로 투플들을 그룹화하는 것을 그룹연산이라고 한다.
집계 연산만 적용할 수도 있고, 그룹 연산 이후 집계연산을 동시에 적용할 수도 있다.

끝!