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的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft SQL Server 代码片段收集

缺少 SQL SERVER 2014 代码片段

sql Oracle代码片段

sql 日期转换代码片段 - Dato,120,konvertere

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?

SQL Prompt7.2下载及破解教程