T-SQL编程基础

#T-SQL编程基础

  • 变量
  • 运算符
  • 批处理
  • 注释
  • 流程控制
  • 函数
  • 游标

##1.变量
t-sql的变量包括:系统变量、用户自定义变量
1.系统变量
为了方便t-sql系统运行而生的变量,用户不能修改,以@@+name的形
式出现,比如:@@fetch_status。系统变量的作用域是全局的,在整
个会话层(用户连接到数据库到断开连接)都是有效的。
2.用户自定义变量
为方便用户自己定义处理语句,用户可以自定义变量
语法:declare @name datatype
比如定义一个名为student_name的char(10)类型变量:declare
@student_name char(10),用户自定义的变量的作用域为用户定义
的批处理语句中,在用户定义的过程执行完毕后失效。
变量的使用:
set @variable=expression
或者
select @variable=expression

##2.运算符
运算符分为:算术运算符、逻辑运算符、赋值运算符、比较运算符、字符串连接运算符等,基本和C语言相同,这里不再赘述。

##3.批处理
批处理定义为用户编写的一个或多个语句的集合,以go作为批处理结束的标志。

##4.注释
单行注释:—注释内容
多行注释: /* 注释内容*/

##5.流程控制
5.1.set语句
set语句主要用于给变量赋值,比如:
set @student_name=‘jack ma’
5.2.begin end语句
begin end语句用以定义语句块,这个语句块将被作为一个整体
比如定义一个从student表中选择全部人员信息的语句块:
begin
select *
from student
end
5.3.if else语句
用以条件判断,格式:
if boolean_conditions

else

5.4.case语句
多分支条件语句,格式
5.4.1 简单case语法:
case expression
when when_expr1 then result_expr1
when when_expr2 then result_expr2

end
5.4.2 搜索case语法:
case
when bool_expr1 then result_expr1
when bool_expr2 then result_expr2

            ....
            end
       
  5.5.while循环
      语法:
      while  conditions
         ....
         [break|continue]
      break与continue的用法与c语言一致
  5.6.return语句
      为了能够结束当前过程,使用return语句直接返回
      语法:
        return expr

##6.函数
t-sql中的函数分为:系统内嵌函数、用户自定义函数
6.1.系统内嵌函数
系统内嵌函数包括:时间函数、数学函数、聚合函数、字符串函数。
6.1.1数学函数
sin、cos、tan等,具体查询帮助文档
6.1.1时间函数
(1)getdate():获取系统当前日期和时间
(2)datename(datepart,date_expr):以字符串的形式返
回由datepart指定的date_expr时间部分。
(3)datepart(datepart,date_expr):以数值的形式返
回由datepart指定的date_expr时间部分。
(4)day(date_expr):返回日期中的日
(5)month(date_expr):返回日期中的日
(6)year(date_expr):返回日期中的日

     6.1.2.聚合函数
           不再赘述
     6.1.3.字符串函数
           (1)ascll(char):返回char对应的ascii码
           (2)char(int_expr):返回int_expr对应的字符
           (3)lower(str):返回str对应的小写str
           (4)upper(str):返回str对应的大写str
           (5)ltrim(str_expr):去掉str_expr左边的空格
           (6)rtrim(str_expr):去掉str_expr右边的空格
           (7)space(int_expr):返回int_expr个空格str
           (8)str(float,len,decimal):将float转换为具有
               decimal个小数点长度为len的字符串
           (9)reverse(str_expr):将str_expr反转
           (10)charindex(patten,str):返回pattern在str中
                的第一个位置
 6.2.用户自定义函数
     用户自定义函数分为:标量函数、内嵌表值函数、多语句表值函数
     6.2.1标量函数
          标量函数是指函数返回的是标量(具体的一个值)。
          语法:
          create  function  f_name(@paramter1 
          datatype1,...)
          returns datatype
          as 
          begin
               ....
               return value
          end
          例子:
          创建一个函数age_gt(@age1 int)用以查询student表中大于等于age1年龄的人员总数。
          代码:
use student
go
create function age_gt(@age1 tinyint)
returns tinyint
as
begin
   declare @cn_person tinyint
   set @cn_person=
   (
   select COUNT(*)
   from student
   where age>=@age1
   )
   return @cn_person
end
select dbo.age_gt(25) as '符合年龄要求人数'

效果:
这里写图片描述

    6.2.2内嵌表值函数
         这种函数返回的是一个表,不用begin end定义语句块,仅用
         return返回表即可。
         语法:
         create  function name(@p1 datatype1,....)
         returns table
         as 
            return (select states_ment)
        例子:
        在student表上创建一个内嵌表值函数student_dp(@major 
        char(10))返回student表中@major指定系的学生信息。
        代码:
use student
go 
create function student_dp(@major char(10))
returns table 
as 
  return (select *
          from student
          where department=@major
          )


select * from dbo.student_dp('自动化系')

效果:
这里写图片描述

      6.2.3.多语句表值函数
            多语句表值函数具有以上两种函数的特点,但依然用begin end定义函数体,另外在返回的表的时候,将返回的表变成了表变量,可以自己定义返回的表变量格式
            语法:
            create function name(@p1 datatype1,...)
            returns @n1 table(def...)
            as 
            begin
               ....
               return   ---最后必须有一个空的return语句
            end
            例子:
            定义表多语句表值函数sc_1(@classid char(10))查询student表中选择@classid课程的学生信息。
            代码:
use student
go
create function sc_1(@classid char(10)) 
returns @result table
(no char(10),
 name char(40),
 age  int,
 department nchar(10),
 identityid char(10)
 )
 as
 begin
    insert into @result(no,name,age,department,identityid)
    select no,name,age,department,identityid
    from student
    where @classid=classid
    return 
 end
 
select * from sc_1('b1')

效果:
这里写图片描述

##7.游标
为什么要用游标:
以往的查询都是选择表中的几行或一行,每次选择都只能选择特定的行集合,不能逐条的取记录,不大方便,因此引入游标。
游标的功能:
1.定位到表中特定行,类似于指针
2.通过游标可以对表中数据进行修改
使用游标的过程分为:
定义游标、打开游标、操作游标取数据、关闭游标、释放游标
类似于C语言中的文件操作
1.定义游标
语法:
declare cursor_name cursor
[local|globle|scroll|dynamic|static|read_only]
for
select…
for update of column_list
以上的local表示定义本地游标,globle表示定义游标的作用域为全局,scroll表示游标可以向前、后自由移动,并可以修改表中数据;dynamic与scroll类似;static表示游标读取的表示是只读静态的,不能通过游标对表进行修改,也不能反映表中的修改,这时游标中的内容只是基本表的临时表;read_only类似于static。for update of column_list指定可以修改的列,如果没有指定,则默认全都可以修改。
例子:
定义一个student表上的scroll游标st_cursor_22,选取表中年龄等于22岁的人员信息。
代码:

use student
go
declare st_cursor_22 cursor
scroll
for
select *
from student
where age=22
     2.打开游标
       语法:
       open cursor_name
     3.使用游标
       使用游标,主要是从游标指向的表中数据开始对表进行操作。
       语法:
       fetch [next|prior|first|last|absolute 
               [n|@n]|relative [n|@n]
              ]
       from cursorname
       into @var_name1,....
       参数说明:
       next:取当前元素的下一个元素
       prior:取当前元素的前一个元素
       last:取最后一个元素
       first:取第一个元素
       absolute n:取从表头到表尾第n个元素,若n为负数,则表示取
       从表尾巴到表头的第n个元素,为正数,则表示取从表头到表尾的
       第n个元素,若n超过表长,当n为正时,此时的数据已经超过表
       尾,使用prior可以查询表尾数据,反之,使用next可以查看表
       头数据。
       relative n:与absolute类似,只不过游标的起点变成了当前
       位置。
       @var_name_list:表示要将游标中选取的属性列赋值进变量列
       表中去,要求各列表变量的属性要和源表中的属性相容
      
       例子:
       打开st_cursor_22游标,从游标中取下一条数据并显示
       代码:
open st_cursor_22
fetch next 
from st_cursor_22
      4.关闭游标
        语法:
        close cursor_name
        例子:
        关闭st_cursor_22游标
        代码:
close st_cursor_22
       5.释放游标
         游标在使用完关闭之后还要释放游标。
         语法:
         deallocate cursor_name
         例子:
         释放游标st_cursor_22
         代码:
deallocate  st_cursor_22

您的赞助将是我不断创作的最大动力,谢谢支持!!!
如果您觉得我的文章对您有帮助,可以通过以下方式进行赞赏:
在这里插入图片描述

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值