SQL server 13编程基础(2) 函数

IF EXISTS (SELECT name FROM SYS.DATABASES WHERE name='学生选课')
    DROP DATABASE 学生选课
GO
CREATE DATABASE 学生选课
GO
USE 学生选课
-- DROP TABLE SC,course,student
-- DROP TABLE course
GO

--创建教师表
CREATE TABLE Teacher(
Tno CHAR(3) NOT NULL PRIMARY KEY,
Tname VARCHAR(10) NOT NULL,
Tsex CHAR(2),
Sbirthday DATE,
Prof VARCHAR(6),
Tdept VARCHAR(10)
)
GO

--创建学生表
CREATE TABLE Student(
Sno CHAR(5) NOT NULL PRIMARY KEY,
Sname VARCHAR(10) NOT NULL,
Ssex CHAR(2),
Sage TINYINT,
Sdept VARCHAR(10)
)
GO

--创建课程表
CREATE TABLE Course(
Cno CHAR(3) NOT NULL PRIMARY KEY,
Cname VARCHAR(20) NOT NULL,
Cpno CHAR(3),
Credit TINYINT,
Semester TINYINT,
Tno CHAR(3)
)
GO

--创建选课表
CREATE TABLE SC(
Sno CHAR(5) NOT NULL,
Cno CHAR(3) NOT NULL,
Grade INT
)
GO

-- 插入教师表数据
-- SP_HELP Teacher
INSERT INTO Teacher 
VALUES ('104','李诚','男','1958/12/2','副教授','计算机系')
,('256','张旭','男','1969/3/12','讲师','数学系')
,('125','王萍','女','1972/5/5','助教','计算机系')
,('331','刘冰','女','1977/8/14','助教','信息系')
GO    
-- SELECT * FROM Teacher

-- 插入学生表数据
-- SP_HELP Student
INSERT INTO Student 
VALUES('95001','刘超华','男',22,'计算机系')
,('95002','刘晨','女',21,'信息系')
,('95003','王敏','女',20,'数学系')
,('95004','张海','男',23,'数学系')
,('95005','陈平','男',21,'数学系')
,('95006','陈斌斌','男',28,'数学系')
,('95007','刘德虎','男',24,'数学系')
,('95008','刘宝祥','男',22,'计算机系')
,('95009','吕翠花','女',26,'计算机系')
,('95010','马盛','男',23,'数学系')
,('95011','吴霞','男',22,'计算机系')
,('95012','马伟','男',22,'数学系')
,('95013','陈冬','男',18,'信息系')
,('95014','李小鹏','男',22,'计算机系')
,('95015','王娜','女',23,'信息系')
,('95016','胡萌','女',23,'计算机系')
,('95017','徐晓兰','女',21,'计算机系')
,('95018','牛川','男',22,'信息系')
,('95019','孙晓慧','女',23,'信息系')
GO
-- SELECT * FROM Student

-- 插入课程表数据
-- SP_HELP Course
INSERT INTO Course 
VALUES('101','数据库','105',5,4,'125')
,('104','操作系统','106',1,2,'104')
,('105','数据结构','107',1,3,'104')
,('106','数据处理',NULL,1,2,'331')
,('107','C语言','106',3,1,'125')
,('108','Java',NULL,3,3,'256')
,('109','网页制作',NULL,2,5,'125')
,('110','c++',NULL,3,4,'104')
,('111','网络编程',NULL,2,5,'104')
,('201','高等数学',NULL,1,1,'256')
,('301','信息系统','101',1,3,'331')
GO
-- SELECT * FROM Course WHERE Cpno IS NULL

-- 插入选课表数据
--SP_HELP SC
INSERT INTO SC 
VALUES('95001','101',87)
,('95001','201',76)
,('95001','301',79)
,('95001','104',80)
,('95001','105',81)
,('95001','106',82)
,('95001','107',67)
,('95002','101',89)
,('95002','201',81)
,('95004','101',83)
,('95004','201',56)
,('95005','101',89)
,('95006','101',54)
,('95006','201',77)
,('95010','101',56)
,('95013','301',80)
,('95013','105',90)
,('95014','201',NULL)
,('95015','201',NULL)
GO
--SELECT * FROM SC
--13.1 利用系统函数,解决以下问题(使用SELECT显示结果)。 
--(1)求不大于-1.23的整数。
select FLOOR(-1.23)
-- (2)生成一个14~18之间的随机整数。
select FLOOR(rand()*5)+14
--(3)在课程表中,输出课程名中包含
-- “C” 字符的“课程编号”、“课程名称”、“课名字符数”和“课名字节数”。
select Cno 课程编号,Cname 课程名称,LEN(Cname) 课名字符数,DATALENGTH(Cname) 课名字节数
from Course where Cname LIKE '%C%'

--找到字符串'bar'在字符串 'foobarbar'中第一次出现的位置。
select charindex('bar','foobarbar')

-- (5)找到字符串'foobarbar'最右边的五个字符。
select RIGHT('foobarbar',5)

-- (6)用 'sqlserver'替换字符串'www.mysql.com'中的'mysql'。
select REPLACE('www.mysql.com','mysql','sqlserver')

--(7)获取当前日期的月份数值。
select MONTH(GETDATE())

--(8)获取100天后的日期和时间。

SELECT DATEADD(DY,100,GETDATE())
SELECT DATEADD(Y,100,GETDATE())
SELECT DATEADD(D,100,GETDATE())
SELECT DATEADD(DD,100,GETDATE())

--(9)显示当前数据库的名称。
select DB_NAME() 

 --13.2 用户自定义函数。
--(1)创建标量值函数 F_sno_count,根据输入的学生学号,返回该学生的"选课门数"(如果使用中间变量请使用@count)。
-- 调用函数 F_sno_count,输出'95001'的"选课门数"(使用SELECT输出)。
-- ① 创建标量值函数 F_sno_count。

create function F_sno_count(@Sno CHAR(5))
returns int
as
begin
declare @count int
select @count=COUNT(*) from SC where Sno=@Sno
return @count
end    
-- ② 调用函数 F_sno_count,输出'95001'的"选课门数"(使用SELECT输出)。
 SELECT dbo.F_sno_count('95001')  '选课门数' 

--(2)创建标量值函数 F_sname_cname_grade,根据输入的学生姓名和课程名称,输出该学生此门课程的成绩
--(如果使用中间变量请使用@grade)。调用函数 F_sname_cname_grade,输出学生'刘超华'的'数据库'课程的成绩。
-- ① 创建标量值函数 F_sname_cname_grade。 

create function F_sname_cname_grade(@Sname VARCHAR(10),@Cname VARCHAR(20))
returns int
as
begin
declare @grade int
select @grade=grade from SC where Sno=(select Sno from Student where Sname=@Sname) and
 Cno=(select Cno from Course where Cname=@Cname)
 return @grade
end

CREATE FUNCTION F_sname_cname_grade (@sname varchar(10),@cname varchar(20)) 
RETURNS INT 
AS
BEGIN 
RETURN( SELECT SC.Grade FROM Student S JOIN SC ON S.Sno=SC.Sno 
JOIN course C ON SC.Cno=C.Cno WHERE S.Sname=@sname AND C.Cname=@cname ) 
END 

-- ② 调用函数 F_sname_cname_grade,输出学生'刘超华'的'数据库'课程的成绩(使用SELECT调用输出)。
select dbo.F_sname_cname_grade('刘超华','数据库')

-- (3)创建内嵌表值函数 F_sdept_stu_info,根据输入的院系名称,输出该院系学生的"学号"、"姓名"、
--"性别"、"平均成绩"。调用函数 F_sdept_stu_info,输出 '信息系' 学生的基本信息和平均成绩。
--① 创建内嵌表值函数 F_sdept_stu_info。 

create function F_sdept_stu_info(@sdept varchar(10))
returns table
as
return (select S.Sno 学号,S.Sname 姓名,S.Ssex 性别,avg(SC.Grade) 平均成绩 from Student S 
join SC on S.Sno=SC.Sno where Sdept=@sdept group by S.Sno,S.Sname,S.Ssex)

--② 调用函数 F_sdept_stu_info,输出 '信息系' 学生的基本信息和平均成绩。
select * from F_sdept_stu_info('信息系')

--(4)创建多语句表值函数 F_cno_info,根据输入的课程编号,输出该课程的"课程名称"、"选修人数"
--(课程编号列为主键;如果使用变量,请使用@cno,@cname,@count)。
--调用函数 F_cno_info,输出编号为'101'的课程信息。 
--① 创建多语句表值函数 F_cno_info。
create function F_cno_info(@cno varchar(3))
returns @course_info table(课程编号 varchar(3) primary key,课程名称 varchar(20),选修人数 int)
as
begin
insert into @course_info
select C.Cno,C.Cname,count(*) from Course C join SC on C.Cno=SC.Cno where C.Cno=@cno
group by C.Cno,C.Cname
return
end

--② 调用函数 F_cno_info,输出编号为'101'的课程信息。
select * from F_cno_info('101')

-- (5)删除函数 F_sno_count。
drop function F_sno_count
drop function F_cno_info
drop function F_sname_cname_grade
drop function F_sdept_stu_info

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 RDBMS基础SQLServer数据库的构成 1.1 数据库对象概述 1.1.1 数据库对象 1.1.2 事务日志 1.1.3 最基本的数据库对象:表 1.1.4 文件组 1.1.5 数据库关系图 1.1.6 视图 1.1.7 存储过程 1.1.8 用户自定义函数 1.1.9 用户和角色 1.1.10 规则 1.1.11 默认值 1.1.12 用户自定义数据类型 1.1.13 全文目录 1.2 SQL Server数据类型 1.3 SQL Server对象标识符 1.3.1 需要命名的对象 1.3.2 命名规则 1.4 本章小结 第2章 SQL Server管理工具 2.1 联机丛书 2.2 SQLServer配置管理器 2.2.1 服务管理 2.2.2 网络配置 2.2.3 协议 2.2.4 客户端 2.3 SQLServer Management Studio 2.3.1 启动Management Studio 2.3.2 “查询”窗口 2.4 SQL Server集成服务(SSIS) 2.5 BulkCopy Program(bcp) 2.6 SQL ServerProfiler 2.7 sqlcmd 2.8 Power Shell 2.9 本章小结 第3章 T-SQL基本语句 3.1 基本SELECT语句 3.1.1 SELECT语句与FROM子句 3.1.2 WHERE子句 3.1.3 ORDERBY子句 3.1.4 使用GROUPBY子句聚合数据 3.1.5 使用HAVING子句给分组设置条件 3.1.6 使用FORXML子句输出XML 3.1.7 通过OPTION子句利用提示 3.1.8 DISTINCT和ALL谓词 3.2 使用INSERT语句添加数据 3.2.1 多行插入 3.2.2 INSERTINTOSELECT语句 3.3 用UPDATE语句更改数据 3.4 DELETE语句 3.5 本章小结 3.6 练习 第4章 连接 4.1 连接 4.2 内部连接 4.3 外部连接 4.3.1 简单的外部连接 4.3.2 处理更复杂的外部连接 4.4 完全连接 4.5 交叉连接 4.6 JOIN语句的早期语法结构 4.6.1 内部连接的早期语法结构 4.6.2 外部连接的早期语法结构 4.6.3 交叉连接的早期语法结构 4.7 联合 4.8 本章小结 4.9 练习 第5章 创建和修改数据表 5.1 SQLserver中的对象名 5.1.1 模式名 5.1.2 数据库名 5.1.3 通过服务器命名 5.1.4 回顾默认值 5.2 CReATE语句 5.2.1 CREATEDATAASE 5.2.2 CREATETABLE 5.3 ALTER语句 5.3.1 AITERDATABASE 5.3.2 ALTERTABLE 5.4 DROP语句 5.5 使用GUI工具 5.5.1 使用ManagementStudio创建数据库 5.5.2 回到代码:使用MariagementStudio创建脚本的基础知识 5.6 本章小结 5.7 练习 第6章 约束 6.1 约束的类型 6.1.1 域约束 6.1.2 实体约束 6.1.3 参照完整性约束 6.2 约束命名 6.3 键约束 6.3.1 主键约束 6.3.2 外键约束 6.3.3 唯一约束 6.4 CHECK约束 6.5 DEFAuLT约束 6.5.1 在cREATETABLE语句中定义DEFAULT约束 6.5.2 在已存在的表中添加DEFAUIT约束 6.6 禁用约束 6.6.1 在创建约束时忽略无效的数据 6.6.2 临时禁用已存在的约束 6.7 规则和默认值 6.7.1 规则 6.7.2 默认值 6.7.3 确定哪个表和数据类型使用给定的规则或默认值 6.8 用于实现数据完整性的触发器 6.9 如何选择 6.1 0本章小结 第7章 更复杂的查询 7.1 子查询的概念 7.2 关联子查询 7.2.1 关联子查询的工作原理 7.2.2 在WHERE子句中的关联子查询 7.2.3 处理NULL数据——ISNULL函数 7.3 派生表 7.4 EXISTS运算符 7.5 混合数据类型:CAST和CONVERT 7.6 MERGE命令 7.6.1 BYl.ARGET和BYSOURCE 7.6.2 OUTPUT子句 7.7 性能方面的考虑 7.8 本章小结 7.9 练习 第8章 规范化和其他基本设计问题 8.1 表 8.2 保持数据“规范 8.2.1 准备工作 8.2.2 第一范式 8.2.3 第二范式 8.2.4 第三范式 8.2.5 其他范式 8.3 关系 8.3.1 一对一关系 8.3.2 一对一或一对多关系 8.3.3 多对多关系 8.4 数据库关系图 8.4.1 表 8.4.2 添加和删除表 8.4.3 关系 8.5 反规范化 8.6 超出规范化的一些规则 8.6.1 保持简单 8.6.2 选择数据类型 8.6.3 尽量进行存储 8.7 创建一个快速示例 8.7.1 创建数据库 8.7.2 添加数据库关系图和初始表 8.7.3 添加关系 8.7.4 添加一些约束 8.8 本章小结 8.9 练习 第9章 SQLServer存储和索引结构 9.1 SQLServer存储机制 9.1.1 数据库 9.1.2 区段 9.1.3 页 9.1.4 行 9.1.5 稀疏列 9.2 理解索引 9.2.1 平衡树(B.树) 9.2.2 SQLServer中访问数据的方式 9.3 创建、修改和删除索引 9.3.1 CREATEINDEX语句 9.3.2 创建XML索引 9.3.3 随约束创建的隐含索引 9.3.4 在稀疏列和地理空间列上创建索引 9.4 明智地选择——在何时何地使用何种索引 9.4.1 选择性 9.4.2 注意成本 9.4.3 选择群集索引 9.4.4 列顺序问题 9.4.5 修改索引 9.4.6 删除索引 9.4.7 从查询计划中获取提示 9.4.8 使用数据库引擎调整向导 9.5 维护索引 9.5.1 碎片 9.5.2 确定碎片和页拆分的可能性 9.6 本章小结 9.7 练习 第10章 视图 10.1 简单的视图 10.2 更加复杂的视图 10.3 使用T-SOL编辑视图 10.4 删除视图 10.5 在MaliagementStudio中创建和编辑视图 10.6 审查:显示现有的代码 10.7 保护代码:加密视图 10.8 关于模式绑定 10.9 使用VIEWMETADATA使视图看起来像表一样 10.10 索引(物化)视图 10.11 本章小结 10.12 练习 第11章 编写脚本和批处理 11.1 脚本的基础知识 11.1.1 USE语句 11.1.2 声明变量 11.1.3 使用@@IDENTITY 11.1.4 使用@@ROWCOUNT 11.2 批处理 11.2.1 批处理中的错误 11.2.2 何时使用批处理 11.3 sqlcmd 11.4 动态SQL:用ExEC命令动态生成代码 11.5 控制流语句 11.5.1 IFELSE语句 11.5.2 CASE语句 11.5.3 用WHILE语句进行循环 11.5.4 WAITOR语句 11.5.5 TRY/CATCH块 11.6 本章小结 11.7 练习 第12章 存储过程 12.1 创建存储过程:基本语法 12.2 使用ALTER修改存储过程 12.3 删除存储过程 12.4 参数化 12.5 通过返回值确认成功或失败 12.6 错误处理 12.6.1 以前的方式 12.6.2 在错误发生前处理错误 12.6.3 手动引发错误 12.6.4 添加自定义的错误消息 12.7 存储过程的优点 12.7.1 创建可调用的进程 12.7.2 为了安伞性使用存储过程 12.7.3 存储过程和性能 12.8 扩展存储过程(XP) 12.9 递归简介 12.10 调试 12.10.1 启动调试器 12.10.2 调试器的组成 12.10.3 使用调试器 12.11 .NET程序集 12.12 本章小结 第13章 用户自定义函数 13.1 UDF的定义 13.2 返回标量值的uDF 13.3 返回表的UDF 13.4 调试用户自定义函数 13.5 数据库中的.NET 13.6 本章小结 13.7 练习 第14章 事务和锁 14.1 事务 14.1.1 BEGINTRAN 14.1.2 COMMITTRAN 14.1.3 ROLLBACKTRAN 14.1.4 SAVETRAN 14.2 SQLServer日志的工作方式 14.2.1 失败和恢复 14.2.2 隐式事务 14.3 锁和并发 14.3.1 通过锁可以防止的问题 14.3.2 可以锁定的资源 14.3.3 锁升级和锁对性能的影响 14.3.4 锁定模式 14.3.5 锁的兼容性 14.3.6 指定一种特有的锁定类型——优化器提示 14.4 设置隔离级别 14.5 处理死锁(1205错误) …… 第15章 触发器 第16章 初识XML 第17章 Reporting Services 第18章 使用Integration Services进行集成 第19章 扮演管理员的角色 附录

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值