
- 관계 해석과 관계 대수
- 관계 데이터 모델에서 지원되는 정형적인 언어
- 관계 해석(relational calculus)
- 원하는 데이터(what)만 명시하는 선언적인 언어 - 관계 대수(relational algebra)
- 원하는 데이터와 어떻게(how) 질의를 수행할 것인지 명시하는 절차적인 언어
- 관계 해석(relational calculus)
- 대수(algebra)란?
- 수와 수의 연산
- 연산자와 피연산자로 구성
- 관계 대수에서 피연산자는 relation
- relation을 input으로 relation을 output
- 2개 relation일수도, 1개 relation일수도 있음
- 관계 데이터 모델에서 지원되는 정형적인 언어


- 관계 연산자들
- 필수 연산자
- 바로 사용 가능한 연산자 (primitive) - 유도된(derived) 연산자
- 필수 연산자들로 만들 수 있는(유도된) 연산자 - 카티션 프로덕트 (데카르트 프로덕트)
- 두 relation의 모든 조합
- 3개 튜플과 5개 튜플 relation의 카티션 프로덕트는 15개 튜플 - 우리가 SQL로 작성한 내용을 DBMS에서 관계 대수 연산식으로 처리
- 필수 연산자

- selection
- 조건을 만족하는 tuple들의 집합


- projection
- 한 relation의 attribute들의 부분집합
- column의 중복을 제거해야함(집합)
- 그러나 중복 제거에 오버헤드가 크므로, 중복 제거 명령이 없으면 중복 튜플을 허용

- union (합집합)
- 두 relation의 합집합
- 아무 relation끼리 union할 수 없음
- 합집합 호환(union compatible)을 만족해야함
- 두 relation의 attribute 수가 같고, 같은 위치의 attribute의 도메인이 같아야 함
- difference (차집합)
- R - S -> relation R에만 속하고, relation S에는 속하지 않는 tuple들만 고르는 것


- 카티션 프로덕트
- 두 relation의 attribute 수의 합만큼인 새로운 스키마
- 카티션 프로덕트는 join을 위한 연산임
- 관계 대수의 완전성
- SQL 이전에 많은 데이터베이스 언어가 제안됨
- 기준 : 적어도 필수 관계 대수 연산자를 표현할 수 있으면, 관계적으로 완전(relationally complete)하다라고 함

- Join
- 두 relation을 합치는 연산
- 카티션 프로덕트에 조건을 추가 (selective join)
- 세타 join
- 조건을 추가한 join
- 세타는 {=, !=, <=, <, >=, >} 중 하나 - 동등 join
- 같은 값을 조건으로 하는 join
- 보통 공통의 attribute로 join - 자연 join
- 중복된 값을 제거한 join
- 가장 많이 사용


- 디비전
- RESULT1 : B#의 b1을 모두 가진 A#
- RESULT2 : B#에 b2, b4를 모두 가진 A#

- 관계 대수의 한계
- aggregate function : 평균 같은 내용