基本关系代数运算
关系代数是过程化语言,有以下六个基本操作
- Select 选择:σ
- Project 投影:Π
- Union 并:∪
- Set Difference 差:-
- Cartesian Product 笛卡儿积:×
- 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)$