您的位置:首页 > 数据库

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')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql server 数据库