Day 9:(12)用户定义函数实训参考答案
2015-11-23 00:01
441 查看
-- 用户定义函数实训参考答案:
-- 准备工作:
create table stu_info
(
t_number char(8),
t_name varchar(10),
t_gender char(2),
t_birthday datetime
)
create table course
(
c_number char(6),
c_name varchar(20),
c_credit int,
c_hour int,
c_teacher varchar(10)
)
create table exam
(
t_number char(8),
c_number char(6),
t_grade decimal(5,2)
)
--向stu_info表插入数据
insert into stu_info values('20040301','张华','女','19840113')
insert into stu_info values('20040302','王立','男','19830624')
insert into stu_info values('20040303','蒋超','男','19841115')
insert into stu_info values('20040304','王浩雨','男','19851020')
insert into stu_info values('20040305','张静','女','19840418')
insert into stu_info values('20050301','李华','女','19830113')
insert into stu_info values('20050302','张立','男','19840624')
insert into stu_info values('20050303','黄超','男','19851125')
insert into stu_info values('20050304','汪雨','男','19861020')
insert into stu_info values('20050305','王静','女','19850418')
--向course表插入数据
insert into course values('100101','高等数学',2,60,'赵金')
insert into course values('100102','大学英语',3,80,'王维')
insert into course values('100103','大学物理',2,60,'李华')
insert into course values('100104','大学英语',4,80,'刘杰')
insert into course values('100105','大学英语',NULL,80,'刘杰')
--向exam表插入数据
insert into exam values('20040301','100101',79)
insert into exam values('20040301','100102',88)
insert into exam values('20040302','100101',90)
insert into exam values('20040302','100103',75)
insert into exam values('20040303','100101',79)
insert into exam values('20040303','100102',75)
insert into exam values('20040303','100103',95)
insert into exam values('20040304','100102',43)
insert into exam values('20040304','100103',68)
insert into exam values('20040305','100101',64)
insert into exam values('20040305','100102',87)
insert into exam values('20040305','100103',92)
-- 1. 编写用户定义函数dbo.FN_grade,要求根据学生学号、课程号查找出考试成绩。
-- 并调用函数查看学号为20040301、课程号为100101的成绩。
CREATE FUNCTION dbo.FN_grade(@t_num char(8),@c_num char(6))
RETURNS decimal(5,2)
AS
BEGIN
DECLARE @grade decimal(5,2)
SET @grade=(SELECT t_grade FROM exam WHERE t_number=@t_num and c_number=@c_num)
RETURN @grade
END
-- 通过该函数,查找学号为20040301、课程号为100101的成绩
SELECT dbo.FN_grade('20040301','100102') AS '成绩'
-- 2. 编写用户定义函数dbo.FN_stuExistsOrNot。要求根据学生编号查找出该用户是否存在,如果存在 则返回 1;如果不存在 则返回 0
-- 并分别调用函数查看'20040301'、'20040309'结果。
CREATE FUNCTION dbo.FN_stuExistsOrNot(@t_number char(8))
RETURNS int
AS
BEGIN
DECLARE @result int
IF EXISTS(SELECT t_number FROM stu_info WHERE t_number=@t_number)
SET @result = 1
ELSE
SET @result = 0
RETURN @result
END
-- 通过该函数,查找编号为20040301的用户是否存在
SELECT dbo.FN_stuExistsOrNot('20040301') AS '该用户'
-- 3. 编写用户定义函数dbo.FN_search_grade1,要求根据学生编号得到该学生的学生编号和各科考试成绩。
-- 并调用函数查看学号为20040301的考试成绩
-- 编写用户定义函数
CREATE FUNCTION dbo.FN_search_grade1(@t_number varchar(10))
RETURNS TABLE
AS
RETURN (SELECT t_number,c_number,t_grade FROM exam WHERE t_number=@t_number)
-- 执行该用户定义函数,查找名称为'20040301'的用户的信息的程序为:
SELECT * from dbo.FN_search_grade1('20040301')
-- 4. 编写用户定义函数dbo.FN_search_grade2,要求根据学生姓名得到该学生的学生姓名和各科考试成绩。
-- 并调用函数查看学生姓名为张华的考试成绩
-- 编写用户定义函数
CREATE FUNCTION dbo.FN_search_grade2(@t_name varchar(10))
RETURNS TABLE
AS
RETURN (SELECT s.t_name,e.c_number,e.t_grade FROM exam as e,stu_info as s WHERE (s.t_number=e.t_number and t_name=@t_name))
-- 执行该用户定义函数,查找名称为'张华'的用户的信息的程序为:
SELECT * from dbo.FN_search_grade2('张华')
-- 5. 编写用户定义函数dbo.FN_avg_grade。要求根据学生编号得到每个学生的学生编号以及该学生的平均分。
-- 并调用函数查看查找每个学生的平均分。
-- 查找学生平均分的程序为:
CREATE FUNCTION dbo.FN_avg_grade()
RETURNS TABLE
AS
RETURN (SELECT t_number,avg(t_grade)as avggrade FROM exam group by t_number)
-- 查找每个学生的平均分:
SELECT * from dbo.FN_avg_grade()
-- 6. 编写用户定义函数dbo.FN_get_stu。要求输入学生编号、输出该学生的编号、姓名、出生年月信息。
-- 并分别调用函数查看'20040301'、'20040309'结果。
CREATE FUNCTION dbo.FN_get_stu1(@t_number char(8))
RETURNS @result TABLE(t_number char(8),t_name varchar(10),t_birthday datetime)
AS
BEGIN
INSERT INTO @result SELECT t_number,t_name,t_birthday FROM stu_info where t_number=@t_number
RETURN
END
-- 通过该函数用户编号为'20040301'的信息
SELECT * from dbo.FN_get_stu1('20040301')
-- 通过该函数用户编号为'20040309'的信息
SELECT * from dbo.FN_get_stu1('20040309')
-- 7. 编写用户定义函数。要求输入用户编号、判断该用户是否存在,
-- 如果存在,输出该学生的编号、姓名、出生年月;如果不存在,输出 '该人员不存在'
-- 并分别调用函数查看'20040301'、'20040309'结果。
CREATE FUNCTION dbo.FN_get_stu2(@t_number char(8))
RETURNS @result TABLE(t_number char(8),t_name varchar(10),t_birthday datetime,msg varchar(20))
AS
BEGIN
IF dbo.FN_stuExistsOrNot(@t_number) = 1
INSERT INTO @result SELECT t_number,t_name,t_birthday,'' FROM stu_info where t_number=@t_number
ELSE
INSERT INTO @result(msg) values('该人员不存在')
RETURN
END
-- 通过该函数用户编号为'20040301'的信息
SELECT * from dbo.FN_get_stu2('20040301')
-- 通
4000
过该函数用户编号为'20040309'的信息
SELECT * from dbo.FN_get_stu2('20040309')
-- 准备工作:
create table stu_info
(
t_number char(8),
t_name varchar(10),
t_gender char(2),
t_birthday datetime
)
create table course
(
c_number char(6),
c_name varchar(20),
c_credit int,
c_hour int,
c_teacher varchar(10)
)
create table exam
(
t_number char(8),
c_number char(6),
t_grade decimal(5,2)
)
--向stu_info表插入数据
insert into stu_info values('20040301','张华','女','19840113')
insert into stu_info values('20040302','王立','男','19830624')
insert into stu_info values('20040303','蒋超','男','19841115')
insert into stu_info values('20040304','王浩雨','男','19851020')
insert into stu_info values('20040305','张静','女','19840418')
insert into stu_info values('20050301','李华','女','19830113')
insert into stu_info values('20050302','张立','男','19840624')
insert into stu_info values('20050303','黄超','男','19851125')
insert into stu_info values('20050304','汪雨','男','19861020')
insert into stu_info values('20050305','王静','女','19850418')
--向course表插入数据
insert into course values('100101','高等数学',2,60,'赵金')
insert into course values('100102','大学英语',3,80,'王维')
insert into course values('100103','大学物理',2,60,'李华')
insert into course values('100104','大学英语',4,80,'刘杰')
insert into course values('100105','大学英语',NULL,80,'刘杰')
--向exam表插入数据
insert into exam values('20040301','100101',79)
insert into exam values('20040301','100102',88)
insert into exam values('20040302','100101',90)
insert into exam values('20040302','100103',75)
insert into exam values('20040303','100101',79)
insert into exam values('20040303','100102',75)
insert into exam values('20040303','100103',95)
insert into exam values('20040304','100102',43)
insert into exam values('20040304','100103',68)
insert into exam values('20040305','100101',64)
insert into exam values('20040305','100102',87)
insert into exam values('20040305','100103',92)
-- 1. 编写用户定义函数dbo.FN_grade,要求根据学生学号、课程号查找出考试成绩。
-- 并调用函数查看学号为20040301、课程号为100101的成绩。
CREATE FUNCTION dbo.FN_grade(@t_num char(8),@c_num char(6))
RETURNS decimal(5,2)
AS
BEGIN
DECLARE @grade decimal(5,2)
SET @grade=(SELECT t_grade FROM exam WHERE t_number=@t_num and c_number=@c_num)
RETURN @grade
END
-- 通过该函数,查找学号为20040301、课程号为100101的成绩
SELECT dbo.FN_grade('20040301','100102') AS '成绩'
-- 2. 编写用户定义函数dbo.FN_stuExistsOrNot。要求根据学生编号查找出该用户是否存在,如果存在 则返回 1;如果不存在 则返回 0
-- 并分别调用函数查看'20040301'、'20040309'结果。
CREATE FUNCTION dbo.FN_stuExistsOrNot(@t_number char(8))
RETURNS int
AS
BEGIN
DECLARE @result int
IF EXISTS(SELECT t_number FROM stu_info WHERE t_number=@t_number)
SET @result = 1
ELSE
SET @result = 0
RETURN @result
END
-- 通过该函数,查找编号为20040301的用户是否存在
SELECT dbo.FN_stuExistsOrNot('20040301') AS '该用户'
-- 3. 编写用户定义函数dbo.FN_search_grade1,要求根据学生编号得到该学生的学生编号和各科考试成绩。
-- 并调用函数查看学号为20040301的考试成绩
-- 编写用户定义函数
CREATE FUNCTION dbo.FN_search_grade1(@t_number varchar(10))
RETURNS TABLE
AS
RETURN (SELECT t_number,c_number,t_grade FROM exam WHERE t_number=@t_number)
-- 执行该用户定义函数,查找名称为'20040301'的用户的信息的程序为:
SELECT * from dbo.FN_search_grade1('20040301')
-- 4. 编写用户定义函数dbo.FN_search_grade2,要求根据学生姓名得到该学生的学生姓名和各科考试成绩。
-- 并调用函数查看学生姓名为张华的考试成绩
-- 编写用户定义函数
CREATE FUNCTION dbo.FN_search_grade2(@t_name varchar(10))
RETURNS TABLE
AS
RETURN (SELECT s.t_name,e.c_number,e.t_grade FROM exam as e,stu_info as s WHERE (s.t_number=e.t_number and t_name=@t_name))
-- 执行该用户定义函数,查找名称为'张华'的用户的信息的程序为:
SELECT * from dbo.FN_search_grade2('张华')
-- 5. 编写用户定义函数dbo.FN_avg_grade。要求根据学生编号得到每个学生的学生编号以及该学生的平均分。
-- 并调用函数查看查找每个学生的平均分。
-- 查找学生平均分的程序为:
CREATE FUNCTION dbo.FN_avg_grade()
RETURNS TABLE
AS
RETURN (SELECT t_number,avg(t_grade)as avggrade FROM exam group by t_number)
-- 查找每个学生的平均分:
SELECT * from dbo.FN_avg_grade()
-- 6. 编写用户定义函数dbo.FN_get_stu。要求输入学生编号、输出该学生的编号、姓名、出生年月信息。
-- 并分别调用函数查看'20040301'、'20040309'结果。
CREATE FUNCTION dbo.FN_get_stu1(@t_number char(8))
RETURNS @result TABLE(t_number char(8),t_name varchar(10),t_birthday datetime)
AS
BEGIN
INSERT INTO @result SELECT t_number,t_name,t_birthday FROM stu_info where t_number=@t_number
RETURN
END
-- 通过该函数用户编号为'20040301'的信息
SELECT * from dbo.FN_get_stu1('20040301')
-- 通过该函数用户编号为'20040309'的信息
SELECT * from dbo.FN_get_stu1('20040309')
-- 7. 编写用户定义函数。要求输入用户编号、判断该用户是否存在,
-- 如果存在,输出该学生的编号、姓名、出生年月;如果不存在,输出 '该人员不存在'
-- 并分别调用函数查看'20040301'、'20040309'结果。
CREATE FUNCTION dbo.FN_get_stu2(@t_number char(8))
RETURNS @result TABLE(t_number char(8),t_name varchar(10),t_birthday datetime,msg varchar(20))
AS
BEGIN
IF dbo.FN_stuExistsOrNot(@t_number) = 1
INSERT INTO @result SELECT t_number,t_name,t_birthday,'' FROM stu_info where t_number=@t_number
ELSE
INSERT INTO @result(msg) values('该人员不存在')
RETURN
END
-- 通过该函数用户编号为'20040301'的信息
SELECT * from dbo.FN_get_stu2('20040301')
-- 通
4000
过该函数用户编号为'20040309'的信息
SELECT * from dbo.FN_get_stu2('20040309')
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle 数据库 临时数据的处理方法
- 数据库分页查询语句数据库查询
- 最近比较流行的数据库挂马
- Oracle 手动创建数据库步骤详解
- 分割超大Redis数据库例子