数据库实验报告.docx
- 文档编号:6561667
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:20
- 大小:343.71KB
数据库实验报告.docx
《数据库实验报告.docx》由会员分享,可在线阅读,更多相关《数据库实验报告.docx(20页珍藏版)》请在冰豆网上搜索。
数据库实验报告
数据库实验报告
姓名学号
目录
一.实验标题:
2
二.实验目的:
2
三.实验内容:
2
四.上机软件:
3
五.实验步骤:
3
六.分析与讨论:
20
一.实验标题:
数据库的查询
二.实验目的:
1.掌握select-from-where语句结构及使用
2.掌握各种查询操作方法
三.实验内容:
针对“学生-选课”库实现以下查询。
1.查询“计算机系”学生的学号和姓名
2.查询选修了课程的学生的学号
3.查询选修“计算机基础”课程的学生学号和成绩,并要求对查询结果按“成绩”降序排列,如果成绩相同则按“学号”升序排列
4.查询选修“数据库应用技术”课程且成绩在80-100之间的学生学号和成绩,并将成绩乘以系数0.7输出
5.查询“数学系”或“计算机系”姓“王”的学生的信息
6.查询缺少了成绩的学生的学号和课程号
7.查询每个学生的情况以及他们所选修的课程号
8.查询学生的学号、姓名、选修的课程名及成绩
9.查询每一课程的间接先行课
10.查询选修了“数据库应用技术”的学生学号和姓名
11.查询“计算机基础”课程的成绩高于李兵同学所有课程成绩的学生的学号和姓名(注:
由于在SC表中无法查到李立同学的课程成绩,故将“李立”改成“李兵”)
12.查询其他系中比计算机系某一学生年龄小的学生
13.查询其他系中比计算机系中学生年龄都小的学生
14.查询选修了“高等数学上”课程的学生姓名
15.查询没有选修“高等数学上”课程的学生姓名
16.查询选修了全部课程的学生的姓名
17.统计选修了课程的学生人数
18.统计各课程选修该课程的人数,并输出课程名称
19.统计选修课超过三门的学生学号
四.上机软件:
SQLServer2012
五.实验步骤:
打开SQLServer2012,点击新建查询,按照实验内容写下如下代码:
点击“执行”出现如上结果即为实验内容所要求的查询结果
注意事项:
1.字段列表中各字段使用“,”分隔。
2.查询时有时需要输出表中的所有属性列,这是关键词select后的字段列表可以简单地以“*”表示,而不必将表中的所有字段依次罗列出
3.在输出时可以对输出字段重新命名,但这种命名并不是改变原数据表中的字段名,它只影响输出的显示结果,有两种方式:
(1)在字段名后,以空格作为分隔符,再写上希望输出的表示名称
(2)在这两部分之间使用关键字“as”
4.对于来自不同数据表而字段名相同的字段,在字段名前必须标明表名,且以“.”作为分隔符
5.多表查询涉及的表可以多于两个,但表的数目越多,执行的速度越慢,占用的系统资源越多。
当包含n个表时,where子句中必须有n-1个关联表达式,且它们之间都是“与”的关系
6.书写嵌套查询时,子查询要用括号括起来
7.exists既不是等号也不同于in,而且作用的不是列之间的关系,它反映的是表之间的关系,所以where子句中没有列名,而子查询的select列表也不需要指定列名,用常用“select*”代替
8.SQL对大小写不敏感,SELECT与select是一样的
9.聚合函数不能出现在where子句中!
!
!
六.分析与讨论:
1.数据库中having与where的不同
答:
(1)使用场景不同:
where可以用于select、update、delete和insert...into语句中。
having只能用于select语句中
(2)子句有区别:
where子句中的条件表达式having都可以跟,而having子句中的有些表达式where不可以跟;having子句可以用聚合函数(sum、count、avg、max和min),而where子句不可以。
having是先分组再筛选记录,where在聚合前先筛选记录.也就是说作用在groupby子句和having子句前;而having子句在聚合后对组记录进行筛选
(3)作用对象不同 :
where子句作用于表和视图,having子句作用于组。
where在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算),而having在分组和聚集之后选取分组的行。
因此,where子句不能包含聚集函数;因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。
相反,having子句总是包含聚集函数。
(严格说来,你可以写不使用聚集的having子句,但这样做只是白费劲。
同样的条件可以更有效地用于where阶段。
)
2.where、groupby、having的作用及执行顺序
答:
(1)where子句用于筛选from子句中指定的数据所产生的行数据
(2)groupby子句用于对经where子句筛选后的结果数据进行分组
(3)having子句用于对分组后的统计结果再进行筛选
3.连接查询和嵌套查询的区别
答:
(1)在执行有连接查询时,系统首先将所有被连接的表连接成一张大表,这张大表中的数据全部满足连接条件的数据。
之后再在这张连接后的大表上执行where子句,然后是groupby子句。
(2)对于嵌套查询,是先执行子查询,然后在子查询的结果基础上再执行外层查询。
4.嵌套查询中的否定如何应用?
答:
对于嵌套查询,是先执行子查询,然后在子查询的结果基础上再执行外层查询。
而且在子查询中也是逐行判断的,当发现有满足条件的数据时,将此行数据作为外行查询的一个比较条件。
通常情况下,对于带有部分否定条件的查询都应该用子查询来实现,而且应该放在外层!
5.正确书写SQL查询语句应注意哪些问题?
答:
(1)遵守写代码的基本规范,比如区分中英文字符,但在SQL中对大小写不做具体区分
(2)熟悉查询语句的基本格式及意义,尤其是where、having、groupby、orderby的意义及具体使用场合
(3)根据要求区分单表查询、多表查询、嵌套查询,再细分选择最适合的语句
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)