您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
三六零分类信息网 > 玉林分类信息网,免费分类信息发布

数据库实验报告

2025/9/18 4:53:30发布27次查看
作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/29028363 使用sql server 开发服务器端应用程序 一、实验类别 综合型实验 二、实验目的 熟练掌握后台服务器端应用程序的开发。 三、实验环境 sql server 系列的数据库管理系统 四
作者 : 卿笃军
原文地址:http://blog.csdn.net/qingdujun/article/details/29028363
使用sql server 开发服务器端应用程序 一、实验类别
综合型实验
二、实验目的
熟练掌握后台服务器端应用程序的开发。
三、实验环境
sql server 系列的数据库管理系统
四、实验内容
对学生-课程数据库,编写存储过程,完成下面功能:
1.逐条(使用游标)浏览某个系的学生记录;
2.统计任意一门课程的成绩分布情况,即按照各分数段统计人数;
3.统计每个学生的平均成绩及排名;
4.将学生选课成绩从百分制改为等级制(即a、b、c、d、e)显示。
五、实验要求
提交源程序并标识必要的注释。保证程序能正确编译和运行,认真撰写实验报告。
六、实验过程
1.创建数据库及数据表……具体代码及创建后的结果如下图1 所示。
注:以下的3 个表,全部是可视化创建,表初始化内容如下(仿照课本输入的数值),关系
的主码加下划线表示。学生表:student(sno,sname,ssex,sage,sdept)
课程表:course(cno,cname,ccredit)
学生课程表:sc(sno,cno,grade)
2.创建存储过程1 完成……功能,具体代码及运行结果如下图r1 所示。
具体代码1:
--1.逐条(使用游标)浏览某个系的学生记录;--drop procedure lookdept --删除存储过程-----------存储过程:如下----------------create procedure lookdept @dept nchar(20) --dept为参数asdeclare @sno nchar(15),@sname nchar(20),@sex nchar(2),@age int; --定义declare sp cursor for --说明游标select sno,sname,ssex ,sage from student where sdept = @dept; --查询结果推入缓冲,此时不执行select语句open sp; --打开游标,此时游标指向第一条记录fetch next from sp into @sno,@sname ,@sex ,@age; --推进游标while @@fetch_status = 0 --注:= 0 表示执行成功beginprint @sno+@sname+@sex+convert(nchar,@age)+@dept; --显示fetch next from sp into @sno,@sname ,@sex ,@age; --推进游标endclose sp; --关闭游标deallocate sp; --删除游标------------执行操作:如下----------------exec lookdept 'cs'; --查询计算机系学生记录
执行结果如图r1:
图:r1
3.创建存储过程2 完成……功能,具体代码及运行结果如下图r2 所示。
具体代码2:
--2.统计任意一门课程的成绩分布情况,即按照各分数段统计人数;--drop procedure scoresec --删除存储过程-----------存储过程:如下----------------create procedure scoresec @cname nchar(20) --cname为参数asdeclare @cno nchar(15); --定义变量select @cno=cno --通过课程名,查找课程号from coursewhere cname=@cnameselect @cname 课程名,count(case when grade=60 and grade=70 and grade=80 and grade=90 then 1 end) '90分以上'from scwhere cno = @cnogroup by grade;------------执行操作:如下------------------exec scoresec '数据库'
执行结果如图r2:
图:r2
4.创建存储过程3 完成……功能,具体代码及运行结果如下图r3 所示。
具体代码3:
--3.统计每个学生的平均成绩及排名--drop procedure avgrank --删除存储过程-----------存储过程:如下----------------create procedure avgrankasselect sname 姓名,student.sno 学号,avg(grade) 平均成绩from sc,studentwhere sc.sno = student.sno --名字查询group by sc.sno,sname,student.sno --分组order by 平均成绩desc --降排名------------执行操作:如下------------------exec avgrank
执行结果如图r3:
图:r3
5.创建存储过程4 完成……功能,具体代码及运行结果如下图r4 所示
具体代码4:
--4.将学生选课成绩从百分制改为等级制(即a、b、c、d、e)显示。--drop procedure rank100 --删除存储过程-----------存储过程:如下----------------create procedure rank100asselect sname 姓名,sc.sno 学号,cname 课程名,(casewhen grade=60 and grade=70 and grade=80 and grade=90 then 'a' end) 等级from sc,student,coursewhere sc.sno = student.sno and sc.cno = course.cno --姓名,课程名查询------------执行操作:如下------------------exec rank100
执行结果如图r4:
图:r4
七、实验总结
这2 周来,一直忙忙碌碌于各种事物,数据库作业一直拖到今天早上才开始写。按照作业要求,踏踏实实,一步一步的,将功能全部实现了。功能实现期间,查阅了不少互联网资料,当然课本也来来回回的翻阅了好几遍,没办法,自己实在是弱的可以。期间,主要查阅的关键字sql ,case, when, avg 当然还有游标。完成期间,主要遇到的问题主要是以下几个:
存储结构1:print 不显示任何东西
解决:原来是我游标说明处的select 语句写错了。
错误:
declare sp cursor for --说明游标select @sno,@sname,@ssex ,@sage from student where sdept = @dept; --查询结果推入缓冲,此时不执行select 语句
正确:declare sp cursor for --说明游标select sno,sname,ssex ,sage from student where sdept = @dept; --查询结果推入缓冲,此时不执行select 语句
存储结构2:主要遇到的问题就是代码如何简化问题。我上网搜索了case when等的用法。
主要学习到的内容:(注:以下参考eshizhan的博客园)
case 主要有2种表达形式
1)简单case函数:case sexwhen '1' then '男'when '2' then '女'else '其他' end
2)case搜索函数:casewhen sex = '1' then '男'when sex = '2' then '女'else '其他' end
存储结构3:主要是聚集函数,分组的问题。
由于我想显示姓名,学号,平均分,于是以下代码就出现了:select sname 姓名,student.sno 学号,avg(grade) 平均成绩
问题出现了:分析语句没问题,但是执行语句的时候,老是提示这样的错误“选择列表中的列'student.sname' 无效,因为该列没有包含在聚合函数或group by 子句中。”
解决方法:
于是我分组的时候,将其全部包含进去了,机智啊。group by sc.sno,sname,student.sno --分组
存储结构4:这个基本上没遇到什么问题,很容易。设想与建议:其实,如果有时间,我想做一个界面版的查询~~~还是时间紧得很啊!!!只能等到课设的时候了。另外就是,由于我电脑上面安装的是wps,为了避免用office打开的时候,格式改变影响阅读,我将文档导成.pdf格式,便于阅读。
本报告sql server数据库下载:http://pan.baidu.com/s/1gdabs4n 密码:14io
玉林分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product