数据库实验报告.docx
- 文档编号:4686064
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:31
- 大小:469.42KB
数据库实验报告.docx
《数据库实验报告.docx》由会员分享,可在线阅读,更多相关《数据库实验报告.docx(31页珍藏版)》请在冰豆网上搜索。
数据库实验报告
实验一
一、实验目的
1.熟练掌握SQLServer200X的使用方法。
2.熟练掌握使用SQLServer200X的对象资源管理器以及SQL的DDL完成数据库的创建、删除和连接方法;数据表的建立、删除;表结构的修改。
3.加深对表的实体完整性、参照完整性和用户自定义完整性的理解。
二、实验环境
Windows7,SQLServer2008;
三、实验内容
1.用企业管理器与SQL语句分别完成Part1andpart2ofSSD7exercise1。
2.在以下实验中,使用学生-课程数据库,它描述了学生的基本信息、课程的基本信息及学生选修课程的信息。
用对象资源管理器(企业管理器)与SQL语句分别完成。
(1) 创建学生-课程数据库,数据文件名为student_data、大小10M,日志文件名为student_log、大小5M的新数据库,该数据库名为student。
(2) 创建学生关系表S:
学号
姓名
性别
年龄
所在系
Sno
Sname
Ssex
Sage
sdept
(3) 创建课程关系表C:
课程号
课程名
先行课
学分
Cno
Cname
Cpno
ccredit
(4) 创建学生-课程表SC:
学号
课程号
成绩
Sno
Cno
grade
(5) 将以上创建表S、C、SC的SQL命令以.SQL文件的形式保存在磁盘上。
在表中加入至少4个元组,第一个为本人信息。
(6) 在表S上增加“出生日期”属性列。
(7) 删除表S的“年龄”属性列。
(8) 删除表SC,利用磁盘上保存的.SQL文件重新创建表SC。
(9)备份数据库,再还原。
四、实验过程及结果
(1)创建学生-课程数据库,数据文件名为student_data、大小10M,日志文件名为student_log、大小5M的新数据库,该数据库名为student。
(2)分别创建学生关系表S,C,SC
(3)右键选择表,在所打开表标签右键保存sql,选择磁盘。
(4)在表S上增加“出生日期”属性列。
对表s新建查询,输入ALTERTABLEsADDbirthdateDATETIME执行结果
(5)删除表S的“年龄”属性列。
对表S新建查询,输入altertablesdropcolumnsage执行结果
(6)删除表SC,利用磁盘上保存的.SQL文件重新创建表SC。
删除表sc
usestudent
go
droptablesc
恢复结果
实验二
一、实验目的
熟悉和掌握对数据表中数据的查询操作和SQL命令的使用,学会灵活熟练的使用SQL语句的各种形式;
加深理解关系运算的各种操作(尤其是关系的选择,投影,连接和除运算)
二、实验环境
Windows7,SQLServer2008
三、实验内容
在表S,C,SC上完成以下查询:
1. 查询学生的基本信息;
2. 查询“CS”系学生的基本信息;
3. 查询“CS”系学生年龄不在19到21之间的学生的学号、姓名;
4. 找出“CS”系年龄最大的学生,显示其学号、姓名;
5. 找出各系年龄最大的学生,显示其学号、姓名;
6. 统计“CS”系学生的人数;
7. 统计各系学生的人数,结果按升序排列;
8. 按系统计各系学生的平均年龄,结果按降序排列;
9. 查询无先修课的课程的课程名和学时数;
10.统计每位学生选修课程的门数、学分及其平均成绩;
11. 统计选修每门课程的学生人数及各门课程的平均成绩;
12.找出平均成绩在85分以上的学生,结果按系分组,并按平均成绩的
升序排列;
13. 查询选修了“1”或“2”号课程的学生学号和姓名;
14. 查询选修了课程名为“数据库系统”且成绩在60分以下的学生的学号、姓名和成绩;
15. 查询每位学生选修了课程的学生信息(显示:
学号,姓名,课程号,课程名,成绩);
16. 查询没有选修课程的学生的基本信息;
17. 查询选修了3门以上课程的学生学号;
18. 查询选修课程成绩至少有一门在80分以上的学生学号;
19. 查询选修课程成绩均在80分以上的学生学号;
20. 查询选修课程平均成绩在80分以上的学生学号;
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
四、查询语句
useStudent;
1)
select*froms;
2)
select*fromswheresDept='魏';
3)
selectsNo,sNamefromswheresdept='魏'andsAgenotin(19,20,21);
4)
selectsNo,sNamefromswheresAge=(selectmax(sAge)fromswheresDept='魏');
5)
selectsNo,sNamefromsass1
wheres1.sAge=(selectmax(sAge)fromsass2wheres1.sDept=s2.sdept);
6)
selectsDept,count(*)fromswheresDept='魏';
7)
selectsDept,count(*)fromsgroupbysDeptorderbycount(*)asc;
8)
selectsDept,avg(sAge)'平均年龄'fromsgroupbysDeptorderByavg(sAge)desc;
9)
selectcName'课程名',cTime'学时'fromcwherecpno='无';
10)
selectsc.sno'学号',count(sc.cNo)'选修门数',avg(grade)'平均成绩',sum(ccredit)'总学分'fromsc,c
whereo=o
groupbysc.sno;
11)
selectcNo'课程',count(sNo)'人数',avg(grade)'平均分'fromscgroupbycNo;
12)
selectsc.sno'学号',sDept'专业',avg(grade)'平均分'fromsc,s
wheresc.sno=s.sno
groupbys.sDept,sc.sno
havingavg(grade)>85
orderbysDept,avg(grade);
13)
selectdistincts.sno'学号',s.sNamefroms,sc
wheres.sno=sc.snoand(o='1'oro='2');
14)
selects.sno,s.sName,sc.gradefroms,sc,c
wheresc.sno=s.snoando=oandgrade<60andc.cName='数据库';
15)
selects.sno,s.sName,o,c.cName,sc.gradefroms,sc,c
wheresc.sno=s.snoando=o
16)
selects.snofromswheres.snonotin(selectsnofromsc)
17)
selectsno,count(cno)fromsc
groupbysno
havingcount(cno)>=3;
18)
selectdistinct(sno),gradefromsc
wheregrade>80;
19)
selectsnofromsc
groupbysno
havingmin(grade)>80
20)
selectsno,avg(grade)fromsc
groupbysno
havingavg(grade)>80
实验三
一、实验目的
熟悉和掌握数据表中数据的插入、修改、删除操作和命令的使用(熟悉使用UPDATE/INSERT/DELETE语句进行表操作);加深理解表的定义对数据更新的作用。
二、实验环境
Windows7,SQLServer2008
三、实验要求
1.使用SQL进行数据完整性控制。
(1)在创建下列关系表时完成如下约束:
定义实体完整性;参照完整性(外码、在删除S中的元组时级联删除SC中相应元组、当更新S中的Sno时同时更新SC中的Sno);用户定义完整性:
学生年龄<30、所在系取值唯一。
(2)修改S中的约束条件,学号在100-1000之间。
学生关系表S:
学号
姓名
性别
年龄
所在系
Sno
Sname
Ssex
Sage
sdept
创建课程关系表C:
课程号
课程名
先行课
学分
Cno
Cname
Cpno
ccredit
创建成绩关系表SC:
学号
课程号
成绩
Sno
Cno
grade
(3)用实验验证当操作违反了完整性约束时,系统如何处理?
如:
在S中插入一条记录,学号不在100-1000之间;在SC中插入一条记录,课程号在C表中没有。
(4)删除C中的一条课程记录(该课程至少应有一学生选修,即在SC表中有记录),观察SC表中记录的变化。
(5)删除2中增加的约束,再在S中插入一条记录,学号不在100-1000之间,结果如何?
问题:
外键与参照主键(或候选键)是否一定要相同?
2.数据更新
(1) 将数据分别插入表S、C、SC;
(2) 在表S、C、SC上练习数据的插入、修改、删除操作。
(比较在表上定义/未定义主码(PrimaryKey)或外码(ForeignKey)时的情况)
(3) 将表S、C、SC中的数据全部删除,再利用磁盘上备份的数据来恢复数据。
(4) 如果要在表SC中插入某个学生的选课信息(如:
学号为“2007001005”,课程号为“c123”,成绩待定),应如何进行?
(5) 求各系学生的平均成绩,并把结果存入数据库;
(6) 将“CS”系全体学生的成绩置零;
(7) 删除“CS”系全体学生的选课记录;
(8) 删除学号为“S1”的相关信息;
(9) 将学号为“S1”的学生的学号修改为“S001”;
(10) 把平均成绩大于80分的男同学的学号和平均成绩存入另一个表S_GRADE(SNO,AVG_GRADE);
(11) 把选修了课程名为“数据结构”的学生的成绩提高10%;
(12) 把选修了“C2”号课程,且成绩低于该门课程的平均成绩的学生成绩删除掉;
四、实验结果
selectS.Sdept,avg(SC.grade)as’平均成绩’fromS,SC
whereS.Sno=SC.SnogroupbyS.Sdept.
updateSCsetgrade=0.
updateCsetCpron=’’
实验四
一、实验目的
1、熟悉和掌握对数据表中视图的定义操作和SQL命令的使用;
2、熟悉和掌握对数据表中视图的查询操作和SQL命令的使用;
3、熟悉和掌握对数据表中视图的更新操作和SQL命令的使用,并注意视图更新与基本表更新的区别与联系;
4、学习灵活熟练的进行视图的操作,认识视图的作用。
二、实验环境
Windows7,SQLServer2008
三、实验要求
以S,C,SC表为基础完成以下视图定义及使用
1. 定义“SSCH”院学生基本情况视图V_SSCH;
2. 将S,C,SC表中学生的学号,姓名,课程号,课程名,成绩定义为视图V_S_C_G;
3. 将各院学生人数,平均年龄定义为视图V_NUM_AVG;
4. 将各位学生选修课程的门数及平均成绩定义为视图V_AVG_S_G并查询结果;
5. 查询平均成绩为90分以上的学生学号、姓名和成绩;
6.通过视图V_SSCH,新增加一个学生记录('S12','YANXI',19,'SSCH'),并查询结果;
7.通过视图V_SSCH,删除学号为“S12”学生信息,并查询结果;
8.将视图V_SSCH中学号为“S12”的学生改名“中南人”。
四、实验结果
实验五
一、实验目的
熟悉SQL语句对数据库进行完整性控制的方法。
二、实验环境
Windows7,SQLServer2008
三、实验要求
使用SQL进行数据完整性控制:
包括三类完整性、check短语、constrain子句。
1、在创建下列关系表时完成如下约束:
定义实体完整性;参照完整性(外码、在删除S中的元组时级联删除SC中相应元组、当更新S中的Sno时同时更新SC中的Sno);用户定义完整性:
学生年龄<30、所在系取值唯一。
2、修改S中的约束条件,学号在100-1000之间。
学生关系表S:
学号
姓名
性别
年龄
所在系
Sno
Sname
Ssex
Sage
sdept
创建课程关系表C:
课程号
课程名
先行课
学分
Cno
Cname
Cpno
ccredit
创建成绩关系表SC:
学号
课程号
成绩
Sno
Cno
grade
3、用实验验证当操作违反了完整性约束时,系统如何处理?
如:
在S中插入一条记录,学号不在100-1000之间;在SC中插入一条记录,课程号在C表中没有。
4、删除C中的一条课程记录(该课程至少应有一学生选修,即在SC表中有记录),观察SC表中记录的变化。
5、删除2中增加的约束,再在S中插入一条记录,学号不在100-1000之间,结果如何?
四、实验结果
(1)在创建下列关系表时完成如下约束:
定义实体完整性;参照完整性(外码、在删除S中的元组时级联删除SC中相应元组、当更新S中的Sno时同时更新SC中的Sno);用户定义完整性:
学生年龄<30、所在系取值唯一。
altertableSaddconstraint
Sage_rangecheck(Sage<30)
altertableSaddconstraintuni_sdeptunique(sdept)
(6)修改S中的约束条件,学号大于1000。
altertableSaddconstraintSno_rangecheck(Sno>1000)
学生关系表S:
学号
姓名
性别
年龄
所在系
Sno
Sname
Ssex
Sage
sdept
创建课程关系表C:
课程号
课程名
先行课
学分
Cno
Cname
Cpno
Ccredit
创建成绩关系表SC:
学号
课程号
成绩
Sno
Cno
grade
(7)用实验验证当操作违反了完整性约束时,系统如何处理?
如:
在S中插入一条记录,学号不大于1000;在SC中插入一条记录,课程号在C表中没有。
答:
语句会被终止。
insertintoSvalues(90,'','','','',null)
insertintoSCvalues(90,008,null)
INSERT语句与FOREIGNKEY约束"FK__SC__Sno__1B0907CE"冲突。
该冲突发生于数据库"student",表"dbo.S",column'Sno'。
语句已终止。
INSERT语句与CHECK约束"Sno_range"冲突。
该冲突发生于数据库"student",表"dbo.S",column'Sno'。
语句已终止。
(8)删除C中的一条课程记录(该课程至少应有一学生选修,即在SC表中有记录),观察SC表中记录的变化。
未删除之前的表SC中的数据:
删除后的表SC中的数据:
(5)删除2中增加的约束,再在S中插入一条记录,学号不大于1000,结果如何?
altertableSdropconstraintSno_range
insertintoSvalues(3901090113,'曲欣','男','音乐','19891229',null)
实验六
一、实验目的
理解存储过程的概念、建立和调用方法
二、实验环境
Windows7,SQLServer2008
三、实验要求
1、建立五张表,每张表至少需要10条记录。
(1)/*员工人事表employee*/
emp_no
char(5)
Notnull
primarykey
员工编号
emp_name
char(10)
Notnull
员工姓名
sex
char
(1)
性别
dept
char(4)
所属部门
title
char(6)
职称
date_hired
datetime
到职日
birthday
datetime
生日
salary
int
薪水
addr
char(50)
住址
(2)/*客户表customer*/
cust_id
char(5)
Notnull
primarykey
客户号
cust_name
char(20)
Notnull,
客户名称
addr
char(40)
客户住址
tel_no
char(10)
客户电话
zip
char(6)
邮政编码
(3)/*销售主表sales*/
order_no
int
Notnull
primarykey
订单编号
cust_id
char(5)
Notnull,
客户号
sale_id
char(5)
业务员编号
tot_amt
numeric(9,2)
订单金额
order_date
datetime
订货日期
ship_date
datetime
出货日期
invoice_no
char(10)
发票号码
(4)/*销货明细表sale_item*/
order_no
int
Notnull,
primarykey
订单编号
prod_id
char(5)
Notnull,
primarykey
产品编号
qty
int
销售数量
unit_price
numeric(7,2)
单价
order_date
datetime
订单日期
(5)/*产品名称表product*/
pro_id
char(5)
Notnull
primarykey
产品编号
prod_name
char(20)
Notnull
产品名称
2、建立表的同时创建表的约束。
(1)为每张表建立主键约束。
(2)通过拖放操作加入外键。
(3)在表employee加入CHECK约束:
输入的员工编号必须以E开头的5位数编号,性别只能为M/F。
(4)为销售主表sales中的发票编号字段建立UNIQUE约束。
3、通过快捷菜单得到脚本。
4、利用存储过程,给employee表添加一条业务部门员工的信息。
5、利用存储过程从employee、sales、customer表的连接中返回所有业务员的姓名、客户姓名、销售金额。
6、利用存储过程查找“刘德华”的员工编号、订单编号、销售金额。
7、利用存储过程查找姓“李”并且职称为“职员”的员工的员工编号、订单编号、销售金额。
8、利用存储过程计算出订单编号为10003的订单的销售金额。
四、实验结果
CREATEDATABASEcompany
ONPRIMARY
(NAME='company_data',
FILENAME='H:
\wlwDatabase\company_data.mdf',
SIZE=3072KB,
FILEGROWTH=1024KB)
LOGON
(NAME=N'company_log',
FILENAME=N'H:
\wlwDatabase\company_log.ldf',
SIZE=1MB,
FILEGROWTH=10%)
GO
GO
SETANSI_PADDINGOFF
GO
/******对象:
Table[dbo].[product]脚本日期:
05/19/201113:
53:
59******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
SETANSI_PADDINGON
GO
CREATETABLE[dbo].[product](
[pro_id][char](5)NOTNULL,
[prod_name][char](20)NOTNULL,
PRIMARYKEYCLUSTERED
(
[pro_id]ASC
)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
)ON[PRIMARY]
GO
SETANSI_PADDINGOFF
GO
/******对象:
Table[dbo].[employee]脚本日期:
05/19/201113:
53:
57******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
SETANSI_PADDINGON
GO
CREATETABLE[dbo].[employee](
[emp_no][char](5)NOTNULL,
[emp_name][char](10)NOTNU
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 实验 报告