(1)∏Sname(S∞(∏S#,C#(SC)÷∏C#(σteacher=“程军”(C))))
说明:根据条件由课程关系得到课程号→由课程号在SC关系中得到学生号→ 由学生号在学生表中查找学生姓名。
1、先在C关系中进行选择运算,选择关系式选出给定条件的元组。
这里
选出
2
关系,这里从上面得到的关系当中投影出C#的属性。
得到结果如下:
3、对SC C#这两列:
4、将步骤3得到的关系B进行除运算。
除运算的
定义在课本上,这里我想简单说明此处是怎么得到的:
关系A和关系B具有相同的属性名,满足除运算的条件→此处除运算的结果时关系A中S#的分量值,也就是说结果肯定是一个在1,2,5当中取值的集合→ 首先我们计算1的象集为{k1},2的象集为{k1,k5},5的象集为{k1,k5,k8} → B关系在C#上的投影为{k5,k8},因此这里只有5的象集{k1,k5,k8}B关系在C#上的投影为{k5,k8}。
因此A关系除以B关系的结果为:
5、关系D与S
行比较的分量必须有相同的属性组,并且结果中把重复的属性组去掉。
连接结果为:
6
(2)∏C#(C)-∏C#(σSname=“李强”(S)∞SC)
说明:首先在S关系中选出姓名为李强的元组→与SC关系进行连接运算在得到的新关系上进行投影运算得到李强学习的课程号→在课程关系中进行投影运算得到所有课程的课程号–李强学习的课程号得到的就是李强不学习的课程号,最终结果为:{k5,k8}。
(3)∏C#,Cname(C∞(∏S#,C#(SC)÷∏S#(S))
说明:解题思路:这道题目要检索学生都选修的课程号和课程名,关键就在那个“都”字上,我们知道,除运算所满足的条件:元组X上的分量值x的象集Yx包含S在Y上的投影的集合。
抽象不要紧,实例化之后就能看懂了。
1、首先在SC关系上选出S#和C#这两列属性得到一个新的关系我们称为
A,从S关系当中选出S#这列属性得到的关系我们称为B,A和B做除运算的流程:
首先计算k1的象集{1,2,5}{2,5},k8的象集{5},关系B在S#上的投影{1,2,5}。
由此可看出只有k1的象集{1,2,5}包含B在S#上的投影{1,2,5}。
因此除运算的结果为{k1}。
关系表示为:
2、将除运算的结果关系D与题目当中的关系C进行连接运算,并选择其
中的C#和Cname
(4)∏S#(SC∞∏C#(σteacher=”程军”(C)))
说明:从C关系当中选择teacher=“程军”的元组,在投影出课程号,然后与SC关系做连接运算,从连接运算的到的关系中选择学生号。
(5)∏Sname(S∞(∏S#,C#(SC)÷∏C#(C)))
说明:这道题和上面的第三题思路是完全一样的。
(6)∏S#,Sname(S∞∏S#(SC∞∏C#(σCname=”C语言”(C))))
说明:这道题的做法跟第四题也有类似之处,具体的实现细节就像1,2题那样。
思路:这道题的最终要求是得到学生的学号和姓名,因此最外层
肯定是∏S#,Sname()。
然后就看怎么由条件得到结果。
首先我们从C关系中根据Cname=”C语言”选出符合条件的元组→进行投影运算得到课程号{k1} → 与SC进行连接运算,再选出学生号结果为{1,2,5} → 与S
(7)∏S#,Sname(S)-∏S#,Sname(σgread<60(SC)∞S)。