当前位置:   article > 正文

存储过程_创建一个存储过程,查询成绩表中个人平均成绩小于总体平均成绩的学生记录。

创建一个存储过程,查询成绩表中个人平均成绩小于总体平均成绩的学生记录。

Create Procedure

编写存储过程 proc_avgage , 向客户端返回每个系的学生的平均年龄

  1. create proc proc_avgage
  2. as
  3. select sdept,AVG(Sage) avg_age
  4. from Student
  5. group by Sdept

      


编写存储过程 proc_comp , 比较数据库和操作系统两门课程的平均分的高低,并输出: XXX课程的平均分高

数据库内没有这两门课,以计算机文化学课程与高等数学课程代替

  1. create proc proc_comp
  2. as
  3. if((select AVG(grade) from TSC join Course on TSC.Cno=Course.Cno
  4. where Cname='计算机文化学'
  5. group by TSC.Cno)>(select AVG(grade) from TSC join Course on TSC.Cno=Course.Cno
  6. where Cname='高等数学'
  7. group by TSC.Cno))
  8. print'计算机文化学课程的平均分高'
  9. else
  10. print'高等数学课程的平均分高'


创建存储过程 proc_student_info,用于检索你本人的学生数据

  1. create proc proc_student_info
  2. as
  3. select *
  4. from Student
  5. where Sno='1508100201'
 


分别执行上面的存储过程

 

Procedure w/ Parameters

修改 proc_comp,分别将两门课程的课程号作为输入参数,比较这两门课的平均分的高低,输出:

– XXX 课程的平均分高


  1. alter proc proc_comp
  2. @cname1 nvarchar(20),@cname2 nvarchar(20)
  3. as
  4. if((select AVG(grade) from TSC join Course on TSC.Cno=Course.Cno
  5. where Cname=@cname1
  6. group by TSC.Cno)>(select AVG(grade) from TSC join Course on TSC.Cno=Course.Cno
  7. where Cname=@cname2
  8. group by TSC.Cno))
  9. print @cname1+'课程的平均分高'
  10. else
  11. print @cname2+'课程的平均分高'


修改 proc_student_info ,使之可检索指定学号的学生数据,执行上面的存储过程,输入参数为你本人的学号

  1. alter proc proc_student_info
  2. @sno varchar(20)
  3. as
  4. select *
  5. from Student
  6. where Sno=@sno
              

创建存储过程 proc_student_avg,计算指定学生(学号)平均成绩,并将该平均成绩通过参数输出

– 执行该存储过程,输入参数为你本人的学号

  1. create proc proc_student_avg
  2. @sno varchar(20),@avg_grade float output
  3. as
  4. select @avg_grade=AVG(grade)
  5. from TSC
  6. where Sno=@sno
  7. group by Sno

 

由于本人所有成绩为空,没有任何输出,故用其他同学代替

 

修改上面的存储过程,根据平均成绩填写评语,如果平均分>60,评语为“合格”,否则评语为“不合格”,将评语写入Student表的comment列当中

 – 调用上述存储过程,为你自己的学号添加评语

– 提示:先对Student表添加“评语(comment)” 列


  1. alter proc proc_student_avg
  2. @sno varchar(20)
  3. as
  4. if((select AVG(grade)
  5. from TSC
  6. where Sno=@sno
  7. group by Sno)>=60)
  8. update Student
  9. set comment='及格'
  10. where Sno=@sno
  11. else
  12. update Student
  13. set comment='不及格'
  14. where Sno=@sno
       

  

Cursor

列出每个系的学生信息

首先列出一个系的系名

然后在该系名下列出本系学生的姓名和性别

直至列出全部系

  1. declare @sdept nchar(20)
  2. declare @sdept1 nchar(20)
  3. declare @name nchar(5)
  4. declare @sex nchar(1)/*声明变量*/
  5. declare cur_temp1 cursor
  6. static for select sdept from student
  7. where sdept<>'cs' group by sdept/*声明游标*/
  8. declare cur_temp2 cursor
  9. static for select sname,ssex,sdept from student
  10. where sdept<>'cs' /*游标*/
  11. open cur_temp1 --打开游标
  12. FETCH NEXT FROM cur_temp1 INTO @sdept1 --取出游标值
  13. while @@FETCH_STATUS=0
  14. begin
  15. print @sdept1
  16. print '姓名 '+'性别'
  17. open cur_temp2 --打开游标
  18. FETCH NEXT FROM cur_temp2 INTO @name,@sex,@sdept --取出游标值
  19. while @@FETCH_STATUS=0
  20. begin
  21. if(@sdept1=@sdept)
  22. begin
  23. print @name+' '+@sex
  24. end
  25. FETCH NEXT FROM cur_temp2 INTO @name,@sex,@sdept --循环取出游标的值
  26. end
  27. print' '
  28. close cur_temp2 --关闭游标
  29. FETCH NEXT FROM cur_temp1 INTO @sdept1 --循环取出游标的值
  30. end
  31. --关闭游标
  32. close cur_temp1
  33. --释放游标
  34. deallocate cur_temp1
  35. deallocate cur_temp2

                      




声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/783896
推荐阅读
相关标签
  

闽ICP备14008679号