数据库实验4实验报告(共14页).docx

上传人:飞****2 文档编号:30235451 上传时间:2022-08-05 格式:DOCX 页数:14 大小:262.44KB
返回 下载 相关 举报
数据库实验4实验报告(共14页).docx_第1页
第1页 / 共14页
数据库实验4实验报告(共14页).docx_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《数据库实验4实验报告(共14页).docx》由会员分享,可在线阅读,更多相关《数据库实验4实验报告(共14页).docx(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上淮海工学院计算机工程学院实验报告书课程名: 数据库原理及应用 题 目: T-SQL高级应用 班 级: 软件132 学 号: 姓 名: 孙莹莹 评语:成绩: 指导教师: 批阅时间: 年 月 日专心-专注-专业一 目的与要求1. 掌握复杂查询的使用方法;2. 掌握多表连接的方法;3. 掌握SELECT语句在多表查询中的应用。4. 掌握数据汇总、外连接查询的使用方法;5. 掌握事务定义的一般方法二 实验内容1 给出教材14-16的程序运行结果。2 编写程序,查询“1033”班的最高分的学生的学号、姓名、班号、课程号和分数。3 编写程序,创建一个新表,包含所有学生的姓名、课程

2、名和分数,并以姓名排序。4 编写程序,输出每个班最高分的课程名和分数。5 在上次实验建立的factory数据库的基础上,完成如下各题:l 删除factory数据库上各个表之间建立的关系;l 显示各职工的工资记录和相应的工资小计。l 按性别和部门名的所有组合方式列出相应的平均工资。l 在worker表中使用以下语句插入一个职工记录:insert into worker values(20,陈立,女,55/03/08,1,75/10/10,4),在depart表中使用以下语句插入一个部门记录:insert into depart values(5,设备处)。再对worker和depart表进行全外

3、连接显示职工的职工号,姓名和部门名。然后删除这两个插入的记录。l 显示最高工资的职工的职工号、姓名、部门名、工资发放日期和工资。l 显示最高工资的职工所在的部门名。l 显示所有平均工资低于全部职工平均工资的职工的职工号和姓名。l 先显示worker表中的职工人数,开始一个事务,插入一个职工记录,再显示worker表中的职工人数,回滚该事务,最后显示worker表中的职工人数。三 实验步骤删除factory数据库上各个表之间建立的关系的操作步骤如下: 启动SQL Server管理控制器。 在“对象资源管理器”中展开LCB-PC服务器节点。 展开“数据库”节点。 选中,将其展开。 展开“数据库关系

4、图”节点。 选中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、图第5-8题图第5-9题图第5-10题图五 结果分析与实验体会在FROM子句中指定连接条件,有助于将这些连接条件与WHERE子句中的其他搜索条件分开,指定连接时建议使用这种方法。如果某个表只出现在子查询中而不出现在外部查询中,那么该表中的列就无法包含在输出中(外部查询的选择列表)。使用EXISTS引入的子查询在以下几方面与其他子查询略有不同:lEXISTS关键字前面没有列名,常量或其他表达式。l由EXISTS引入的子查询的选择列表通常都是由星号(*)组成。由于只是测试是否存在符合子查询中指定条件的行,所以不必列出列名。六 源码1use schoolselect 学号,课程号,分数from sc

6、orewhere 学号 in(103,105)order by 学号compute avg(分数) by 学号go2use schoolgoselect student.班号,course.课程名,avg(score.分数)as平均分from student,course,scorewhere student.学号=score.学号 and course.课程号=score.课程号group by student.班号,course.课程名 with cubego3use schoolgobegin transaction Mytran insert into teacher values(9

7、99,张英,男,1960/03/05,教授,计算机系)save transaction Mytran insert into teacher values(888,胡丽,男,1982/08/04,副教授,电子工程系)rollback transaction Mytran commit transaction goselect * from teachergodelete teacher where 编号=999go4use schoolselect student.学号,student.姓名,student.班号,score.课程号,score.分数from student,scorewher

8、e 分数 in (select max(分数) from score where 班号=1033 and student.学号=score.学号)5USE schoolgoSELECT s.姓名,c.课程名,sc.分数INTO studFROM student s,course c,score scWHERE s.学号=sc.学号 and c.课程号=sc.课程号 and sc.分数 is not nullORDER BY s.姓名SELECT * FROM studGo6USE schoolGOSELECT 班号,课程名,MAX(分数) 分数FROM (SELECT s.学号,s.姓名,s.

9、班号,c.课程名,sc.分数 FROM student s,course c,score sc WHERE s.学号=sc.学号 AND c.课程号=sc.课程号 AND 分数 IS NOT NULL) TGROUP BY 班号,课程名ORDER BY 班号GO7USE factoryGOSELECT worker.职工号,worker.姓名,salary.工资FROM worker,salaryWHERE worker.职工号=salary.职工号ORDER BY worker.职工号,worker.姓名COMPUTE SUM(salary.工资) BY worker.职工号 GO8USE

10、factoryGOSELECT worker.性别,depart.部门名,AVG(salary.工资) AS 平均工资FROM worker,depart,salaryWHERE worker.职工号=salary.职工号 AND worker.部门号=depart.部门号GROUP BY worker.性别,depart.部门名 WITH CUBE GO9USE factoryGOINSERT INTO worker VALUES(20,陈立,女,55/03/08,1,75/10/10,4)GOINSERT INTO depart VALUES(5,设备处)GOSELECT worker.职

11、工号,worker.姓名,depart.部门名FROM worker FULL JOIN departON(worker.部门号=depart.部门号)ORDER BY worker.职工号GODELETE FROM worker WHERE 职工号=20GODELETE FROM depart WHERE 部门号=5GO10USE factoryGOSELECT worker.职工号,worker.姓名,depart.部门名,salary.日期,salary.工资FROM worker,depart,salaryWHERE worker.部门号=depart.部门号 AND worker.职

12、工号=salary.职工号AND salary.工资= (SELECT MAX(工资) FROM salary)GO11USE factoryGOSELECT 部门名FROM departWHERE 部门号= (SELECT 部门号 FROM worker WHERE 职工号= (SELECT 职工号 FROM salary WHERE 工资= (SELECT MAX(工资) FROM salary) ) )GO12USE factoryGOSELECT 职工号,姓名FROM workerWHERE 职工号 IN (SELECT 职工号 FROM salary GROUP BY 职工号 HAV

13、ING AVG(工资)(SELECT AVG(工资) FROM salary) GO13USE factoryGOSET NOCOUNT ON-声明变量DECLARE dname char(10)-声明游标DECLARE d_cursor CURSOR FOR SELECT 部门名 FROM depart WHERE 部门号= (SELECT 部门号 FROM worker WHERE 职工号= (SELECT 职工号 FROM salary WHERE 工资= (SELECT MAX(工资) FROM salary) ) )-打开游标OPEN d_cursor-提取第一行数据FETCH NE

14、XT FROM d_cursor INTO dname-打印表标题PRINT 部门名PRINT -WHILE FETCH_STATUS = 0BEGIN -打印一行数据 PRINT dname -提取下一行数据 FETCH NEXT FROM d_cursor INTO dnameEND-关闭游标CLOSE d_cursor-释放游标DEALLOCATE d_cursorGO14USE factoryGOSET NOCOUNT ON-声明变量DECLARE no int,name char(10)-声明游标DECLARE w_cursor CURSOR FOR SELECT 职工号,姓名 FR

15、OM worker WHERE 职工号 IN (SELECT 职工号 FROM salary GROUP BY 职工号 HAVING AVG(工资)(SELECT AVG(工资) FROM salary)-打开游标OPEN w_cursor-提取第一行数据FETCH NEXT FROM w_cursor INTO no,name-打印表标题PRINT 职工号 姓名PRINT -WHILE FETCH_STATUS = 0BEGIN -打印一行数据 PRINT CAST(no AS char(8)+name -提取下一行数据 FETCH NEXT FROM w_cursor INTO no,na

16、meEND-关闭游标CLOSE w_cursor-释放游标DEALLOCATE w_cursorGO15USE factoryGODECLARE num intSELECT num=COUNT(*) FROM workerPRINT 原职工人数:+CAST(num AS CHAR(3) GODECLARE num intBEGIN TRANSACTION -启动事务-插入一个职工记录 INSERT INTO worker VALUES(20,陈立,女,55/03/08,1,75/10/10,4) PRINT 插入一个职工记录SELECT num=COUNT(*) FROM workerPRINT 职工人数:+CAST(num AS CHAR(3) ROLLBACK TRANSACTION-回滚事务GOPRINT 回滚事务DECLARE num intSELECT num=COUNT(*) FROM worker PRINT 职工人数:+CAST(num AS CHAR(3) GO

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁