当前位置:Gxlcms > 数据库问题 > SQL学习2

SQL学习2

时间:2021-07-01 10:21:17 帮助过:10人阅读

1:局部变量和全局变量

* 全局变量由系统提供且预先声明,通过在变量名前面添加“@@”符号区别于局部变量。用户只能使用全局变量不能修改全局变量的值。全局变量的作用范围是整个SQL Server系统

* 局部变量由用户自己定义,通过在变量名前面添加“@”符号区别于全局变量

例1:声明一个变量@testDateTime,将getdate()函数的值放入变量中,最后输出变量@testDateTime的值

declare @testDateTime varchar(30)
select @testDateTime = getdate() 
select @testDateTime as 当前时间
go

运行结果

技术分享

例2:声明一个变量@getAge,将mytestuser表里面id是2的字段的age的值放入变量@getAge中,最后输出@getAge的值

declare @getAge int
select @getAge = age from mytestuser where id=2
select @getAge as 2号的年龄
go

运行结果

技术分享

2:使用运算符

例1:将表达式67%31的值赋给变量@result

declare @result int
select @result = 67%31
select @result as 结果
go

运行结果

技术分享

例2:定义变量x和y,给变量赋值,然后求两个变量的与、或、异或的结果

declare @x int, @y int
set @x = 2
set @y = 7
select @x & @y as ,
       @x | @y as ,
       @x ^ @y as 异或

运行结果

技术分享

例3:定义变量x和y,给变量赋值,然后求两个变量中较小的一个

declare @x int, @y int
set @x = 12
set @y = 7
if @x < @y
select @x as 小数据
else
select @y as 小数据

 运行结果

技术分享

例4:使用连接运算符(+)将两个字符串连接起来

--需要注意的是变量x的长度,如果长度不够,就不能完整的显示数据
declare @x varchar(70)
set @x = 米诺八慈++博客园
select @x as 数据连接的结果

运行结果

技术分享

3:case语句

例1:如果年龄小于20岁显示“少年”,如果年龄在20岁到30岁之间显示“青年”,如果年龄在30岁以上显示“中年”

/*需要注意的是
1:在case和字段之间是有逗号隔开的
2:在when then之间不能使用&&表示并且,所以可以将条件倒置,以避免出现age<30&&age>20
*/
select name,age,
case  
when age>30 then 中年
when age>20 then 青年
when age<20 then 少年
end as level
from mytestuser

运行结果

技术分享

4:while表示循环

例1:显示字符串“米诺八慈”中的每一个字符以及其ASCII码

declare @position int,@str varchar(10)
set @position = 1 --需要注意的是在SQL里面字符串的从1开始取值
set @str = 米诺八慈
while @position <=DATALENGTH(@str)--这里的长度是8
    begin
        select SUBSTRING(@str,@position,1),
        ascii(SUBSTRING(@str,@position,1))
        set @position =@position+1
    end

运行结果

技术分享

5:result语句

result可以从查询或过程中无条件退出,可在任何时候从过程、批处理或语句块中退出,而不执行result之后的语句

例1:通过存储过程求用户平均年龄

--删除存储过程
drop procedure mypro

--创建存储过程
create procedure mypro @num int
as return(select avg(age) from mytestuser where id < @num)

--创建查询
declare @avg int ,@number int
set @number = 4
exec @avg = mypro @number --将变量num的值传入存储过程并将存储过程的结果赋给变量avg
select @avg as 平均年龄 

以上SQL语句一个一个的执行,执行创建查询的结果

技术分享

 




 

 

用户自定义函数

例1:创建一个函数用于显示出较大的年龄的用户信息

--删除函数
drop function showMax
--创建函数
create function showMax(@id1 int,@id2 int) returns  varchar(50)  --函数名
--函数体
as
  begin 
      declare @result varchar(50),@name1 varchar(10),@name2 varchar(10),@age1 varchar(10),@age2 varchar(10)
      select @age1 = age,@name1 = name from mytestuser where id = @id1
      select @age2 = age,@name2 = name from mytestuser where id = @id2
      if (@age1<@age2)
            set @result = @name2 +的年龄是:+ @age2
      else
            set @result = @name1 +的年龄是:+ @age1
      return @result 
  end
/*
需要注意的是:
1:在函数名里面声明了id1和id2,在函数体里面就不需要声明可以直接使用了
2:必须要用@age1 varchar(10),@age2 varchar(10)将int类型转换成varchar类型,以便与@name2 +‘的年龄是:‘相连
*/
--使用函数
select dbo.showMax(3,4) as maxMess

 

运行结果

技术分享

 




 

 

游标

游标实际上就是一种能从包括多条数据记录的结果集中每次提取一条记录的机制

1:游标的类型

1:T-SQL游标

主要用于T-SQL脚本,存储过程和触发器。主要用在服务器上,由客户端发送给服务器的T-SQL语句或批处理、存储过程、触发器中的T-SQL进行管理。不支持提取数据块或多行数据

2:API游标

主要哦用在服务器上

3:客户游标

主要是当在客户机上缓存结果集时使用

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------由于T-SQL游标和API游标使用在服务器端上,也叫作服务器游标或后台游标。客户端游标又被称为前台游标

服务器游标包含:静态游标、动态游标、只进游标、键集驱动游标4种类型

2:游标的5种操作

声明游标 --> 打开游标 --> 读取游标 --> 关闭游标(如果不关闭游标,其他人就可以进入,非常危险) --> 释放游标

 

SQL学习2

标签:avg   end   ascii   color   脚本   种类   var   技术分享   --   

人气教程排行