数据库复习">数据库复习
CH8 关系代数
8.1 关系代数
关系代数是SQL之外另一种描述数据库操作的形式化语言,关系变量(表)是关系代数中的基本表达式
关系代数三个重要的形式化定义如下:
8.2 关系代数操作符
(1)基本算符
F断言中可以有逻辑运算符(与或非:
有集合运算符(并、交、差、笛卡尔乘积):
左箭头
(2)Join操作
定义关系模式R(A,B,C,D)和S(E,B,D)的实例r、s的自然连接为:
(3)除操作
定义关系模式
用完全的关系代数表示为:
(4)聚合操作
聚合函数定义如SQL,包括了avg、min、max、sum、count等,形式化的关系代数聚合操作为:
其中
8.3 关系代数数据库修改
(1)删除
删除操作的形式化定义为
(2)插入
插入操作的形式化定义为
(3)更新
更新用Projection操作赋值给关系变量即可
CH9 关系演算
9.1 关系演算
关系演算是SQL、关系代数之外的又一种描述数据库操作的形式化语言,关系演算基本操作对象是范围变量(Range Variable,是关系变量/表的逻辑表达的别称)
关系演算基本语法为:
1.范围变量定义
::= RANGEVAR
RANGES OVER
2.范围属性定义
::=
.
[ AS
] 3.布尔表达式
::= ... all the usual possibilities, together with: |
4.量化布尔表达式(存在和所有)
::= EXISTS
(
)| FORALL
(boolean exp>) 5.关系操作
::=
[WHERE
] 6.元组表达式
::=
需要特别注意的是量化布尔表达式:
EXISTS v(P(v))只要有一个P(v)为真,即为真 FORALL v(P(v))需要所有P(v)为真,才为真 FORALL v(P(v))等价于NOT EXISTS v(NOT P(v))
9.2 元组演算
关系演算中元组演算就是对元组的操作,简单的元组演算和SQL十分相似:
// Find supplier numbers and status for suppliers in Paris with status >20 // Define a range variable RANGEVAR sx RANGES OVER S; // Where clause implement Restriction&Projection (sx.s#, sx.status) WHERE sx.city='paris' AND sx.status>20
较为复杂的元组演算引入量化布尔表达式:
// Find supplier names for suppliers who supply all parts. sx.sname WHERE FORALL px(EXISTS spx(spx.s# = sx.s# AND spx.p# = px.p#))
9.3 其他操作
9.3 其他操作关系演算其他操作,如聚合函数、集合操作等都和SQL较为相似,略