数据库关系代数除法讲解

数据库关系代数除法讲解

ID:39213383

大小:71.00 KB

页数:4页

时间:2019-06-27

数据库关系代数除法讲解_第1页
数据库关系代数除法讲解_第2页
数据库关系代数除法讲解_第3页
数据库关系代数除法讲解_第4页
资源描述:

《数据库关系代数除法讲解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、【数据库原理】关系代数篇——除法讲解陈宇超编辑总结:除法运算的一般形式示意图如何计算R÷S呢,首先我们引进”象集”的概念,具体意义看下面的陈述即可理解关系R和关系S拥有共同的属性B、C,R÷S得到的属性值就是关系R包含而关系S不包含的属性,即A属性在R关系中A属性的值可以取{a1,a2,a3,a4}a1值对应的象集为{(b1,c2),(b2,c1),(b2,c3)}a2值对应的象集为{(b3,c7),(b2,c3)}a3值对应的象集为{(b4,c6)}a4值对应的象集为{(b6,c6)}关系S在B、C上的投影为{(b1,c2),(b2,c1),(b2,c3)}只有

2、a1值对应的象集包含关系S的投影集,所以只有a1应该包含在A属性中所以R÷S为Aa1【例题一】为了更好的理解除法的实际作用,请看下面的例题设有教学数据库有3个关系(以下四小问均用除法的思想解决)学生信息关系student(sno,sname,age,sex)学生选课关系sc(sno,cno,score)学校课程关系course(cno,cname)Student表snosnameagesexS001陈晓16男S002周倩21女S003华南19男S004曹匀21女S005郑威20男Course表cnocnameC001计算机科学C002诗歌鉴赏C003资本论SC表s

3、nocnoscoreS001C00188S001C00295S001C00399S002C00197S002C00384S003C00269S005C00277S005C00398SQL语言中没有全称量词,具体实现时可以把带有全称量词的谓词转换为等价的带有存在量词的谓词。解决这类的除法问题一般采用双嵌套notexists来实现带全称量词的查询解决所谓forall的问题。(1)检索所学课程包含了C002课程的学生学号解关系代数表达式:∏sno(sc÷∏cno(σcno=’C002’(course))Sql语句从略(2)求至少选择了C001和C003两门课程的学生学

4、号解关系代数表达式:∏sno(sc÷∏cno(σcno=’C001’orcno=’C003’(course))Sql语句selectdistinctsnofromscAwherenotexists(select*fromcourseBwherecnoin('C002','C003')andnotexists(select*fromscCwhereA.sno=C.snoandB.cno=C.cno))也可以采用自连接selects1.snofrom(select*fromscwherecno='C001')ass1,(select*fromscwherecno='C

5、003')ass2wheres1.sno=s2.sno(1)求至少学习了学生S003所学课程的学生学号解关系代数表达式:∏sno(sc÷∏cno(σsno=’S003’(sc))selectdistinctsnofromscAwherenotexists(select*fromscBwheresno='S003'andnotexists(select*fromscCwhereA.sno=C.snoandB.cno=C.cno))(2)求选择了全部课程的学生的学号解此例的等价自然语义是,输出这样的学号,不存在某门课程在他的选课记录里没有选这门课关系代数表达式:∏sn

6、o(sc÷∏cno(course))Sql语句selectdistinctsnofromscAwherenotexists(selectcnofromcourseBwherenotexists(select*fromscCwhereC.sno=A.snoandC.cno=B.cno))(3)求选择了全部课程的学生的学号和姓名解关系代数表达式:∏sno,sname((student∞sc)÷∏cno(course))Sql语句selectsno,snamefromstudentAwherenotexists(selectcnofromcourseBwherenote

7、xists(select*fromscCwhereC.sno=A.snoandC.cno=B.cno))以上小问用groupby结合count语句也是可以实现的,也更好理解一些。例如求选择了全部课程的学生学号SELECTsnoFROM(SELECTCOUNT(*)cnt,SnoFROMSCGROUPBYsno)TWHEREcnt>=(SELECTCOUNT(Cno)FROMCOURSE)求至少选择了C002和C003两门课程的学生学号selectsnofromscwherecnoin('C002','C003')groupbysnohavingCOUNT(cno)

8、=2但该方

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。