数据库实验五

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

数据库概论课程实验报告(五)课程名称数据库系统概论班级计科10级6班实验日期2012-12-19姓名魏莉莉学号12010243032实验成绩实验名称数据库综合查询实验目的及要求1.了解select语句的基本语法格式和执行方法;2.了解连接查询的表示及使用;3.了解嵌套查询的表示及使用;4.了解集合查询的表示及使用;5.完成试验报告;实验环境操作系统:WindowsDBMS:MySQL实验内容1.查询以‘DB_’开头,且倒数第3个字符为‘s’的课程的详细情况;2.查询名字中第2个字为‘阳’的学生姓名和学号及选修的课程号、课程名;3.列出选修了‘数学’或者‘大学英语’的学生学号、姓名、所在院系、选修课程号及成绩;4.查询缺少成绩的所有学生的详细情况;5.查询与‘张力’(假设姓名唯一)年龄不同的所有学生的信息;6.查询所选课程的平均成绩大于张力的平均成绩的学生学号、姓名及平均成绩;7.按照“学号,姓名,所在院系,已修学分”的顺序列出学生学分的获得情况。其中已修学分为考试已经及格的课程学分之和;8.列出只选修一门课程的学生的学号、姓名、院系及成绩;9.查找选修了至少一门和张力选修课程一样的学生的学号、姓名及课程号;10.只选修“数据库”和“数据结构”两门课程的学生的基本信息;11.至少选修“数据库”或“数据结构”课程的学生的基本信息;12.列出所有课程被选修的详细情况,包括课程号、课程名、学号、姓名及成绩;13.查询只被一名学生选修的课程的课程号、课程名;14.检索所学课程包含学生‘张向东’所学课程的学生学号、姓名;15.使用嵌套查询列出选修了“数据结构”课程的学生学号和姓名;16.使用嵌套查询查询其它系中年龄小于CS系的某个学生的学生姓名、年龄和院系;17.使用ANY、ALL查询,列出其他院系中比CS系所有学生年龄小的学生;18.分别使用连接查询和嵌套查询,列出与‘张力’在一个院系的学生的信息;19.使用集合查询列出CS系的学生以及性别为女的学生名单;20.使用集合查询列出CS系的学生与年龄不大于19岁的学生的交集、差集;21.使用集合查询列出选修课程1的学生集合与选修课程2的学生集合的交集;22.思考题:按照课程名顺序显示各个学生选修的课程(如200515001数据库数据结构数学);调试过程及实验结果(详细记录在调试过程中出现的问题及解决方法。记录实验执行的结果)1.查询以‘DB_’开头,且倒数第3个字符为‘s’的课程的详细情况说明:用'PA_'开头,倒数第三个为'L'的代替题目要求的select*fromcoursewherecnamelike'PA%L__';2.查询名字中第2个字为‘阳’的学生姓名和学号及选修的课程号、课程名嵌套查询方式:selectsname,student.sno,course.cno,cnamefromstudent,sc,coursewherestudent.snoin(selectsnofromstudentwheresnamelike'_菁%')andsc.sno=student.snoandcourse.cno=sc.cno;连接查询方式:selectsname,student.sno,course.cno,cnamefromstudent,sc,coursewheresnamelike'_菁%'andsc.sno=student.snoandcourse.cno=sc.cno;3.列出选修了‘数学’或者‘大学英语’的学生学号、姓名、所在院系、选修课程号及成绩selectsname,student.sno,Sdept,course.cno,gradefromstudent,sc,coursewhere(cname='大学英语'orcname='数学')andsc.sno=student.snoandcourse.cno=sc.cno;(cname='大学英语'orcname='数学')可以替换为cnamein('大学英语','数学');selectsname,student.sno,Sdept,course.cno,gradefromstudent,sc,coursewherecourse.cnoin(selectcnofromcoursewherecname='大学英语'orcname='数学')andsc.sno=student.snoandcourse.cno=sc.cno;4.查询缺少成绩的所有学生的详细情况selectsname,student.sno,Sdept,sagefromstudent,scwherestudent.snoin(selectsnofromscwheregradeisnull)andsc.sno=student.sno;selectsname,student.sno,Sdept,sagefromstudent,scwheregradeisnullandsc.sno=student.sno;5查询与‘张力’(假设姓名唯一)年龄不同的所有学生的信息select*fromstudentwheresagenotin(selectsagefromstudentwheresname='张力');6.查询所选课程的平均成绩大于张力的平均成绩的学生学号、姓名及平均成绩selectsc.sno,sname,avg(grade)fromsc,studentwheresc.sno=student.snogroupbysnohavingavg(grade)(selectavg(grade)fromsc,studentwheresname='张立')7.按照“学号,姓名,所在院系,已修学分”的顺序列出学生学分的获得情况。其中已修学分为考试已经及格的课程学分之和selectstudent.sno学号,sname姓名,sdept所在院系,sum(ccredit)已修学分fromstudent,sc,coursewheresc.sno=student.snoandsc.cno=course.cnoandgrade=60groupbysc.sno8.列出只选修一门课程的学生的学号、姓名、院系及成绩selectsc.sno学号,sname姓名,sdept院系,grade成绩fromsc,studentwheresc.sno=student.snogroupbysc.snohavingcount(*)=19.查找选修了至少一门和张力选修课程一样的学生的学号、姓名及课程号selectsc.sno学号,sname姓名,sc.cno课程号fromsc,studentwheresc.sno=student.snoandsc.cnoin(selectdistinctcnofromsc,studentwheresname='张立'groupbysc.sno)10.11.至少选修“数据库”或“数据结构”课程的学生的基本信息selectsc.sno,sname,sdept,sage,ssexfromsc,student,coursewheresc.sno=student.snoandsc.cno=course.cnoandcnamein('数据库','数据结构')12.13.查询只被一名学生选修的课程的课程号、课程名selectcourse.cno,cnamefromsc,coursewheresc.cno=course.cnogroupbysc.cnohavingcount(*)=114.检索所学课程包含学生‘张向东’所学课程的学生学号、姓名selectstudent.sno,snamefromstudentwhereexists(selectsnofromscwheresnoin(selectsnofromstudentwherestudent.sno=sc.snoandsname='张向东'));存在问题:我觉得用“in”或“=any”也可以,但是为什么出现的结果完全不对?selectsc.sno,snamefromstudent,scwherecno=any(selectcnofromstudent,scwherestudent.sno=sc.snoandsname='张向东')15.使用嵌套查询列出选修了“数据结构”课程的学生学号和姓名selectsname,sage,sdeptfromstudentwheresno=any(selectsc.snofromsc,coursewherecname='数据结构')16.使用嵌套查询查询其它系中年龄小于CS系的某个学生的学生姓名、年龄和院系selectsname,sage,sdeptfromstudentwheresageany(selectsagefromstudentwheresdept='CS')andsdept!='CS';17.使用ANY、ALL查询,列出其他院系中比CS系所有学生年龄小的学生selectsno,sname,sage,sdeptfromstudentwheresageall(selectsagefromstudentwheresdept='CS')andsdept!='CS';18.分别使用连接查询和嵌套查询,列出与‘张力’在一个院系的学生的信息select*fromstudentwheresdept=any(selectsdeptfromstudentwheresname='张力')selects1.*fromstudents1,students2wheres1.sno=s2.snoands1.sdeptin(selectsdeptfromstudentwheresname='张力')19.使用集合查询列出CS系的学生以及性别为女的学生名单select*fromstudentwheresdept='CS'unionselect*fromstudentwheressex='女';20.使用集合查询列出CS系的学生与年龄不大于19岁的学生的交集、差集交集select*fromstudentwheresdept='CS'intersectselect*fromstudentwheresage!19';差集select*fromstudentwheresdept='CS'exceptselect*fromstudentwheresage=19;21.使用集合查询列出选修课程1的学生集合与选修课程2的学生集合的交集selectstudent.sno,sname,sdept,sagefromstudent,scwheresc.sno=student.snoandcno='1'unionselectstudent.sno,sname,sdept,sagefromstudent,scwheresc.sno=student.snoandcno='2'总结(对实验结果进行分析,问题回答,实验心得体会及改进意见)不会做的题有:10、12、22有疑问的是14,题中用的是exists,我觉得用“in”或“=any”也可以,但是为什么出现的结果完全不对?19和20题的交集和差集我在SQLServer上是过,结果能出来并且是正确的,但在MySQL中没法用intersect和except,我下去再查查这个。总体觉得在exists/in/any这块还不是很懂,就是在什么情况下用这几个分不清楚!

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功