SQL学习2
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL学习2相关的知识,希望对你有一定的参考价值。
* SqlServer相比mysqlMySQL不支持事务处理,没有视图,没有存储过程和触发器,没有数据库端的用户自定义函数,不能完全使用标准的SQL语法
* 所以在这里我使用 SQL Server 2014 Management Studio来完成一些SQL Server的工作
T-SQL 编码
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的主要内容,如果未能解决你的问题,请参考以下文章
sql 日期转换代码片段 - Dato,120,konvertere