您好,欢迎访问三七文档
数据库习题课(第二章and第三章)关系代数与SQL语句例题1设有如图所示的关系S,SC,C,试用关系代数表达式表示下列查询语句:S#SNAMEAGESEX1李强23男2刘丽22女3张友22男C#CNAMETEACHERK1C语言王华K5数据库原理程军K8编译原理程军S#C#GRADE1K1832K1855K1922K5905K5845K880(1)检索“程军”老师所授课程的课程号(C#)和课程名(CNAME)。(2)检索年龄大于21的男学生学号(S#)和姓名(SNAME)。(3)检索至少选修“程军”老师所授全部课程的学生姓名。(4)检索“李强”同学不学课程的课程号。(5)检索至少选修两门课程的学生学号(S#)。(6)检索全部学生都选修的课程的课程号(C#)和课程名(CNAME)。(7)检索选修课程包含“程军”老师所授课程之一的学生学号(S#)。(8)检索选修课程号为K1和K5的学生学号(S#)。(9)检索选修全部课程的学生姓名(SNAME)。(10)检索选修课程包含学号为2的学生所修课程的学生学号(S#)。(11)检索选修课程名为“C语言”的学生学号(S#)和姓名(SNAME)。))((,#CTEACHERcnamec程军(2)(1)))((21,#SSEXAGESNAMES男(3)))))(()(((##,#CSCSTEACHERCCSSNAME程军))(()(##SCSCSNAMECC李强(4)(5)))*((]5[]2[]4[]1[]1[SCSC)))()(((##,#,#SSCCSCScnamec)))()(((##,#,#SSCCSCScnamec(6))))(((##CSCTEACHERCS程军(7)))(()('5'#'1'###,#CSCKCKCCcS(8)(9))))()(((##,#CSCSCCSSNAME))(()('2'###,#SCSCCCCS(10)(11)))))((((''#,#CSCSCCNAMESSNAMES语言(1)检索“程军”老师所授课程的课程号CNO和课程名CNAME。SELECTCNO,CNAMEFROMCWHERETEACHER=’程军’;(2)检索年龄大于21的男学生学号SNO和姓名SNAME。SELECTSNO,SNAMEFROMSWHEREAGE21ANDSEX=’男’;(3)检索至少选修“程军”老师所授全部课程的学生姓名SNAME。SELECTSNAMEFROMSWHERENOTEXISTS(SELECT*FROMCWHERETEACHER=’程军’ANDNOTEXISTS(SELECT*FROMSCWHERESC.SNO=S.SNOANDSC.CNO=C.CNO));(4)检索“李强”同学不学课程的课程号。SELECTCNOFROMCWHERECNONOTIN(SELECTCNOFROMSC,SWHERESC.SNO=S.SNOANDS.SNAME=’李强’);SELECTCNOFROMCEXCEPTSELECTCNOFROMSC,SWHERESC.SNO=S.SNOANDS.SNAME=’李强’;或(5)检索至少选修两门课程的学生学号。SELECTSNOFROMSCA,SCBWHEREA.SNO=B.SNOANDA.CNOB.CNO;(6)检索全部学生都选修的课程的课程号和课程名。SELECTCNO,CNAMEFROMCWHERENOTEXISTS(SELECT*FROMSWHERENOTEXISTS(SELECT*FROMSCWHERESC.CNO=C.CNOANDSC.SNO=S.SNO));(7)检索选修课程包含“程军”老师所授课程之一的学生学号。SELECTSNOFROMC,SCWHEREC.CNO=SC.CNOANDC.TEACHER=’程军’;(8)检索选修课程号为k1和k5的学生学号。SELECTSNOFROMSCWHERESC.CNO=’k1’INTERSECTSELECTSNOFROMSCWHERESC.CNO=’k5’;或:SELECTSNOFROMSCA,SCBWHEREA.SNO=B.SNOANDA.CNO=’k1’ANDB.CNO=’k5’;(9)检索选修全部课程的学生姓名;SELECTSNAMEFROMSWHERENOTEXISTS(SELECT*FROMCWHERENOTEXISTS(SELECT*FROMSCWHERESC.SNO=S.SNOANDSC.CNO=C.CNO));1.所有未选过的课程的数据集:select*from课程wherenotexists(select*from选读where课程号=课程.课程号)2.所有没被某位学号为@学号的学生选过的课程的记录集(@学号学生的未选课程):select*from课程wherenotexists(select*from选读where学号=@学号and课程号=课程.课程号)请注意,多出了学号的筛选即,学号=@学号。3.遍历每一个主查询的学号,每一个学号都按第二筛选方法筛选出:没有未选课程的学生的学号。(不包括在第查询方法查询出的“有未学课程的学号的记录集”中的记录。)请注意:用主查询中的学生.学号代替了@学号。select学生.姓名from学生wherenotexists(select*from课程wherenotexists(select*from选读where学号=学生.学号and课程号=课程.课程号))这已经是整个查询语句,可以看出子查询中用学生.学号替换了第2步中的@学号SELECTSNOFROMSWHERENOTEXISTS(SELECT*FROMSCAWHERESC.SNO=’2’ANDNOTEXISTS(SELECT*FROMSCBB.SNO=S.SNOANDB.CNO=A.CNO));(10)检索选修课程包含学号为2的学生所修课程的学生学号。(11)SELECTSNO,SNAMEFROMS,SC,CWHERES.SNO=SC.SNOANDC.CNO=SC.CNOANDCNAME=’C语言’;(11)检索选修课程名为“C语言”的学生学号和姓名。
本文标题:数据库习题课
链接地址:https://www.777doc.com/doc-4108766 .html