T-SQL:功能使⽤实例(变量定义赋值、函数、游标、流程控制)⼀、T-SQL:transact SQL,提供了变量定义,赋值操作,流程控制,函数等语句供⽤户使⽤
背景知识:
⼀、变量定义:declare @标识符 类型
⼆、变量赋值:set @变量1 = value1,select @变量1 = value1,@变量2 = value2
三、流程控制:流程空值和程序设计语⾔中的流程控制类似,流程空值语句是SQL提供给⽤户⽤于改变语句执⾏顺序的控制语句
四、函数:包括系统函数和⽤户⾃定义函数
五、游标:可以被视作⼀个指针,可以指向结果集中的任意⼀个位置并对其进⾏处理
名称解释(不区分⼤⼩写)
student学⽣表:
包含属性列:sno学号、sname学⽣姓名、age年龄、sex性别、dno学院编号、birthday⽣⽇sc选课信息
表:
包含属性列:sno学号、cno课程号、grade成绩
dept学院信息表:
包含属性列:dno学院编号、dname学院名称、dean学院负责⼈
course课程信息表:
包含属性列:cno课程号、cname课程名称、tname⽼师名称、credit学分、room教室
下⾯语句可以直接复制到SQL Server运⾏
⽅法不唯⼀,有问题欢迎留⾔讨论!代码块见⽂章末尾
运⾏时注意:由于函数、视图等必须是批处理语句中仅有的语句,可能需要单独创建SQL⽂件。
且变量命名不可重复,需要运⾏请⾃⾏创建新的SQL⽂件。
运⾏⽅法,选中需要执⾏的语句
⼆、代码
–系统数据类型
declare @Lee int
set @Lee = 32
select @Lee
print @Lee
select @@SERVERNAME --返回SQL服务器名称
select @@LANGUAGE --返回当前使⽤语⾔名
select @@VERSION --返回SQL服务器安装⽇期、版本和处理器类型
print APP_NAME() --返回当前会话应⽤程序
print USER_NAME() --返回⽤户数据库⽤户名
print GETDATE() --返回当前时间
print DATENAME(YYYY ,GETDATE())python什么东西
– 补:返回年份print DATENAME(YYYY,GETDATE()) 或 select DATENAME(YYYY,GETDATE())
– ⽇期函数
print DATENAME(YYYY,GETDATE())
print DATEPART(MM,GETDATE())
–定义⼀个实型变量,并将其值输出
declare @f float
set @f = 456.26
print cast(@f as varchar(12))
–定义⼀个字符变量,并将其处理后输出
declare @mynumber char(20)
set @mynumber = ‘test’
select ‘compute’ + @mynumber as ‘计算结果’
–根据授课班号⾃定义变量,查询符合要求的学⽣成绩
declare @cn char(20),@f float
select @cn = ‘218801’,@f = 84
select * from sc where cno = @cn and grade >= @f
–BEGIN……END……的使⽤
begin
declare @myvar float
set @myvar = 1233.23
begin
print(‘变量@myval 的值为’)
print cast(@myvar as char(20))
end
end
–利⽤ CASE 查看学⽣的成绩等级
select sno,cno,
数据库一般有哪五个部分组成(case
when grade >= 80 then ‘A’
when grade >= 70 then ‘B’
when grade >= 60 then ‘C’
else ‘D’
end)
as 等级
from sc
–创建⼀个视图,统计每个学⽣的学习情况。若其平均成绩超过 90,则其学习情况为优秀;若其平均成绩在 80 和 90 之间,则其学习情况为优秀良好;依次类推。
create view study_view
as(
vlookup函数有几种使用方法select sc.sno,sname,cno,
case
when (select avg(grade) from sc where sc.sno = student.sno) > 90 then ‘优秀’
when (select avg(grade) from sc where sc.sno = student.sno) > 80 then ‘良好’
when (select avg(grade) from sc where sc.sno = student.sno) > 70 then ‘中等’
when (select avg(grade) from sc where sc.sno = student.sno) > 60 then ‘合格’
else ‘不合格’
end
from student)
–利⽤ WHILE 结构,求:1+2+3+…+100 的值
declare @s int,@j int
select @j=0,@s=0
while(@j<=100)
begin
select @s = @s + @j,@j = @j + 1
end
print '1+2+3+4+5+6+…+100 = ’ + cast(@s as char)
–利⽤ IF…ELSE,查询课程号为’234901’的学⽣的总平均成绩,如果⼤于 90,输出优秀,在 80-90 之间,输出优良,其它输出⼀般
declare @avg int
select @avg = avg(grade) from sc where sno = ‘234901’
if @avg > 90
print ‘优秀’
unicode编码转换函数
else
begin
if @avg > 80
print ‘优良’
else
print ‘⼀般’
end
–定义⼀函数,实现如下功能,对于⼀给定的学号 studentSNO,查询该值在 student 中是否存在,存在返回 1,不存在返回 0。create function check_id
(@sno char(8))
returns integer
as
begin
declare @num
if(exists(select * from student where sno = @sno))
set @num = 1
else
set @num = 0
return @num
end
–使⽤下⾯的 SQL 语句调⽤第 9 题的函数。要求:当向表 student 中插⼊⼀条记录时,⾸先调⽤函数 check_id,检查该记录的学号在表student 中是否存在,不存在,才可以插⼊。
declare @num int
select @num = XSGL.check_id(‘20081200’)
if @num = 0
insert into student(sno,sname) values(‘20081300’,‘张⽂’)
–求学⽣选课的门数,列出其姓名及选课门数
select sname,(select count() from sc where sc.sno = student.sno)as ‘选课门数’ from student
mysql语句的执行顺序–根据课程号动态查询学⽣的选课⼈数
–可以利⽤变量以及字符串连接字符‘+’,动态⽣成 SQL 语句,达到依据条件,进⾏数据库动态查询⽬的。其中,连接字符串中若包含单引号’字符,则必须⽤两个’’,表⽰⼀个单引号’字符。
DECLARE @cno char(8)
DECLARE @sql varchar(8000)
resized是什么意思
SET @cno=‘218801’
–动态⽣成 SQL 语句
SET @sql='SELECT COUNT() FROM sc WHERE CNO=’’’+@cno+’’’’
EXEC(@sql)
SET @cno=‘203402’
SET @sql=’ SELECT COUNT(*) FROM sc WHERE CNO=’’’+@cno+’’’’
EXEC (@sql)
–⽤游标结合循环,输出全校各种姓⽒及其⼈数
–定义记录数和循环变量
declare @count int,@i int
–定义姓⽒和⼈数
declare @xs char(6),@rs int
–定义游标
declare @cursor cursor
–为游标赋值
set @cursor = cursor local scroll for
select distinct substring(sname,1,1) as xs,count(*) as ⼈数 from student group by substring(sname,1,1)
–变量初始化
select @count=0,@i=0
–打开游标
open @cursor
–@@cursor_rows是系统变量,⽤于记录游标所指向的结果集的⾏数
set @count = @@cursor_rows
–打印记录数
print ‘⼈数’ + cast(@count as char)
–对游标中记录进⾏操作
if(@count <= 0)
begin
print(‘没有记录’)
end
else
begin
while(@i < @count)
begin
fetch next from @cursor into @xs,@rs
print cast(@i as char) + @xs + cast(@rs as char)
set @i = @i + 1
end
–关闭游标
close @cursor
end

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。