存储过程、触发器和用户自定义函数实验

实验内容一

练习教材中存储过程、触发器和用户自定义函数的例子。教材中的BookSales数据库,在群共享中,文件名为BookSales.bak。

实验内容二

针对附件1中的教学活动数据库,完成下面的实验内容。

1、存储过程

(1)创建一个存储过程,该存储过程统计“高等数学”的成绩分布情况,即按照各分数段统计人数。

CREATE Proc MATH_NUM @MATH CHAR(20)='高等数学'
AS
SELECT @MATH as canme,
count(case when score>=90 then 1 end)as[90以上],
 count(case when score>=80 and score<90 then 1 end)as[80-90],
count(case when score>=70 and score<80 then 1 end)as[70-80],
count(case when score>=60 and score<70 then 1 end)as[60-70],
count(case when score<60 then 1 end)as[60以下] FROM study,course
WHERE study.cno=course.cno and course.cname=@MATH
GROUP BY course.cname

(2)创建一个存储过程,该存储过程有一个参数用来接收课程号,该存储过程统计给定课程的平均成绩。

CREATE Proc AVG_SCORE @cno CHAR(20)
AS
SELECT @cno as 课程号,course.cname as 课程名,STR(AVG(score),5,2) as 平均成绩
FROM study,course
WHERE study.cno=course.cno and course.cno=@cno
GROUP BY course.cname

(3)创建一个存储过程,该存储过程将学生选课成绩从百分制改为等级制(即 A、B、C、D、E)。

CREATE Proc SCORE_CHANGE
AS
SELECT course.cname as 课程名,study.sno as 学号,study.cno as 课程号,study.score as 成绩,
case
when score>=90 and score<=100 then'A'
when score>=80 and score<90 then'B'
when score>=70 and score<80 then'C'
when score>=60 and score<70 then'D'
when score<60 then'E'
end as '等级'
from study,course
where study.cno=course.cno

(4)创建一个存储过程,该存储过程有一个参数用来接收学生姓名,该存储过程查询该学生的学号以及选修课程的门数。

CREATE Proc STUDENT_STUDY @name varchar(20)
AS
select @name as 姓名,study.sno as 学号,count(cno) as 选修门数
from study,student
where study.sno=student.sno and sname=@name
group by study.sno

(5)创建一个存储过程,该存储过程有两个输入参数用来接收学号和课程号,一个输出参数用于获取相应学号和课程号对应的成绩。

CREATE Proc STU_COR_SCORE @sno varchar(20),@cno char(20),@word smallint output
 AS
select @word=score
from study
where sno=@sno and cno=@cno





实验数据库说明

教学活动数据库包括student、course和study三个基本表,三个基本表的结构说明和数据如下:

(1)学生表(student)

学生表的结构

列名

数据类型

长度

是否允许为空值

字段说明

sno

char

5

NO

学号

sname

char

8

NO

姓名

age

smallint

年龄

sex

nchar

1

性别

说明:sno为主键,age的范围为15~35之间,sex只能为“男”或“女”。

CREATE TABLE student ( 
age smallint check (age >= 15 and age <= 35), 
sex varchar(20) check (sex in('男','女')) --性别
sno varchar(20) PRIMARY KEY not null, 
sname varchar(20) not null, --姓名 
 )

insert into student values( '98601' ,'李强',20,'男')
insert into student values( '98602', '刘丽', 21, '男'); 
insert into student values( '98603', '张兵', 20, '男'); 
insert into student values( '98604', '陈志坚', 22, '男');
 insert into student values( '98605', '王颖', 21,'男');

学生表的记录

sno

sname

age

sex

98601

李强

20

98602

刘丽

21

98603

张兵

20

98604

陈志坚

22

98605

王颖

21

 

(2)课程表(course)

课程表的结构

列名

数据类型

长度

是否允许为空值

说明

cno

char

4

NO

课程号

cname

char

20

NO

课程名

teacher

char

8

任课教师

说明:cno为主键。

create table course
(
cno char(20) not null primary key, --课程编号 
cname char(20) not null ,--课程名称
teacher char(20)
)

insert into course
values(
'C601', '高等数学','周振兴')
insert into course
values(
'C602',' 数据结构','刘建平')
insert into course
values(
'C603', '操作系统','刘建平')
insert into course
values(
'C604', '编译原理','王志伟')

课程表的记录

cno

cname

teacher

C601

高等数学

周振兴

C602

数据结构

刘建平

C603

操作系统

刘建平

C604

编译原理

王志伟

 

 

(3)选课表(study)




create table study
 (
sno varchar(20) not null ,--学生学号 
cno char(20), --上课编号 
score smallint ,
primary key(sno,cno),
foreign key(sno) references student(sno),
foreign key(cno) references course(cno)
 )



insert into study
values
('98601','C601',90)

insert into study
values(
'98601','C602', 90)
insert into study
values(
'98601', 'C603',85)
insert into study
values(
'98601', 'C604',87)
insert into study
values(
'98602', 'C601',90)
insert into study
values(
'98603', 'C601',75)
insert into study
values(
'98603', 'C602',70)
insert into study
values(
'98603', 'C604',56)
insert into study
values(
'98604', 'C601',90)
insert into study values(
'98604', 'C604',85)
insert into study 
values(
'98605','C601', 95)
insert into study
values(
'98605', 'C603',80)


选课表的结构

列名

数据类型

长度

是否允许为空值

说明

sno

char

5

NO

学号

cno

char

4

NO

课程号

score

smallint

成绩

说明:sno和cno为主键,sno为外键(参照student表的sno),cno为外键(参照course表的cno),score的范围为0~100之间。

 

选课表的记录

sno

cno

score

98601

C601

90

98601

C602

90

98601

C603

85

98601

C604

87

98602

C601

90

98603

C601

75

98603

C602

70

98603

C604

56

98604

C601

90

98604

C604

85

98605

C601

95

98605

C603

80

存储过程、触发器和用户自定义函数实验 (存储过程)相关推荐

  1. JDBC使用总结:增删改查、调用存储过程、执行存储函数、存储过程与存储函数区别分析

    JDBC(Java Database Connectivity):Java访问数据库的解决方案. JDBC只定义接口,具体实现由各个数据库厂商负责. 原生jdbc技术的使用基本都是模板式的开发,基本格 ...

  2. mysql调用java函数_mysql概要(十五)存储过程(2)(java调用函数和存储过程)

    使用存储过程的目的: 即将数据的函数处理放在数据库,这样主要是为了,多语言跨平台的使用(java,.net,php),不用重复的函数代码,直接调用存储过程. (对于使用存储过程还是代码来处理数据的效率 ...

  3. SQL Server 2005 用户自定义函数

    (<SQL Server 2005 编程入门经典> 第13章) 用户自定义函数和存储过程非常相似,但它们也有一些行为和能力的区别. 13.1 UDF的定义 用户自定义函数是有序的T-SQL ...

  4. sql server 2008学习11 UDF用户自定义函数

    用户自定义函数  和存储过程是类似的, 是一组 有序的t-sql语句,udf被 预先优化和编译,并且可以作为一个单元来进行调用. 使用存储过程 时 可传入参数,传出参数.可以返回值,不过该值用于指示成 ...

  5. db2自定义函数能返回几个参数_DB2 用户自定义函数

    用户自定义函数 DB2 内部提供了大量的函数,例如求某个字段最大值的 MAX() 函数,求某个日期所在年份的 YEAR() 函数,等等.如果在使用 DB2 的过程中,需要反复使用同一个功能,就可以把这 ...

  6. jpa 自定义sql if_跟飞哥学编程:SQL入门-:函数、存储过程和触发器

    最后不要忘记:SQL是一种结构化(Structured)的语言(Language),所以它具有 编程语言的特性 声明变量和赋值 所谓变量,可以是看成一个存储数据的容器,所有它里面存储的值是可以变化的. ...

  7. MySQL学习记录 (五) ----- 存储函数、存储过程和触发器

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  8. 视图、存储函数、存储过程、触发器:MySQL系列之五

    一.视图 视图:VIEW,虚表,保存有实表的查询结果,实际数据不保存在磁盘 物化视图:实际数据在磁盘中有保存,加快访问,MySQL不支持物化视图 基表:视图依赖的表 视图中的数据事实上存储于" ...

  9. Oracle(四):PL/SQL、存储函数、存储过程、触发器

    一.PL/SQL (一)什么是 PL/SQL PL/SQL(Procedure Language/SQL)是 Oracle 对 sql 语言的过程化扩展,指 在 SQL 命令语言中增加了过程处理语句( ...

最新文章

  1. acm经典题Mark
  2. 大数据为何让传统银行焦虑?
  3. OSG+VS2010+win7环境搭建---OsgEarth编译
  4. python的数值类型_Python的数值类型
  5. mysql-installer-community-5.5.29.0.msi 下载
  6. 剑指offer之使数组的奇数在偶数前面
  7. react学习笔记10:显示隐藏效果和tab切换效果
  8. 精英主板bios_各品牌主板和品牌电脑启动项与bios启动键大全!!值得收藏
  9. 【笔记】mac os命令行编译objective-c
  10. Web CAD SDK 14.1 Crack
  11. 分布式系统的容错性(一)——容错性简介
  12. 微信小程序中使用阿里(iconfont)字体图标
  13. java鼠标点击按钮事件_Java学习——GUI编程(鼠标单击按钮事件)
  14. android PMU
  15. 为何越来越多的人想离婚?越来越多的人不想结婚?
  16. x50pro怎么升级鸿蒙系统,被央视点赞的vivo X50 Pro拍照如何?实测告诉你
  17. 判断页面是否在微信或者企业微信环境下
  18. 远程桌面端口映射如何设置
  19. Spring Boot 项目鉴权的 4 种方式
  20. 全网唯一OpenCyphal/UAVCAN教程(10)canfd协议详解

热门文章

  1. 关于计算机网络原理的学习(一)概论
  2. 第5期:大学生入职必备技能之二
  3. 「新数据」太棘手,向量数据库来帮忙!《新程序员》刊登 Zilliz 长文解读
  4. 程序员三十而立,应如何选择才能继续将技术路线走下去?
  5. 最近3年重要网络安全厂商并购案
  6. 抖音黑客帝国代码雨——程序大神如何攻占抖音?简直不可思议!
  7. 蒙纳士大学计算机类,蒙纳士大学计算机专业优势
  8. 样本方差的简化计算公式
  9. Linux数据盘和系统盘的查看
  10. Linux 虚拟内存 swap