MYSQL基础上机练习题(九)用户定义数据类型和用户定义函数的概念、创建及使用方法

实验目标:

1.学习和掌握用户定义数据类型的概念、创建及使用方法。

2.学习和掌握用户定义函数的概念、创建及使用方法。

创建一个数据库,执行shiyan15.sql脚本

一、创建和使用用户定义的函数(此部分内容涉及的数据表包括s,c,sc,t, tc)

1.创建一个标量函数Score_FUN,函数有两个参数分别为学生姓名、课程名,返回该生的对应成绩。利用使用的函数查询学生钱尔的编译原理课程的成绩。回答以下问题:

1) 返回的是一个数据(标量)还是多个数据(表)?

一个数据(标量)

2) 将定义函数和调用函数完成功能的SQL语句描述。

 


 

3) 将调用函数使用EXEC替换为SELECT。

     

2.创建一个内嵌表值函数S_SCORE_FUN,函数有一个参数为学生姓名,返回该学生所有课程的成绩。

1) 返回的是一个数据(标量)还是多个数据(表)?

       多个数据(表

2) 将定义函数和调用函数完成相应功能的SQL语句描述。

 


3.创建一个多语句函数ALL_SCORE_FUN,函数有一个参数为课程名,返回所选择该课程的学生成绩信息,包括:学号SNO、姓名SN、性别SEX、成绩SCORE。将定义函数和调用函数完成相应功能的SQL语句描述。

 


二、在提供的shiyan15.sql中完成以下题目(此部分内容涉及的数据表包括student,course,scourse,teacher,tcourse

shiyan15.sql脚本:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[c](
[cno] [char](2) NOT NULL,
[cn] [char](10) NOT NULL,
[ct] [tinyint] NULL,
PRIMARY KEY CLUSTERED 
(
[cno] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[course]    Script Date: 2017/5/16 10:51:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[course](
[cno] [char](5) NOT NULL,
[cname] [char](20) NOT NULL,
[chour] [tinyint] NULL,
[ccredit] [decimal](18, 2) NULL,
PRIMARY KEY CLUSTERED 
(
[cno] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[s]    Script Date: 2017/5/16 10:51:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[s](
[sno] [char](2) NOT NULL,
[sn] [char](8) NOT NULL,
[sex] [char](2) NULL,
[age] [tinyint] NULL,
[dept] [char](10) NULL,
PRIMARY KEY CLUSTERED 
(
[sno] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[sc]    Script Date: 2017/5/16 10:51:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[sc](
[sno] [char](2) NOT NULL,
[cno] [char](2) NOT NULL,
[score] [tinyint] NULL,
PRIMARY KEY CLUSTERED 
(
[sno] ASC,
[cno] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[scourse]    Script Date: 2017/5/16 10:51:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[scourse](
[sno] [char](6) NOT NULL,
[cno] [char](5) NOT NULL,
[score] [int] NULL,
PRIMARY KEY CLUSTERED 
(
[sno] ASC,
[cno] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[student]    Script Date: 2017/5/16 10:51:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[student](
[sno] [char](6) NOT NULL,
[sname] [char](8) NOT NULL,
[sex] [char](2) NULL,
[age] [tinyint] NULL,
[dept] [char](10) NULL,
PRIMARY KEY CLUSTERED 
(
[sno] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[t]    Script Date: 2017/5/16 10:51:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[t](
[tno] [char](2) NOT NULL,
[tn] [char](8) NOT NULL,
[sex] [char](2) NULL,
[age] [tinyint] NULL,
[prof] [char](10) NULL,
[sal] [smallint] NULL,
[comm] [smallint] NULL,
[dept] [char](10) NULL,
PRIMARY KEY CLUSTERED 
(
[tno] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[tc]    Script Date: 2017/5/16 10:51:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[tc](
[tno] [char](2) NOT NULL,
[cno] [char](2) NOT NULL,
PRIMARY KEY CLUSTERED 
(
[tno] ASC,
[cno] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[tcourse]    Script Date: 2017/5/16 10:51:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[tcourse](
[tno] [char](6) NOT NULL,
[cno] [char](5) NOT NULL,
PRIMARY KEY CLUSTERED 
(
[tno] ASC,
[cno] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[teacher]    Script Date: 2017/5/16 10:51:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[teacher](
[tno] [char](6) NOT NULL,
[tname] [char](8) NOT NULL,
[sex] [char](2) NULL,
[age] [tinyint] NULL,
[prof] [char](10) NULL,
[sal] [smallint] NULL,
[comm] [smallint] NULL,
[dept] [char](10) NULL,
PRIMARY KEY CLUSTERED 
(
[tno] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[c] ([cno], [cn], [ct]) VALUES (N'c1', N'程序设计  ', 60)
INSERT [dbo].[c] ([cno], [cn], [ct]) VALUES (N'c2', N'微机原理  ', 80)
INSERT [dbo].[c] ([cno], [cn], [ct]) VALUES (N'c3', N'数字逻辑  ', 60)
INSERT [dbo].[c] ([cno], [cn], [ct]) VALUES (N'c4', N'数据结构  ', 80)
INSERT [dbo].[c] ([cno], [cn], [ct]) VALUES (N'c5', N'数据库    ', 60)
INSERT [dbo].[c] ([cno], [cn], [ct]) VALUES (N'c6', N'编译原理  ', 60)
INSERT [dbo].[c] ([cno], [cn], [ct]) VALUES (N'c7', N'操作系统  ', 60)
INSERT [dbo].[course] ([cno], [cname], [chour], [ccredit]) VALUES (N'01001', N'计算机基础          ', 60, CAST(3.00 AS Decimal(18, 2)))
INSERT [dbo].[course] ([cno], [cname], [chour], [ccredit]) VALUES (N'01002', N'程序设计            ', 80, CAST(5.00 AS Decimal(18, 2)))
INSERT [dbo].[course] ([cno], [cname], [chour], [ccredit]) VALUES (N'01003', N'微机原理            ', 60, CAST(8.00 AS Decimal(18, 2)))
INSERT [dbo].[course] ([cno], [cname], [chour], [ccredit]) VALUES (N'02001', N'数据库              ', 80, CAST(6.00 AS Decimal(18, 2)))
INSERT [dbo].[course] ([cno], [cname], [chour], [ccredit]) VALUES (N'02002', N'计算机网络          ', 60, CAST(6.00 AS Decimal(18, 2)))
INSERT [dbo].[course] ([cno], [cname], [chour], [ccredit]) VALUES (N'02003', N'数据结构            ', 60, CAST(6.00 AS Decimal(18, 2)))
INSERT [dbo].[course] ([cno], [cname], [chour], [ccredit]) VALUES (N'02004', N'操作系统            ', 60, CAST(6.00 AS Decimal(18, 2)))
INSERT [dbo].[course] ([cno], [cname], [chour], [ccredit]) VALUES (N'03001', N'软件工程            ', 60, CAST(3.00 AS Decimal(18, 2)))
INSERT [dbo].[course] ([cno], [cname], [chour], [ccredit]) VALUES (N'03002', N'大型数据库          ', 48, CAST(2.00 AS Decimal(18, 2)))
INSERT [dbo].[course] ([cno], [cname], [chour], [ccredit]) VALUES (N'03003', N'图像处理            ', 48, CAST(2.00 AS Decimal(18, 2)))
INSERT [dbo].[s] ([sno], [sn], [sex], [age], [dept]) VALUES (N's0', N'王青山  ', N'男', 19, N'计算机    ')
INSERT [dbo].[s] ([sno], [sn], [sex], [age], [dept]) VALUES (N's2', N'钱尔    ', N'男', 18, N'信息      ')
INSERT [dbo].[s] ([sno], [sn], [sex], [age], [dept]) VALUES (N's3', N'张晓明  ', N'男', 18, N'信息      ')
INSERT [dbo].[s] ([sno], [sn], [sex], [age], [dept]) VALUES (N's4', N'李思    ', N'男', 21, N'自动化    ')
INSERT [dbo].[s] ([sno], [sn], [sex], [age], [dept]) VALUES (N's5', N'周武    ', N'男', 19, N'计算机    ')
INSERT [dbo].[s] ([sno], [sn], [sex], [age], [dept]) VALUES (N's6', N'吴丽    ', N'女', 20, N'自动化    ')
INSERT [dbo].[s] ([sno], [sn], [sex], [age], [dept]) VALUES (N's7', N'范思萌  ', N'女', 18, N'信息      ')
INSERT [dbo].[s] ([sno], [sn], [sex], [age], [dept]) VALUES (N's8', N'孙珊    ', N'女', 20, N'信息      ')
INSERT [dbo].[s] ([sno], [sn], [sex], [age], [dept]) VALUES (N's9', N'张海涛  ', N'男', 19, N'信息      ')
INSERT [dbo].[sc] ([sno], [cno], [score]) VALUES (N's0', N'c1', 90)
INSERT [dbo].[sc] ([sno], [cno], [score]) VALUES (N's0', N'c2', 85)
INSERT [dbo].[sc] ([sno], [cno], [score]) VALUES (N's2', N'c1', NULL)
INSERT [dbo].[sc] ([sno], [cno], [score]) VALUES (N's2', N'c5', 67)
INSERT [dbo].[sc] ([sno], [cno], [score]) VALUES (N's2', N'c6', 80)
INSERT [dbo].[sc] ([sno], [cno], [score]) VALUES (N's3', N'c1', 75)
INSERT [dbo].[sc] ([sno], [cno], [score]) VALUES (N's3', N'c2', 70)
INSERT [dbo].[sc] ([sno], [cno], [score]) VALUES (N's3', N'c4', 85)
INSERT [dbo].[sc] ([sno], [cno], [score]) VALUES (N's4', N'c1', 93)
INSERT [dbo].[sc] ([sno], [cno], [score]) VALUES (N's4', N'c2', 85)
INSERT [dbo].[sc] ([sno], [cno], [score]) VALUES (N's4', N'c3', 83)
INSERT [dbo].[sc] ([sno], [cno], [score]) VALUES (N's5', N'c2', 89)
INSERT [dbo].[scourse] ([sno], [cno], [score]) VALUES (N'001201', N'01002', 64)
INSERT [dbo].[scourse] ([sno], [cno], [score]) VALUES (N'991101', N'01001', 88)
INSERT [dbo].[scourse] ([sno], [cno], [score]) VALUES (N'991101', N'01002', 90)
INSERT [dbo].[scourse] ([sno], [cno], [score]) VALUES (N'991102', N'01001', 93)
INSERT [dbo].[scourse] ([sno], [cno], [score]) VALUES (N'991102', N'01002', 98)
INSERT [dbo].[scourse] ([sno], [cno], [score]) VALUES (N'991103', N'01001', 90)
INSERT [dbo].[scourse] ([sno], [cno], [score]) VALUES (N'991103', N'01002', 74)
INSERT [dbo].[scourse] ([sno], [cno], [score]) VALUES (N'991104', N'01001', 35)
INSERT [dbo].[scourse] ([sno], [cno], [score]) VALUES (N'991104', N'01002', 85)
INSERT [dbo].[scourse] ([sno], [cno], [score]) VALUES (N'991104', N'02001', 33)
INSERT [dbo].[scourse] ([sno], [cno], [score]) VALUES (N'991201', N'01001', 76)
INSERT [dbo].[student] ([sno], [sname], [sex], [age], [dept]) VALUES (N'001101', N'宋大方  ', N'男', 19, N'计算机    ')
INSERT [dbo].[student] ([sno], [sname], [sex], [age], [dept]) VALUES (N'001102', N'许辉    ', N'女', 22, N'计算机    ')
INSERT [dbo].[student] ([sno], [sname], [sex], [age], [dept]) VALUES (N'001201', N'王一山  ', N'男', 20, N'计算机    ')
INSERT [dbo].[student] ([sno], [sname], [sex], [age], [dept]) VALUES (N'001202', N'牛莉    ', N'女', 19, N'计算机    ')
INSERT [dbo].[student] ([sno], [sname], [sex], [age], [dept]) VALUES (N'002101', N'李丽丽  ', N'女', 19, N'信息      ')
INSERT [dbo].[student] ([sno], [sname], [sex], [age], [dept]) VALUES (N'002102', N'李王    ', N'男', 20, N'信息      ')
INSERT [dbo].[student] ([sno], [sname], [sex], [age], [dept]) VALUES (N'991101', N'张彬    ', N'男', 18, N'计算机    ')
INSERT [dbo].[student] ([sno], [sname], [sex], [age], [dept]) VALUES (N'991102', N'王蕾    ', N'女', 19, N'计算机    ')
INSERT [dbo].[student] ([sno], [sname], [sex], [age], [dept]) VALUES (N'991103', N'张建国  ', N'男', 18, N'计算机    ')
INSERT [dbo].[student] ([sno], [sname], [sex], [age], [dept]) VALUES (N'991104', N'李平方  ', N'男', 18, N'计算机    ')
INSERT [dbo].[student] ([sno], [sname], [sex], [age], [dept]) VALUES (N'991201', N'陈东辉  ', N'男', 19, N'计算机    ')
INSERT [dbo].[student] ([sno], [sname], [sex], [age], [dept]) VALUES (N'991202', N'葛鹏    ', N'男', 21, N'计算机    ')
INSERT [dbo].[student] ([sno], [sname], [sex], [age], [dept]) VALUES (N'991203', N'潘桃芝  ', N'女', 19, N'计算机    ')
INSERT [dbo].[student] ([sno], [sname], [sex], [age], [dept]) VALUES (N'991204', N'姚一峰  ', N'男', 18, N'计算机    ')
INSERT [dbo].[t] ([tno], [tn], [sex], [age], [prof], [sal], [comm], [dept]) VALUES (N't1', N'李力    ', N'男', 47, N'教授      ', 1800, 3000, N'计算机    ')
INSERT [dbo].[t] ([tno], [tn], [sex], [age], [prof], [sal], [comm], [dept]) VALUES (N't2', N'王平    ', N'女', 28, N'讲师      ', 850, 1200, N'信息      ')
INSERT [dbo].[t] ([tno], [tn], [sex], [age], [prof], [sal], [comm], [dept]) VALUES (N't3', N'刘伟    ', N'男', 30, N'讲师      ', 900, 1200, N'计算机    ')
INSERT [dbo].[t] ([tno], [tn], [sex], [age], [prof], [sal], [comm], [dept]) VALUES (N't4', N'张雪    ', N'女', 51, N'教授      ', 1900, 3000, N'自动化    ')
INSERT [dbo].[t] ([tno], [tn], [sex], [age], [prof], [sal], [comm], [dept]) VALUES (N't5', N'张兰    ', N'女', 39, N'副教授    ', 1300, 2000, N'信息      ')
INSERT [dbo].[tc] ([tno], [cno]) VALUES (N't1', N'c1')
INSERT [dbo].[tc] ([tno], [cno]) VALUES (N't1', N'c4')
INSERT [dbo].[tc] ([tno], [cno]) VALUES (N't2', N'c5')
INSERT [dbo].[tc] ([tno], [cno]) VALUES (N't3', N'c1')
INSERT [dbo].[tc] ([tno], [cno]) VALUES (N't3', N'c5')
INSERT [dbo].[tc] ([tno], [cno]) VALUES (N't4', N'c2')
INSERT [dbo].[tc] ([tno], [cno]) VALUES (N't4', N'c3')
INSERT [dbo].[tc] ([tno], [cno]) VALUES (N't5', N'c5')
INSERT [dbo].[tc] ([tno], [cno]) VALUES (N't5', N'c7')
INSERT [dbo].[tcourse] ([tno], [cno]) VALUES (N'000001', N'01001')
INSERT [dbo].[tcourse] ([tno], [cno]) VALUES (N'000001', N'02001')
INSERT [dbo].[tcourse] ([tno], [cno]) VALUES (N'000002', N'01002')
INSERT [dbo].[tcourse] ([tno], [cno]) VALUES (N'000002', N'01003')
INSERT [dbo].[tcourse] ([tno], [cno]) VALUES (N'000003', N'01003')
INSERT [dbo].[tcourse] ([tno], [cno]) VALUES (N'000003', N'02001')
INSERT [dbo].[tcourse] ([tno], [cno]) VALUES (N'000004', N'02002')
INSERT [dbo].[tcourse] ([tno], [cno]) VALUES (N'000005', N'01001')
INSERT [dbo].[tcourse] ([tno], [cno]) VALUES (N'000006', N'01002')
INSERT [dbo].[tcourse] ([tno], [cno]) VALUES (N'000008', N'02002')
INSERT [dbo].[tcourse] ([tno], [cno]) VALUES (N'000010', N'02003')
INSERT [dbo].[teacher] ([tno], [tname], [sex], [age], [prof], [sal], [comm], [dept]) VALUES (N'000001', N'李英    ', N'女', 39, N'副教授    ', 1500, 2000, N'信息      ')
INSERT [dbo].[teacher] ([tno], [tname], [sex], [age], [prof], [sal], [comm], [dept]) VALUES (N'000002', N'张雪    ', N'女', 51, N'教授      ', 1900, 3000, N'信息      ')
INSERT [dbo].[teacher] ([tno], [tname], [sex], [age], [prof], [sal], [comm], [dept]) VALUES (N'000003', N'张朋    ', N'男', 30, N'讲师      ', 1000, 1200, N'计算机    ')
INSERT [dbo].[teacher] ([tno], [tname], [sex], [age], [prof], [sal], [comm], [dept]) VALUES (N'000004', N'王平    ', N'女', 28, N'讲师      ', 850, 1200, N'信息      ')
INSERT [dbo].[teacher] ([tno], [tname], [sex], [age], [prof], [sal], [comm], [dept]) VALUES (N'000005', N'李力    ', N'男', 47, N'教授      ', 1800, 3000, N'计算机    ')
INSERT [dbo].[teacher] ([tno], [tname], [sex], [age], [prof], [sal], [comm], [dept]) VALUES (N'000006', N'许红霞  ', N'女', 39, N'讲师      ', 1100, 1200, N'计算机    ')
INSERT [dbo].[teacher] ([tno], [tname], [sex], [age], [prof], [sal], [comm], [dept]) VALUES (N'000007', N'许永军  ', N'男', 57, N'教授      ', 2000, 3000, N'计算机    ')
INSERT [dbo].[teacher] ([tno], [tname], [sex], [age], [prof], [sal], [comm], [dept]) VALUES (N'000008', N'李桂青  ', N'女', 65, N'教授      ', 2000, 3000, N'计算机    ')
INSERT [dbo].[teacher] ([tno], [tname], [sex], [age], [prof], [sal], [comm], [dept]) VALUES (N'000009', N'王一凡  ', N'女', 43, N'讲师      ', 1200, 1200, N'计算机    ')
INSERT [dbo].[teacher] ([tno], [tname], [sex], [age], [prof], [sal], [comm], [dept]) VALUES (N'000010', N'田峰    ', N'男', 33, N'助教      ', 500, 800, N'信息      ')
ALTER TABLE [dbo].[sc]  WITH CHECK ADD FOREIGN KEY([cno])
REFERENCES [dbo].[c] ([cno])
GO
ALTER TABLE [dbo].[sc]  WITH CHECK ADD FOREIGN KEY([sno])
REFERENCES [dbo].[s] ([sno])
GO
ALTER TABLE [dbo].[scourse]  WITH CHECK ADD FOREIGN KEY([cno])
REFERENCES [dbo].[course] ([cno])
GO
ALTER TABLE [dbo].[scourse]  WITH CHECK ADD FOREIGN KEY([sno])
REFERENCES [dbo].[student] ([sno])
GO
ALTER TABLE [dbo].[tc]  WITH CHECK ADD FOREIGN KEY([cno])
REFERENCES [dbo].[c] ([cno])
GO
ALTER TABLE [dbo].[tc]  WITH CHECK ADD FOREIGN KEY([tno])
REFERENCES [dbo].[t] ([tno])
GO
ALTER TABLE [dbo].[tcourse]  WITH CHECK ADD FOREIGN KEY([cno])
REFERENCES [dbo].[course] ([cno])
GO
ALTER TABLE [dbo].[tcourse]  WITH CHECK ADD FOREIGN KEY([tno])
REFERENCES [dbo].[teacher] ([tno])
GO

1.用SQL语句描述下面的操作:

1) 使用CREATE语句创建一用户定义的数据类型AgeType。要求:系统数据类型为Tinyint,可为空。

Create type AgeType from tinyint null

Go

2) 设置该数据类型的取值范围0~100。(参考方法:创建一规则设置类型的范围,可采用create rule,并绑定规则至数据类型, 可使用存储过程sp_bindrule)

Create rule ru_agetype as @AgeType between 0 and 100

Go

Exec sp_bindrule ’ru_agetype’,’AgeType’

Go

3) 用该数据类型修改学生表(student)和教师表(teacher)中的年龄字段和选课表中的成绩字段的数据类型。

alter table student

alter column age agetype

alter table student

alter column score agetype

4) 插入一条学生信息,年龄101,其它信息随意,是否正常插入。

2.使用存储过程sp_addtype创建数据类型NameType。要求:系统数据类型为Varchar,长度为10字节,不为空,将该数据类型修改教师名(teacher)、学生名(student)、职称字段(teacher)的数据类型。将相应的SQL语句描述。

Exec sp_addtype NameType,’varchar(10)’,’not null’

3.用SQL语句描述下面的操作

1) 创建一个标量函数,要求:根据学生姓名查询该生所有课程的总成绩。

2) 调用创建的函数查询张建国的总分情况,若有此人,则显示该生总分,若无此人,则显示该生没有选修课程。

创建函数:

create function score_fun(@sname char(10))

returns tinyint

as

begin

  declare @totalscore tinyint

  select @totalscore=sum(score)

  from student,scourse

  where student.sno=scourse.sno and student.sname=@sname

  return(@totalscore)

End

调用函数:

declare @s_score tinyint

exec @s_score=score_fun '张建国'

if @s_score>0

print '张建国的总成绩是'+ltrim(str(@s_score))

else

print '此学生没选修课程'

4.用SQL语句描述下面的操作

1) 创建一内嵌表值函数,要求:根据教师姓名查询该教师所教课程名、学生人数、平均成绩、最高成绩、最低成绩。(涉及的表teacher,tcourse,course,scourse)

2) 调用函数,查询李英老师所教课程名、学生人数、平均成绩、最高成绩、最低成绩。结果如下图所示。

 

创建函数:

create function t_sc_fun(@tname char(10))

returns table

as

 return(select cname as 课程名,count(sno)as 学生人数,avg(score) as 平均成绩,

 max(score)as 最高成绩,min(score) as 最低成绩

 from teacher,tcourse,course,scourse

 where teacher.tno=tcourse.tno and course.cno=tcourse.cno and scourse.cno=tcourse.cno and tname=@tname

 group by cname)

 go

调用函数:

 declare @tname char(10)

 select * from t_sc_fun('李英')

5.用SQL语句描述下面的操作

1) 创建一函数,要求:统计各系各职称的总人数、男女人数、平均年龄(涉及的表teacher)。

2) 调用函数,查询计算机系讲师的总人数、男女人数、平均年龄。如下图所示。

 

创建函数:

create function T_prof_fun(@dept char(10),@prof char(10))

returns @T_prof_table table(

职称 char(10),

人数 tinyint,

男性人数 tinyint,

女性人数 tinyint,

平均年龄 tinyint)

as

begin

  declare @man tinyint,@female tinyint

  insert @T_prof_table

  select prof,count(tno),man=(select count(*) as man from teacher where @prof=prof and @dept=dept and sex=''),

  man=(select count(*) as female from teacher where @prof=prof and @dept=dept and sex=''),

  avg(age) as 平均年龄

  from teacher

  where @prof=prof and @dept=dept

  group by prof

  return

  end

go

调用函数:

select * from T_prof_fun('计算机','讲师')


猜你喜欢

转载自blog.csdn.net/weixin_42442713/article/details/80959050
今日推荐