作者:whisper
链接:http://proprogrammar.com:443/article/503
声明:请尊重原作者的劳动,如需转载请注明出处
关系数据库语言的分类
1. 关系代数语言
2. 关系演算语言:用谓词来表达查询要求
谓词变元的基本对象是元组变量
代表: APLHA, QUEL
谓词变元的基本对象是域变量
代表: QBE
2. 具有关系代数和关系演算双重特点的语言
运算对象是关系
运算结果亦为关系
关系代数的运算符有两类:集合运算符和专门的关系运算符
关系代数(传统的集合运算)
一些记号
1 并(Union)
R和S
R∪S
R∪S = { t|t ∈ R∨t ∈S }
2 差(Difference)
R和S
R - S
R -S = { t|t∈R∧t∉S }
3 交(Intersection)
R和S
R∩S
R∩S = { t|t ∈ R∧t ∈S }
R∩S = R –(R-S)
4 笛卡尔积(Cartesian Product)
R: n目关系, k1个元组; S: m目关系, k2个元组
R×S
列: (n+m) 列元组的集合
行: k1×k2个元组
学生-课程数据库
学生关系Student、课程关系Course和选修关系SC
专门的关系运算
1. 选择
2. 投影
3. 连接
4. 除运算
1. 选择(Selection)
选择又称为限制(Restriction)
选择运算符的含义
在关系R中选择满足给定条件的诸元组
F:选择条件, 是一个逻辑表达式, 取值为“真”或“假”
选择运算是从关系R中选取使逻辑表达式F为真的元组, 是从行的角度进行的运算
2. 投影(Projection)
从R中选择出若干属性列组成新的关系
投影操作主要是从列的角度进行运算
投影之后不仅取消了原关系中的某些列, 而且还可能取消某些元组(避免重复行)
3. 连接(Join)
连接也称为θ连接
连接运算的含义
从两个关系的笛卡尔积中选取属性间满足一定条件的元组
连接运算从R和S的广义笛卡尔积R×S中选取R关系在A属性组上的值与S关系在B属性组上的值满足比较关系θ的元组
两类常用连接运算
等值连接(equijoin)
自然连接(Natural join)
两个关系中进行比较的分量必须是相同的属性组
在结果中把重复的属性列去掉
R和S具有相同的属性组B
一般的连接操作是从行的角度进行运算。
自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。
悬浮元组(Dangling tuple)
两个关系R和S在做自然连接时,关系R中某些元组有可能在S中不存在公共属性上值相等的元组,从而造成R中这些元组在操作时被舍弃了, 这些被舍弃的元组称为悬浮元组。
外连接(Outer Join)
如果把悬浮元组也保存在结果关系中,而在其他属性上填空值(Null),就叫做外连接
左外连接(LEFT OUTER JOIN或LEFT JOIN)
右外连接(RIGHT OUTER JOIN或RIGHT JOIN)
4. 除运算(Division)
给定关系R (X, Y) 和S (Y, Z), 其中X, Y, Z为属性组。
R中的Y与S中的Y出自相同的域集。
R与S的除运算得到一个新的关系P(X), P是R中满足下列条件的元组在X 属性列上的投影:
元组在X上分量值x 的象集Y
x包含S在Y上投影的集合, 记作:
注:等值连接是一个相等关系,除操作是多个相等关系
在关系R中, A可以取四个值{a1, a2, a3, a4}
a1的象集为 {(b1, c2), (b2, c3), (b2, c1)}
a2的象集为 {(b3, c7), (b2, c3)}
a3的象集为 {(b4, c6)}
a4的象集为 {(b6, c6)}
S在(B, C)上的投影为
{(b1, c2), (b2, c1), (b2, c3) }
只有a1的象集包含了S在(B, C)属性组上的投影
所以 R÷S ={a1}
学生-课程数据库
学生关系Student、课程关系Course和选修关系SC
综合举例
[例2.10] 查询至少选修1号课程和3号课程的学生号码 。
[例2.11] 查询选修了2号课程的学生的学号。
[例2.12] 查询至少选修了一门其直接先行课为5号课程的学生姓名
[例2.13] 查询选修了全部课程的学生号码和姓名。
问题
关系代数的表达能力?
举几个关系代数不能表达的查询的例子
亲爱的读者:有时间可以点赞评论一下
全部评论