复杂查询二和数据更新数据库实验报告3.docx
- 文档编号:10184934
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:13
- 大小:215.71KB
复杂查询二和数据更新数据库实验报告3.docx
《复杂查询二和数据更新数据库实验报告3.docx》由会员分享,可在线阅读,更多相关《复杂查询二和数据更新数据库实验报告3.docx(13页珍藏版)》请在冰豆网上搜索。
复杂查询二和数据更新数据库实验报告3
贵州大学计算机科学与信息学院
计算机科学与技术系上机实验报告
《数据库原理》实验报告
题目
复杂查询
(二)和数据更新
姓名
班级
日期
实验环境:
SQLSever2000
实验内容与完成情况:
一、实验目的
本实验的目的使学生熟练掌握SQLServer查询分析器的使用方法,加深SQL语言查询语句的理解:
(1)熟练掌握数据查询中的分组、统计、计算、集合和视图的操作方法;
(2)通过INSERT语句向表中插入数据、UPDATE语句修改数据和DELETE语句删除数据。
二、实验内容
本实验使用实验二中建立的基本表Student、Course和SC中的元组。
Student
学号
Sno
姓名
Sname
性别
Ssex
年龄
Sage
所在系
Sdept
200215121
李勇
男
20
CS
200215122
刘晨
女
19
CS
200215123
王敏
女
18
MA
200215125
张立
男
19
IS
200215126
欧阳丽
女
21
FL
Course
课程号
Cno
课程名
Cname
先行课
Cpno
学分
Ccredit
1
数据库
5
4
2
数学
2
3
信息系统
1
4
4
操作系统
6
3
5
数据结构
7
4
6
数据处理
2
7
PASCAL
6
4
8
DB_Design
1
2
SC
学号
Sno
课程号
Cno
成绩
Grade
200215121
1
92
200215121
2
85
200215121
3
88
200215122
2
90
200215122
3
80
200215122
1
200215123
2
50
200215123
3
70
1、实现复杂查询:
分组查询实验:
该实验包括分组条件表达、选择组条件表达的方法。
使用函数查询的实验:
该实验包括统计函数和分组统计函数的使用方法。
集合查询实验:
该实验包括并操作UNION、交操作INTERSECT和差操作EXCPT的实现方法。
具体完成以下例题,将它们用SQL语句表示。
(1)求学生的总人数
(2)求选修了课程的学生人数
(3)求课程号和选修了该课程的学生人数
(4)求选修超过2门课的学生姓名
(5)查询计算机科学系的学生与年龄不大于19岁的学生的并集
(6)查询计算机科学系的学生与年龄不大于19岁的学生的交集
(7)查询计算机科学系的学生与年龄不大于19岁的学生的差集
(8)查询选修课程1的学生学号集合与选修课程2的学生学号集合的交集
(9)查询选修课程1的学生学号集合与选修课程2的学生学号集合的差集
(10)建立选修课程“信息系统”的选课视图SC_IS(视图包含学号、课程号和成绩),并在此基础上查询课程“信息系统”成绩大于80分的学生的姓名和成绩。
2、实现数据更新:
使用INSERT语句向表中插入数据、UPDATE语句修改数据和DELETE语句删除数据。
具体完成以下例题,将它们用SQL语句表示。
(1)将一新学生记录(学号:
200215124;姓名:
张政;性别:
男;年龄:
18;所在系:
CS)插入学生表中。
(2)插入一条选课记录(‘200219911’,1)。
(3)对每一个系,求学生的平均年龄,并把结果存入数据库。
对于这道题,首先要在数据库中建立一个有两个属性列的新表,其中一列存放系名,另一列存放相应系的学生平均年龄。
CREATETABLEDeptage(DepartmentCHAR(20),AverageAgeSMALLINT);然后对数据库的学生表按所在系分组求平均年龄,再把所在系和平均年龄存入新表中。
(4)将学生200215121的年龄改为22岁。
(5)将所有学生的年龄增加一岁。
(6)将数学系全体学生的成绩置零。
(7)删除学号为200219911的学生记录
(8)删除数学系所有学生的选课记录
三、出现的问题及其解决方案(列出遇到的问题和解决办法,列出没有解决的问题)
问题1:
求问题的交、差集时出现编译错误,提示有语法错误,问题如下所示:
分析原因:
SQLSever2000不支持求交集“INTERSECT”与差集“EXCEPT”的指令,因此使用该指令的时候会提示语法错误。
解决办法:
既然SQLSever2000不支持该指令,就采用使用“AND”“OR”来代替求交集和差集,具体实现如下所示:
问题2:
向SC表中插入一条新的选课记录,编译时出错,出错提示如下图所示
分析原因:
由于SC表中的Sno和Cno分别是学生表Student和表Course的外码,根据参照完整性定义,可得出外码的值只有两种可能:
一是为空,二是与被参照表中的主码有相同的值;但是由于Sno、Cno是SC表的主属性,不能为空(根据实体完整性),所以Sno、Cno的值必须等于表Student和表Course中的某一个Sno、Cno的值;由于新插入的记录的学生学号为“200219911”并不存在于表Student中,所以当向SC表插入该值时,便会产生如上所示的错误。
解决办法:
为了避免发生冲突,在向SC表中插入一条新的选课记录时,应该先将该生的学号插入到学生表中,
(因为不知道该生的其他信息,所以插入表中后,只会显示其学号值,而其他值全为空)
因为该生选修的课程为“1”号课程,该课程存在有Course表中,所以此时无需再向Course表中插入该课程的记录。
(若该生选修的课程也不存在于Course表中,同理也需将该课程插入到Course表中之后才可以将选课记录插入SC表中)
问题3:
删除表中的某一个记录时,编译时提示出错,具体如下所示:
分析原因:
删除表中的记录时,若先删除Student表中该生的记录,由于SC表的Sno是需要参照Student表的Sno的,而Sno又是SC表的主属性,所以当删除Student表时,会导致SC出错,此时系统会报错,不能这样删除。
解决办法:
可以先将SC表中条件满足该删除条件的记录删去,最后才将Student表中的该生的记录删去,如下所示:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 复杂 查询 数据 更新 数据库 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)