relational data model을 지원하는 두 가지 formal language가 있다.
Relational calculus
Relational algebra
기존 관계에서 새 관계를 생성한다. operator를 적용해 점진적으로 복잡한 상대적 대수 표현식을 만들 수 있다. Fundamental operator들의 그룹이다. 하나 혹은 두 개의 table을 인풋으로 해서 result table을 만든다.
Selection
: 튜플을 추출. 테이블에 연산을 했을 때, 기존 테이블의 Cardinality가 줄어드는 연산.
Projection
: 애트리뷰트를 추출. 테이블에 연산을 했을 때, 기존 테이블의 Degree가 줄어드는 연산.
Join
: 두 테이블을 합치는 연산. Cartesian product의 경우 각 테이블의 튜플이 20, 30개라 가정했을 때, 결과 테이블의 튜플이 600개로 매우 복잡해지기 때문에 보통 Join을 더 좋은 방법이라고 말한다.
Q. EMPLOYEE table에서 3번 부서 일하는 직원들을 찾아라.
Q. 모든 직원의 title을 찾아라.(애트리뷰트를 추려서 result로)
중복 제거 후 result table을 만듦.
union, intersection, difference operators들이 여기에 해당한다.
집합 연산을 하기 위해서는 Union compatible 조건
을 만족해야 한다.
직원 테이블과 부서 테이블은 애트리뷰트 개수가 다르다. 그래서 합병가능이 아니다
. 그런데 프로젝션 연산을 한 경우, DNO와 DEPTNO의 애트리뷰트 수와 또 그 애트리뷰트의 도메인이 동일하기 때문에 그 경우는 합병가능을 만족한다
.
합집합 연산
Q1. 김씨 부서의 번호를 찾아라.
1
. Selection: "직원 테이블에서" 직원 번호가 C.KIM인 튜플을 추린다.
2
. Projection: Selected table에서 DNO 애트리뷰트를 추출한다.
Q2. 개발 부서의 번호를 찾아라.
1
: Selection: "부서 테이블에서" 부서 이름이 개발인 튜플을 추린다.
2
: Projection: 그 튜플에서 부서 번호 애트리뷰트를 추출한다.
교집합 연산
Q. 김씨와 최씨의 부서 번호를 찾아라. 또한, 부서는 계획 부서여야 한다.
차집합 연산
Q. 부서 번호를 찾는데, 해당 부서에 직원이 없는 부서의 번호를 찾아라.
RESULT1 - RESULT2
를 최종 테이블로 추출한다.직원 테이블(Cardinality: 3 / Degree: 1)
부서 테이블(Cardinality: 2 / Degree: 1) 를 카테이션 프로덕트 하려고 한다.
-> RESULT table의 Cardinality는 6(3 * 2), Degree는 2(1 + 1)이 된다.
각 테이블이 조금만 커져도 복잡해지기 때문에 주로 조인
을 사용한다.~
관계 대수의 완전성
: Selection / Projection / Union / Difference / Cartesian product. 5가지 연산을 조합하면 모든 relation algebra를 표현할 수 있다.(Intersection은 빠져 있음!!)
동등비교만을 사용하는 조인이다.
Q. 직원 테이블과 부서 테이블을 equijoin을 사용해 join해라.
중복
되는 것이 아닌가? 맞긴 하지만!
equijoin이 아니라 다른 조인을 사용한다면(같지 않은 것, 크거나 같은 것) RESULT TABLE은 달라진다. equijoin이기 때문에 중복되는 것처럼 보인다.동등 조인에 대한 하나의 유형.
연산은 equijoin이고, 중복된 attribute를 지운 join.
원래 관계 대수에 수학적 연산이나 정렬같은 건 없는데 추가된 연산이다.