数据查询实验实验4页word.doc
如有侵权,请联系网站删除,仅供学习与交流数据查询实验实验【精品文档】第 4 页1. 实验三 数据查询实验实验1.1 实验目的通过对实验二中建立的学生数据库关系表和视图的各种查询的操作,加深对SQL查询语言的了解,掌握相关查询语句的语法和使用方法。1.2 实验内容1.2.1 数据库关系表查询(1) 简单的查询操作,包括单表的查询、选择条件、结果排序等的练习;(2) 多表的连接查询,包括等值连接、自然连接等;(3) 复杂的查询操作,包括使用分组函数等库函数的查询操作;(4) 练习带有IN、比较符的嵌套查询。1.2.2 视图查询对实验二建立的视图进行相关的查询操作,如:查询选修了课程编号为“C01”的学生的学号和成绩;查询所有学生的学号、姓名、选修的课程名称和成绩;查询选修了数据库原理的学生的学号和姓名。1.3 实验要求(1) 用SQL语句完成以上操作(2) 要求学生独立完成以上内容。(3) 实验完成后完成要求的实验报告内容。1.4 实验环境Windows8 pc机 Mysql配置的环境Mysql命令行工具Workbench可视化工具1.5 实验步骤及结果分析1.5.1 数据库关系表查询1.5.1.1 简单查询具体内容包括:在简单查询实验中,在sql语句完成以下查询操作:1. 查询“数据库原理”课程的学分:Mysql语言:select credit from course where cname='数据库原理'2. 查询选修了课程编号为“C01”的学生的学号和成绩,并将成绩按降序输出:Mysql语言:select sno,gradefrom scwhere cno='C01'order by grade desc;3. 查询学号为“31401”的学生选修的课程编号和成绩:Mysql语言:select cno,gradefrom scwhere sno=31401;4. 查询选修了课程编号为“C01”且成绩高于85分的学生的学号和成绩:Mysql语言:select sno,gradefrom scwhere cno='C01' and grade > 85;查询“数据库原理”课程的学分 查询选修了课程编号为“C01”的学生 的学号和成绩,将成绩按降序输出查询学号为“31401”的学生选修的课程编号和成绩 查询选修了课程编号为“C01”且成绩高于85分的学生的学号和成绩1.5.1.2 连接查询在多表连接的查询实验中,在SQLSERVER提供的交互式语言环境下用Transact SQL语句完成以下查询操作:1. 查询选修了课程编号为“C01”且成绩高于85分的学生的学号、姓名和成绩:Mysql语言:select sno,sname,gradefrom student natural join scwhere cno='C01' and grade > 85;2. 查询所有学生的学号、姓名、选修的课程名称和成绩Mysql语言:select sno,sname,cname,gradefrom student natural join sc natural join course;查询选修了课程编号为“C01”且成绩高于85分的学生的学号、姓名和成绩查询所有学生的学号、姓名、选修的课程名称和成绩1.5.1.3 复杂查询在复杂查询实验中,用 SQL语句完成以下查询操作:1. 查询至少选修了三门课程的学生的学号和姓名:Mysql语言:select sno,sname,count(cno)from student natural join scgroup by snohaving count(cno)>=3;2. 查询所有学生的学号和他选修课程的最高成绩,要求他的选修课程中没有成绩为空的。Mysql语言:select sno,max(grade) from sc where sno not in(select distinct sno from sc where grade is null) group by sno;查询至少选修了三门课程的学生的学号和姓名 查询所有学生的学号和他选修课程的最高成绩,要求他的选修课程中没有成绩为空的1.5.1.4 嵌套查询在嵌套查询实验中,在kingbase提供的交互式语言环境下用iSQL语句完成以下查询操作,要求写嵌套查询语句:1. 查询选修了数据库原理的学生的学号和姓名:Mysql语言:select sno,sname from (select sno,sname,cname from student natural join sc natural join course )as awhere cname='数据库原理'2. 查询没有选修数据库原理的学生的学号和姓名:Mysql语言:select distinct(sno),sname from (select sno,sname,cname from student natural join sc natural join course )as awhere cname<>'数据库原理'3. 查询至少选修了学号为“31401”的学生所选修的所有课程的学生的学号和姓名:Mysql语言:select sno,snamefrom studentwhere not exists(select * from (select cno from sc where sno=31401)as Swhere not exists(select * from sc where cno=S.cno and sno=student.sno);查询选修了数据库原理的学生的学号和姓名查询没有选修数据库原理的学生的学号和姓名查询至少选修了学号为“31401”的学生所选修的所有课程的学生的学号和姓名1.5.2 视图查询对实验二建立的视图进行相关的查询操作,如:1. 查询选修了课程编号为“C01”的学生的学号和成绩:Mysql语言:select sno,grade from new_view where cno='C01'2. 查询所有学生的学号、姓名、选修的课程名称和成绩:Mysql语言:select sno,sname,cname,grade from new_view;3. 查询选修了数据库原理的学生的学号和姓名:Mysql语言:select sno,sname from new_view where cname='数据库原理'查询选修了课程编号为“C01”的学生的学号和成绩 查询所有学生的学号、姓名、选修的课程名称和成绩查询选修了数据库原理的学生的学号和姓名1.6 实验总结本次实验我们进行了多种多样的mysql查询操作,在多次的进行查书,查网络资料后,我完成了本次的实验。首先,我感觉本次实验最重要的便是本次实验的结构性,针对简单查询、连接查询、复杂查询、嵌套查询分块操作,毫无疑问让我对查询有了更深一步的了解,不同的查询方式对应着不同的特点,不同的语句。同时,实验中,我遇到了各种语句的不熟悉等问题,在资料查询过程中,让我对各种语句有了更深一步的了解,同时在使用过程中有了更多的熟练性。尤其是最后一个嵌套查询,我查阅了很多网络资料和例子,让我对exists和not exists语句有了更深一步的了解,同时再看解释时也让我对数据库查询的内部过程有了一定的了解,即采用相当于高级语言的循环操作方式类似。毫无疑问,本次实验让我对理论的应用有了一定程度的适应,也大大增加了对实验过程的兴趣。