[关闭]
@rg070836rg 2016-04-19T11:34:42.000000Z 字数 3531 阅读 1440

数据库12.17实验

数据库实验


  1. 实验十四:T-SQL(12)
  2. 1 实验目的
  3. 1 熟悉数据库的交互式SQL工具。
  4. 2 熟悉通过SQL对数据库进行操作。
  5. 3 完成作业的上机练习。
  6. 2 实验平台
  7. 利用SQLServer及其交互式工具SSMS来熟悉T-SQL
  8. 3 实验内容及要求
  9. 基于studentcoursesc表,用SQL语句实现如下要求,填写实验报告,记录所有的实验用例。
  10. 1)编写一个存储过程,可以查询指定系的学生的选课信息,列出学号、姓名、所在系、课程名和成绩等内容。调用该存储过程,测试执行结果。
  11. 2)编写一个存储过程,返回指定课程的平均分。调用该存储过程,测试执行结果。
  12. 3)编写一个存储过程,可以查询指定系指定成绩等级的学生的选课信息,列出学号、姓名、所在系、课程名和成绩等内容。调用该存储过程,测试执行结果。(成绩等级为优、良、中、及格、不及格,其中成绩在90分到100分之间为‘优’,在80分到89分之间为‘良’,在70分到79分之间为‘中’,在60分到69分之间为‘及格’,在0分到59分之间为‘不及格’。)

-1 建表代码

  1. create database Students
  2. on
  3. primary(name=Students,
  4. filename='D:\test\test.mdf',
  5. size=4mb,
  6. maxsize=10mb,
  7. filegrowth=2mb
  8. )
  9. log on
  10. (name=Studentslog,
  11. filename='D:\test\testlog.ldf',
  12. size=1mb,
  13. maxsize=5mb,
  14. filegrowth=1mb
  15. )
  16. use Students;
  17. create table Student
  18. (
  19. sno char(8) not null primary key,
  20. Sname char(15) null,
  21. Ssex char(4) null,
  22. Sage int null,
  23. Sdept char(10) null
  24. )
  25. create table Course
  26. (
  27. Cno char(6) not null,
  28. Cname char(10),
  29. Cpno char(6),
  30. Ccredit int null,
  31. primary key(cno),
  32. )
  33. go
  34. create table SC
  35. (
  36. Sno char(8) not null foreign key references Student(sno),
  37. Cno char(6) not null foreign key references course(cno),
  38. primary key(Sno,Cno),
  39. Grade int null
  40. )
  41. insert into Student values('19130201','丁鹏','男',20,'Software')
  42. insert into Student values('19130202','王韵婷','女',20,'Software')
  43. insert into Student values('19130203','尹嘉琪','男',18,'Software')
  44. insert into Student values('19130204','卢冬冬','男',20,'Software')
  45. insert into Student values('19130205','史逸凡','男',19,'Software')
  46. insert into Course values('1','数据库',5,4)
  47. insert into Course values('2','数学',null,2)
  48. insert into Course values('3','信息系统',1,4)
  49. insert into Course values('4','操作系统',6,3)
  50. insert into Course values('5','数据结构',7,5)
  51. insert into Course values('6','数据处理',null,2)
  52. insert into Course values('7','PASCAL语言',6,4)
  53. insert into SC values('19130201',1,99)
  54. insert into SC values('19130202',5,95)
  55. insert into SC values('19130203',3,100)
  56. insert into SC values('19130205',1,93)
  57. insert into SC values('19130204',5,92)
  58. alter table course add foreign key(cpno) references course(cno)
  59. select * from Course;
  60. select * from SC;
  61. select * from Student;

0 上课示例

  1. create procedure sp_1(@sdept char(4))
  2. as
  3. begin
  4. select a.sno,a.sname,b.grade
  5. from student a,sc b
  6. where sdept = @sdept
  7. and a.sno=b.sno
  8. end
  9. //调用
  10. execute sp_1 'software'
  1. create proc sp_2(@cno1 char(4),@avge int output)
  2. as
  3. begin
  4. select @avge = avg(grade)
  5. from sc
  6. where cno=@cno1
  7. end
  1. declare @avge1 int
  2. declare @cno2 char(4)
  3. set @cno2='001'
  4. select @cno2='001'
  5. exec sp_2 @cno2,@avge1 output
  6. select @avge1
  1. if @x1>1 and @x1<10
  2. begin
  3. end
  4. else
  5. begin
  6. end

(1)编写一个存储过程,可以查询指定系的学生的选课信息,列出学号、姓名、所在系、课程名和成绩等内容。调用该存储过程,测试执行结果。

  1. create procedure sp_2(@sdept char(20))
  2. as
  3. begin
  4. select a.sno,a.sname,a.sdept,b.cname,c.grade
  5. from Student a,course b,sc c
  6. where a.sno=c.sno
  7. and b.cno=c.cno
  8. and a.sdept=@sdept
  9. end
  10. execute sp_2 'software'

(2)编写一个存储过程,返回指定课程的平均分。调用该存储过程,测试执行结果。

  1. create proc sp_3(@cno1 char(4),@avge int output)
  2. as
  3. begin
  4. select @avge = avg(grade)
  5. from sc
  6. where cno=@cno1
  7. end
  8. declare @avge1 int
  9. declare @cno2 char(4)
  10. set @cno2='3'
  11. exec sp_3 @cno2,@avge1 output
  12. select @avge1

(3)编写一个存储过程可以查询指定系指定成绩等级的学生的选课信息,列出学号、姓名、所在系、课程名和成绩等内容。调用该存储过程,测试执行结果。(成绩等级为优、良、中、及格、不及格,其中成绩在90分到100分之间为‘优’,在80分到89分之间为‘良’,在70分到79分之间为‘中’,在60分到69分之间为‘及格’,在0分到59分之间为‘不及格’。)

  1. create procedure sp_6(@sdept varchar(20),@GradeLevel varchar(6))
  2. as
  3. Declare @SQLText varchar(200),@GradeStr varchar(30)
  4. Set @SQLText=
  5. 'Select S.sno, S.sname, S.Sdept, C.Cname, SC.grade
  6. From Student S
  7. Left Join SC
  8. on S.sno=SC.sno
  9. Left Join Course C
  10. on SC.Cno=C.cno'
  11. Set @GradeStr= Case
  12. When @GradeLevel='优' then 'between 90 And 100'
  13. When @GradeLevel='良' then 'between 80 And 89'
  14. When @GradeLevel='中' then 'between 70 And 79'
  15. When @GradeLevel='及格' then 'between 60 And 69'
  16. When @GradeLevel='不及格' then 'between 0 And 59'
  17. When @GradeLevel IS NULL then 'IS NULL'
  18. Else 'LevelError'
  19. end
  20. IF @GradeStr='LevelError'
  21. print '错误:输入的成绩等级不符合要求!'
  22. Else
  23. Execute(@SQLText+' where Sdept='''+@sdept +''' And Grade '+@GradeStr)
  24. Execute sp_6 'software','优'
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注