- 语法
- 注意事项
- 举例
- 与C语言差别就是把花括号{ } ,变成了begin end语句块,其他均差不多
全局变量&局部变量
@@全局变量
- 全局变量由系统提供且预先声明的变量。
- 全局变量的使用: 用户只能读取,不能修改
- 引用全局变量时,变量名前一定要加上@@标记
- 输出全局变量可以采用SELECT或者PRINT命令。
@局部变量
- 局部变量由用户根据需要定义,用于保存临时数据或由存储过程返回的结果。
- 局部变量的使用: 引用局部变量时,变量名前一定要加上@标记
- 采用DECLARE命令定义declare
- 采用SET或者SELECT命令赋值select
- 输出局部变量可以采用SELECT或者PRINT命令。select print
局部变量定义declare
局部变量的定义:局部变量是由用户采用declare命令定义。
DECLARE @ 变量名 数据类型 [,… n]
- 一次可以声明多个变量,变量之间用逗号隔开;
- 声明时可不赋初值,此时均初始化为NULL;
- 声明时也可以根据需要赋初值。
例: DECLARE @A CHAR(20)
DECLARE @f float,@cn CHAR(8)=‘aa’
局部变量赋值select
局部变量赋值:局部变量可以在定义变量的同时赋值,也可以定义后采用SET或者SELECT命令赋值。
- 格式一:定义变量的同时赋值
例: DECLARE @A int=888
- 格式二:SET 赋值
语法具体为: SET @变量名 = 表达式
DECLARE @a char(30),@b int
SET @a = 'This is my test'
SET @b=999
注:SET语句一次只能给一个变量赋值
局部变量赋值select
- 格式三: SELECT 赋值
语法具体为: SELECT @变量名 = 表达式 [,…n ]
例: DECLARE @a char(30),@b int
SELECT @a = 'This is my test',@b=999
注:SELECT语句可同时为多个变量赋值。
【1】分支结构IF
--【例1】 对给定学号进行查询,如果其平均成绩不及格的则打印学号和平均成绩,否则打印学号即可 declare @sno char(12),@avgrade numeric(3,1) set @sno='6310910329' select @avgrade=avg(grade) from scores where sno=@sno if @avgrade<60 begin print @sno print @avgrade end else begin print @sno end
--【例2】 对给定学号进行查询,运用多分支IF句型实现分等级打印学生成绩。 declare @sno char(12),@grade float(10) set @sno='6310910329' select @grade=grade from scores IF @grade>=90.0 begin PRINT '优秀' print @grade end ELSE IF @grade>=80.0 begin PRINT '良好' print @grade end ELSE IF @grade>=70.0 begin PRINT '中等' print @grade end ELSE IF @grade>=60.0 begin PRINT '及格' print @grade end ELSE PRINT '不及格'
【2】分支结构CASE
简单CASE语句
--【例1】查询教师姓名、职称以及职称等级。其中职称等级对应规则为: --教授与副教授为高级;讲师为中级;助教为初级;其它为不清楚。 --select teachername,profession, --case profession --when '教授' then '高级' --when '副教授' then '高级' --when '讲师' then '中级' --when '助教' then '初级' --else '不清楚' --end as 职称等级 --from teacher;
搜索CASE语句
--【例2】查询grade表中的学号、课程号以及成绩等级。其中成绩等级对应规则为: --成绩>=90,等级为“优”; --成绩>=80,等级为“良”; --成绩>=60,等级为“及格”; --成绩<60,等级为“不及格”。 select sno,grade,course,--逗号千万不要忘记 case when grade >=90 then '优' when grade >=80 then '良' when grade >=60 then '及格' when grade< 60 then '不及格' end as 等级 from scores
【3】循环结构While
看的懂即可,和C语言差不多
【4】系统函数
进入函数,函数和C语言也一样,分为系统函数和用户自定义函数(个人创建)
常用字符串函数
- ltrim(x)函数用于去掉字符串x开头的所有空格字符。
- rtrim(x)函数用于去掉字符串x结尾的所有空格字符。
- left(x,n)函数返回字符串x的前n个字符。
- right(x,n)函数返回字符串x的后n个字符。
- substring(x,start,length)函数返回从字符串x的第n个位置开始获取length长度的字符串。
- concat(x1,x2,….)函数用于将x1、x2等若干个字符串连接成一个新字符串。
--【例1】将字符串' 中 国 '作为参数,观察两个函数的返回结果。 select ltrim(' 中国') select rtrim('中国 ') select left('中国',1) select right('中国',1) select substring('我爱中国',1,2) select concat('我爱','中国')
时间函数
- GETDATE()函数返回当前系统日期和时间。(无参数)
- YEAR(date)函数返回表示指定日期中的年份。(有参数)
--【例2】采用系统函数返回当前系统日期和时间以及当前的年份。 select GETDATE(),YEAR(GETDATE())
【5】自定义函数—标量函数
- 标量型函数只能返回单个值。
- 只能是输入参数,不能有输出参数,所有输入参数前加@
- create后返回,单词是returns,不是return
- returns 后面是返回值的变量类型
- 在函数体中式 return
函数创建
函数调用
🙂
--【例1】创建一个名为get_name_fn()的函数,该函数的功能是为根据学生学号查询学生姓名。并且调用 --create function get_name_fn(@sno char(12)) --returns char(8) --begin -- declare @sname char(8) -- select @sname=sname from student -- where sno=@sno -- return @sname --end; --调用 --print dbo.get_name_fn('6310410104 ')
--【例2】创建一个函数get_name_fn(),该函数查询成绩不及格的学生的学号,并且调用 --create function get_name_down_fn(@grade int) --returns char(8) --begin --declare @sno char(8) --select @sno=sno from scores --where grade=@grade --return @sno --end; ----调用 --print dbo.get_name_down_fn(60) //❌查询结果只有一个??
【6】自定义函数—内嵌表值函数
- 内联表值函数返回结果为一张表
函数创建
函数调用
🙂
--【例1】创建一个函数get_name_fn(),该函数查询成绩不及格的学生的学号,并且调用 --create function get_grade_down_fn(@grade as int) --returns table --return --( --select sno from scores --where grade=@grade --) ----调用 --select * --from dbo.get_grade_down_fn(60) //✔
这章的内容会考察一个【大题】必须会!!但是其实和C语言差不多,相信大家都能够轻松上手。