数据库实验4实验报告_第1页
数据库实验4实验报告_第2页
数据库实验4实验报告_第3页
数据库实验4实验报告_第4页
数据库实验4实验报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

淮海工学院计算机工程学院试验汇报书课程名:《数据库原理及应用》题目:T-SQL高级应用班级:软件132学号:122907姓名:孙莹莹评语:评语:成绩:指导教师:批阅时间:年月日目的与规定掌握复杂查询的使用措施;掌握多表连接的措施;掌握SELECT语句在多表查询中的应用。掌握数据汇总、外连接查询的使用措施;掌握事务定义的一般措施试验内容给出教材14-16的程序运行成果。编写程序,查询“1033”班的最高分的学生的学号、姓名、班号、课程号和分数。编写程序,创立一种新表,包括所有学生的姓名、课程名和分数,并以姓名排序。编写程序,输出每个班最高分的课程名和分数。在上次试验建立的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引入的子查询的选择列表一般都是由星号(*)构成。由于只是测试与否存在符合子查询中指定条件的行,因此不必列出列名。源码1useschoolselect学号,课程号,分数fromscorewhere学号in(103,105)orderby学号computeavg(分数)by学号go2useschoolgoselectstudent.班号,course.课程名,avg(score.分数)as'平均分'fromstudent,course,scorewherestudent.学号=score.学号andcourse.课程号=score.课程号groupbystudent.班号,course.课程名withcubego3useschoolgobegintransactionMytraninsertintoteachervalues('999','张英','男','1960/03/05','专家','计算机系')savetransactionMytraninsertintoteachervalues('888','胡丽','男','1982/08/04','副专家','电子工程系')rollbacktransactionMytrancommittransactiongoselect*fromteachergodeleteteacherwhere编号='999'go4useschoolselectstudent.学号,student.姓名,student.班号,score.课程号,score.分数fromstudent,scorewhere分数in(selectmax(分数)fromscorewhere班号='1033'andstudent.学号=score.学号)5USEschoolgoSELECTs.姓名,c.课程名,sc.分数INTOstudFROMstudents,coursec,scorescWHEREs.学号=sc.学号andc.课程号=sc.课程号andsc.分数isnotnullORDERBYs.姓名SELECT*FROMstudGo6USEschoolGOSELECT班号,课程名,MAX(分数)分数FROM(SELECTs.学号,s.姓名,s.班号,c.课程名,sc.分数FROMstudents,coursec,scorescWHEREs.学号=sc.学号ANDc.课程号=sc.课程号AND分数ISNOTNULL)TGROUPBY班号,课程名ORDERBY班号GO7USEfactoryGOSELECTworker.职工号,worker.姓名,salary.工资FROMworker,salaryWHEREworker.职工号=salary.职工号ORDERBYworker.职工号,worker.姓名COMPUTESUM(salary.工资)BYworker.职工号GO8USEfactoryGOSELECTworker.性别,depart.部门名,AVG(salary.工资)AS'平均工资'FROMworker,depart,salaryWHEREworker.职工号=salary.职工号ANDworker.部门号=depart.部门号GROUPBYworker.性别,depart.部门名WITHCUBEGO9USEfactoryGOINSERTINTOworkerVALUES('20','陈立','女','55/03/08',1,'75/10/10',4)GOINSERTINTOdepartVALUES(5,'设备处')GOSELECTworker.职工号,worker.姓名,depart.部门名FROMworkerFULLJOINdepartON(worker.部门号=depart.部门号)ORDERBYworker.职工号GODELETEFROMworkerWHERE职工号='20'GODELETEFROMdepartWHERE部门号=5GO10USEfactoryGOSELECTworker.职工号,worker.姓名,depart.部门名,salary.日期,salary.工资FROMworker,depart,salaryWHEREworker.部门号=depart.部门号ANDworker.职工号=salary.职工号ANDsalary.工资=(SELECTMAX(工资)FROMsalary)GO11USEfactoryGOSELECT部门名FROMdepartWHERE部门号=(SELECT部门号FROMworkerWHERE职工号=(SELECT职工号FROMsalaryWHERE工资=(SELECTMAX(工资)FROMsalary)))GO12USEfactoryGOSELECT职工号,姓名FROMworkerWHERE职工号IN(SELECT职工号FROMsalaryGROUPBY职工号HAVINGAVG(工资)<(SELECTAVG(工资)FROMsalary))GO13USEfactoryGOSETNOCOUNTON--申明变量DECLARE@dnamechar(10)--申明游标DECLAREd_cursorCURSORFORSELECT部门名FROMdepartWHERE部门号=(SELECT部门号FROMworkerWHERE职工号=(SELECT职工号FROMsalaryWHERE工资=(SELECTMAX(工资)FROMsalary)))--打开游标OPENd_cursor--提取第一行数据FETCHNEXTFROMd_cursorINTO@dname--打印表标题PRINT'部门名'PRINT'---------'WHILE@@FETCH_STATUS=0BEGIN--打印一行数据PRINT@dname--提取下一行数据FETCHNEXTFROMd_cursorINTO@dnameEND--关闭游标CLOSEd_cursor--释放游标DEALLOCATEd_cursorGO14USEfactoryGOSETNOCOUNTON--申明变量DECLARE@noint,@namechar(10)--申明游标DECLAREw_cursorCURSORFORSELECT职工号,姓名FROMworkerWHERE职工号IN(SELECT职工号FROMsalaryGROUPBY职工号HAVINGAVG(工资)<(SELECTAVG(工资)FROMsalary))--打开游标OPENw_cursor--提取第一行数据FETCHNEXTFROMw_cursorINTO@no,@name--打印表标题PRINT'职工号姓名'PRINT'-----------------'WHILE@@FETCH_STATUS=0BEGIN--打印一行数据PRINTCAST(@noASchar(8))+@name--提取下一行数据FETCHNEXTFROMw_cursorINTO@no,@nameEND--关闭游标CLOSEw_cursor--释放游标DEALLOCATEw_cursorGO15USEfactoryGODECLARE@numintSELECT@num=COUNT(*)FROMworkerPRINT'原职工人数:'+CAST(@numASCHAR(3))GODECLARE@numintBEGINTRANSACTION--启动事务--插入一种职工记录INSERTI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论