Relational Algebra
select: σproject: ∏Cartesian product: Xunion: ∪set difference: -rename: ρSelect -> σp(r)
Select는 r에서 주어진 조건을 만족하는 튜플들을 반환해줍니다.
instructor 테이블에서 소속 학과가 Physics인 튜플을 모두 선택해주세요
조건에는 비교 및 논리 연산을 섞어 사용할 수 있습니다.
instructor테이블에서 소속학과가 Physics이고 연봉이 90000이 넘는 튜플을 모두 선택해주세요조건에 각 attribute들끼리 비교할 수도 있습니다.
department 테이블에서 소속 학과 이름이 건물 이름과 동일한 튜플을 모두 선택해주세요Project -> ∏A1, A2, ..., Ak(r)
Project는 r에서 A1, A2, ..., Ak에 해당하는 attribute들을 반환해줍니다.
instructor 테이블에서 ID, name, salary들만 뽑아서 보여주세요
r에 테이블이 아닌 연산 결과를 넣을 수 있습니다.
instructor 테이블에서 소속 학과가 Physics인 튜플들의 name만 뽑아서 보여주세요Cartesian Product -> r1 X r2
Cartesian Product는 r1, r2에서 조합 가능한 모든 경우를 합쳐줍니다.
Attribute이름이 r1, r2에서 겹친다면, 구분하여 합쳐줍니다.
instructor의 ID, teaches의 ID가 겹칠 때instructor X teaches -> instructor.ID, teaches.ID로 합쳐줍니다.Cartesian Product는 필요한 정보를 가져올 때, 그 양에 비해 생성되는 테이블이 너무 크다는 단점이 있습니다.
이를 보완하기 위해, 기본 연산에는 포함되지 않지만 Join 연산이 등장하였습니다.
Join -> r ⋈θ s ( = σθ(r X s) )
Join은 r X s에서 원하는 정보만 조건으로 선별해 튜플들로 반환합니다.
instructor X teaches 에서 instructor.ID와 teaches.ID가 일치하는 튜플을 모두 선택해주세요 라는 의미입니다.Union -> r ∪ s
Union은 두 테이블을 합쳐줍니다.
Union이 가능하려면 다음 두 가지 조건을 갖추어야 합니다.
section 테이블에서 2017년 가을학기의 course_id와 2018년 봄학기의 course_id를 합쳐서 보여주세요
Set Difference -> r - s
Set diference는 r에 있는 값들 중 s에 있는 값들을 제거한 결과를 반환합니다.
Set difference는 Union과 연산 가능 조건이 일치합니다.
section 테이블에서 2017년 가을학기의 course_id중 2018년 봄학기에도 있는 course_id는 제외하여 보여주세요
Rename -> ρx(E)
Rename은 E의 값들의 이름을 x로 바꾸어줍니다. 이는 모든 Combining시에, 두 테이블의 attribute에서 이름이 같은 값들이 있다면
이름 충돌이 빈번히 일어나므로 Renaming을 사용하여 충돌을 막아줄 수 있기 때문에 사용합니다.
(instructor.ID, name, ..., teaches.ID, course_id, ..., year) <ID 이름 충돌>(ID, name, dept_name, ..., t_ID, course_id, ..., year) <이름 충돌 X>etc
위 두 연산의 결과는 같습니다.
절차는 다르지만 결과가 같을 때: equivalent, 절차와 결과가 같을 때: identical 이라 하고,
따라서 위의 수식은 equivalent하지만 identical하지 않습니다.