数据库实验4实验报告.docx

上传人:b****0 文档编号:12540312 上传时间:2023-04-20 格式:DOCX 页数:19 大小:244.47KB
下载 相关 举报
数据库实验4实验报告.docx_第1页
第1页 / 共19页
数据库实验4实验报告.docx_第2页
第2页 / 共19页
数据库实验4实验报告.docx_第3页
第3页 / 共19页
数据库实验4实验报告.docx_第4页
第4页 / 共19页
数据库实验4实验报告.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

数据库实验4实验报告.docx

《数据库实验4实验报告.docx》由会员分享,可在线阅读,更多相关《数据库实验4实验报告.docx(19页珍藏版)》请在冰豆网上搜索。

数据库实验4实验报告.docx

数据库实验4实验报告

淮海工学院计算机工程学院

实验报告书

课程名:

《数据库原理及应用》

题目:

T-SQL高级应用

班级:

软件132

学号:

**********

******

 

一.目的与要求

1.掌握复杂查询的使用方法;

2.掌握多表连接的方法;

3.掌握SELECT语句在多表查询中的应用。

4.掌握数据汇总、外连接查询的使用方法;

5.掌握事务定义的一般方法

二.实验内容

1.给出教材14-16的程序运行结果。

2.编写程序,查询“1033”班的最高分的学生的学号、姓名、班号、课程号和分数。

3.编写程序,创建一个新表,包含所有学生的姓名、课程名和分数,并以姓名排序。

4.编写程序,输出每个班最高分的课程名和分数。

5.在上次实验建立的factory数据库的基础上,完成如下各题:

●删除factory数据库上各个表之间建立的关系;

●显示各职工的工资记录和相应的工资小计。

●按性别和部门名的所有组合方式列出相应的平均工资。

●在worker表中使用以下语句插入一个职工记录:

insertintoworkervalues(20,’陈立’,‘女’,’55/03/08’,1,’75/10/10’,4),在depart表中使用以下语句插入一个部门记录:

insertintodepartvalues(5,’设备处’)。

再对worker和depart表进行全外连接显示职工的职工号,姓名和部门名。

然后删除这两个插入的记录。

●显示最高工资的职工的职工号、姓名、部门名、工资发放日期和工资。

●显示最高工资的职工所在的部门名。

●显示所有平均工资低于全部职工平均工资的职工的职工号和姓名。

●先显示worker表中的职工人数,开始一个事务,插入一个职工记录,再显示worker表中的职工人数,回滚该事务,最后显示worker表中的职工人数。

三.实验步骤

删除factory数据库上各个表之间建立的关系的操作步骤如下:

①启动SQLServer管理控制器。

②在“对象资源管理器”中展开LCB-PC服务器节点。

③展开“数据库”节点。

④选中,将其展开。

⑤展开“数据库关系图”节点。

⑥选中dbo.Diagram_1,右击,在出现的快捷菜单中选择“修改”命令,如图5.1所示。

⑦在数据库关系图中,选择表示要从关系图中删除的关系的连接线(对于两条连线均进行⑦~⑨的操作)。

⑧右击关系线,从快捷菜单中选择“从数据库中删除关系”命令。

⑨出现一个消息框,提示确认删除。

单击“是”按钮。

⑩在出现的对话框中单击“是”按钮保存所做的修改。

这样就将worker表和depart表以及worker表和salary表之间的关系删除了。

四.测试数据与实验结果

第1-14题图

第1-15题图

第1-16题图

第2题图

第3题图

第4题图

图5.1

第5-2题图

第5-3题图

第5-4题图

第5-5题图

第5-6题图

第5-7题图

第5-8题图

第5-9题图

第5-10题图

五.结果分析与实验体会

在FROM子句中指定连接条件,有助于将这些连接条件与WHERE子句中的其他搜索条件分开,指定连接时建议使用这种方法。

如果某个表只出现在子查询中而不出现在外部查询中,那么该表中的列就无法包含在输出中(外部查询的选择列表)。

使用EXISTS引入的子查询在以下几方面与其他子查询略有不同:

EXISTS关键字前面没有列名,常量或其他表达式。

由EXISTS引入的子查询的选择列表通常都是由星号(*)组成。

由于只是测试是否存在符合子查询中指定条件的行,所以不必列出列名。

六.源码

1

useschool

select学号,课程号,分数

fromscore

where学号in(103,105)

orderby学号

computeavg(分数)by学号

go

2

useschool

go

selectstudent.班号,course.课程名,avg(score.分数)as'平均分'

fromstudent,course,score

wherestudent.学号=score.学号andcourse.课程号=score.课程号

groupbystudent.班号,course.课程名withcube

go

3

useschool

go

begintransactionMytran

insertintoteacher

values('999','张英','男','1960/03/05','教授','计算机系')

savetransactionMytran

insertintoteacher

values('888','胡丽','男','1982/08/04','副教授','电子工程系')

rollbacktransactionMytran

committransaction

go

select*fromteacher

go

deleteteacherwhere编号='999'

go

4

useschool

selectstudent.学号,student.姓名,student.班号,score.课程号,score.分数

fromstudent,score

where分数in

(selectmax(分数)

fromscore

where班号='1033'andstudent.学号=score.学号)

5

USEschool

go

SELECTs.姓名,c.课程名,sc.分数

INTOstud

FROMstudents,coursec,scoresc

WHEREs.学号=sc.学号andc.课程号=sc.课程号andsc.分数isnotnull

ORDERBYs.姓名

SELECT*FROMstud

Go

6

USEschool

GO

SELECT班号,课程名,MAX(分数)分数

FROM(SELECTs.学号,s.姓名,s.班号,c.课程名,sc.分数

FROMstudents,coursec,scoresc

WHEREs.学号=sc.学号ANDc.课程号=sc.课程号AND分数ISNOTNULL)T

GROUPBY班号,课程名

ORDERBY班号

GO

7

USEfactory

GO

SELECTworker.职工号,worker.姓名,salary.工资

FROMworker,salary

WHEREworker.职工号=salary.职工号

ORDERBYworker.职工号,worker.姓名

COMPUTESUM(salary.工资)BYworker.职工号

GO

8

USEfactory

GO

SELECTworker.性别,depart.部门名,AVG(salary.工资)AS'平均工资'

FROMworker,depart,salary

WHEREworker.职工号=salary.职工号ANDworker.部门号=depart.部门号

GROUPBYworker.性别,depart.部门名WITHCUBE

GO

9

USEfactory

GO

INSERTINTOworkerVALUES('20','陈立','女','55/03/08',1,'75/10/10',4)

GO

INSERTINTOdepartVALUES(5,'设备处')

GO

SELECTworker.职工号,worker.姓名,depart.部门名

FROMworkerFULLJOINdepart

ON(worker.部门号=depart.部门号)

ORDERBYworker.职工号

GO

DELETEFROMworkerWHERE职工号='20'

GO

DELETEFROMdepartWHERE部门号=5

GO

10

USEfactory

GO

SELECTworker.职工号,worker.姓名,depart.部门名,salary.日期,salary.工资

FROMworker,depart,salary

WHEREworker.部门号=depart.部门号ANDworker.职工号=salary.职工号

ANDsalary.工资=

(SELECTMAX(工资)

FROMsalary)

GO

11

USEfactory

GO

SELECT部门名

FROMdepart

WHERE部门号=

(SELECT部门号

FROMworker

WHERE职工号=

(SELECT职工号

FROMsalary

WHERE工资=

(SELECTMAX(工资)

FROMsalary)

))

GO

12

USEfactory

GO

SELECT职工号,姓名

FROMworker

WHERE职工号IN

(SELECT职工号

FROMsalary

GROUPBY职工号

HAVINGAVG(工资)<(SELECTAVG(工资)FROMsalary)

GO

13

USEfactory

GO

SETNOCOUNTON

--声明变量

DECLARE@dnamechar(10)

--声明游标

DECLAREd_cursorCURSOR

FORSELECT部门名

FROMdepart

WHERE部门号=

(SELECT部门号

FROMworker

WHERE职工号=

(SELECT职工号

FROMsalary

WHERE工资=

(SELECTMAX(工资)

FROMsalary)

--打开游标

OPENd_cursor

--提取第一行数据

FETCHNEXTFROMd_cursorINTO@dname

--打印表标题

PRINT'部门名'

PRINT'---------'

WHILE@@FETCH_STATUS=0

BEGIN

--打印一行数据

PRINT@dname

--提取下一行数据

FETCHNEXTFROMd_cursorINTO@dname

END

--关闭游标

CLOSEd_cursor

--释放游标

DEALLOCATEd_cursor

GO

14

USEfactory

GO

SETNOCOUNTON

--声明变量

DECLARE@noint,@namechar(10)

--声明游标

DECLAREw_cursorCURSOR

FORSELECT职工号,姓名

FROMworker

WHERE职工号IN

(SELECT职工号

FROMsalary

GROUPBY职工号

HAVINGAVG(工资)<(SELECTAVG(工资)FROMsalary))

--打开游标

OPENw_cursor

--提取第一行数据

FETCHNEXTFROMw_cursorINTO@no,@name

--打印表标题

PRINT'职工号姓名'

PRINT'-----------------'

WHILE@@FETCH_STATUS=0

BEGIN

--打印一行数据

PRINTCAST(@noASchar(8))+@name

--提取下一行数据

FETCHNEXTFROMw_cursorINTO@no,@name

END

--关闭游标

CLOSEw_cursor

--释放游标

DEALLOCATEw_cursor

GO

15

USEfactory

GO

DECLARE@numint

SELECT@num=COUNT(*)FROMworker

PRINT'原职工人数:

'+CAST(@numASCHAR(3))

GO

DECLARE@numint

BEGINTRANSACTION--启动事务

--插入一个职工记录

INSERTINTOworkerVALUES(20,'陈立','女','55/03/08',1,'75/10/10',4)

PRINT'插入一个职工记录'

SELECT@num=COUNT(*)FROMworker

PRINT'职工人数:

'+CAST(@numASCHAR(3))

ROLLBACKTRANSACTION--回滚事务

GO

PRINT'回滚事务'

DECLARE@numint

SELECT@num=COUNT(*)FROMworker

PRINT'职工人数:

'+CAST(@numASCHAR(3))

GO

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1