数据库系统笔记3-Relational Algebra 关系代数

基本关系代数运算

关系代数是过程化语言,有以下六个基本操作

  1. Select 选择:σ
  2. Project 投影:Π
  3. Union 并:∪
  4. Set Difference 差:-
  5. Cartesian Product 笛卡儿积:×
  6. Rename 重命名:ρ

选择运算

$\sigma_{p}(r)$
其中p为选择断言 Selection Predicate

意义为:
$\sigma_{p}={t \mid t\in r\ and\ p(t)}$
其中p是一个由$\wedge$、$\vee$、$\neg$连接而成的命题逻辑公式

例:
$\sigma_{branch_name=”Perryridge”}(Account)$
在关系Account中选择branch_name为Perrtridge的元组

投影运算

$\Pi_{A1,A2,A3…Ak}(r)$
其中A1A2…Ak为属性名,r为关系名

返回的数据将未指定的属性排除在外,且所有重复的行都被去除

并集运算

$r \cup s$

意义为:
$r \cup s={t \mid t \in r\ or\ t \in s}$
其中r和s必须有相同的属性数,所有属性都必须兼容

例:
$\Pi{customerName}(Depositor)\cup\Pi{customerName}(Borrower)$
选择出存款和贷款的所有账户

集合差运算

$r-s$

意义为:
$r-s={t \mid t \in r\ and\ t \notin s}$

r和s必须有相同的属性数且属性兼容

笛卡儿积运算

将两个任意关系的信息组合在一起
$r \times s$

意义为:
$r \times s={tq \mid t \in r\ and\ q \in s}$

必须满足$R \cap S = \emptyset$,否则必须使用重命名操作

重命名运算

允许我们重新命名关系代数运算的结果因此可以去应用它们

$\rho_{x(a1,a2…an)}(E)$
关系代数表达式E的运算结果有n个属性,那么在进行重命名运算x的结果中n个属性都被命名为a1,a2…an

关系代数表达式

在关系代数中一个基本的表达式必由下面二者之一

  • 数据库中的一个关系 A relation in the database
  • 一个常数关系 A constant relation

若E1,E2为关系代数表达式,则以下都是关系代数表达式

  • $E_1 \cup E_2$
  • $E_1 - E_2$
  • $E_1 \times E_2$
  • $\sigma_p(E_1)$ p为E1属性上的谓词
  • $\Pi_s(E_1)$ S是E1中某些属性列表
  • $\rho_x(E_1)$ x是E1结果的新名字

附加关系代数运算

集合交集运算 Set Intersection

$r \cap s$
即关系r与s的交集,r与s有相同的属性个数且属性兼容
有$r \cap s=r-(r-s)$

交集运算不是基本运算

自然连接运算 Natrual Join

$r \bowtie s$
相当于在笛卡儿积运算之后去除了重复的属性值

除法运算 Division

$r \div s$

赋值运算 Assignment

赋值运算符$\leftarrow$提供了一个用来表达复杂查询的简单方法,使用了一个临时的变量来表达

例如:
$r \div s$可以写作

$temp1 \leftarrow \Pi_{R-S}(r)$

$temp2 \leftarrow \Pi_{R-S}((temp1 \times s)-r)$

$result=temp1-temp2$

扩展关系代数操作

广义投影 Generalized Projection

$\Pi_{F1,F2…Fn}(E)$

E是任意的关系代数表达式,其中F1,F2…Fn每一个都是涉及常量以及E中属性计算的算术表达式,例如:
$\Pi_{ID,name,dept_name,salary/12}(Instructor)$
则得到的是每个教师的ID姓名部门以及月工资

聚集 Aggregate Function

聚集运算$\mathcal{G}$可以对值的集合使用聚集函数聚集函数输入值的一个汇聚,将单一的值最为返回,例如使用sum,max,min,count,avg来计算数值集合的和,最大值,最小值,数量,平均值

在操作中,汇集里一个值可以出现多次,顺序也无关紧要,这样的汇集称为多重集multiset集合set是多重集的特例,其中每个值只出现一次。

$\mathcal{G}_{\textbf{sum}(salary)}(instructor)$
得到的是所有教师的工资总和

此外,还可以在聚集操作的前面限制一个属性,用于对一组元素集合而不是单个元组集合执行聚集函数,例如需要求出每个系的平均工资

$_{deptname} \mathcal{G} {average(salary)}(instructor)$

这个查询将对每个组进行指定的聚集并分别执行聚集函数,得到结果

外连接 Outer Join

外连接为自然连接的扩展,为了避免信息的丢失avoids loss of information,会在结果中创建带空值null的元组

右外连接 Right outer join (⟖)

$R⟖S$
右外连接结果中包含S中的所有元素,对每个元组,若R在公共属性名字上相等的元组,则正常连接,若R没有在功能属性名字上相等的元组,则保留此组,并将其他列设置为NULL

左外连接 Left outer join (⟕)

$R⟕S$
同右外连接,结果包含R中的所有元组

全外连接 Full outer join (⟗)

$R⟗S$
同右外连接,结果包含R和S中所有的元组

空值 Null Value

  • null表示未知unknown的值或不存在does not exist的值
  • 代数表达式arithmetic expression结果中包含有null的值
  • 聚集函数aggregate function忽略null值
  • 对于重复删除duplicate eliminate和分组grouping,null被当作其他的任意值,两个null值被当作是一样的

对两个null值的比较返回一个特殊的真值:unknown

使用unknown的逻辑运算

  • unknown OR true = true
  • unknown OR false = unknown
  • unknown OR unknown = unknown
  • unknown AND true = unknown
  • unknown AND false = false
  • unknown AND unknown = unknown
  • NOT unknown =unknown

对数据库的修改 Modification of Database

对数据库的修改有三种操作,增,删,改,这些操作都是使用赋值运算来表示的

Insert

$r \leftarrow r \cup E$

Deletion

删除操作与查询操作类似,只是它不是显示出得到的元组而是从数据库中删除这些元组
$r \leftarrow r-E$

Updating

使用广义投影来表示更新数据的操作
$r \leftarrow \Pi(r)$