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 [email protected]
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 [email protected]
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('计算机','讲师')