SQLServer学习笔记十二:T-SQL 语言

学习目标

  • 掌握Transact-SQL的附加的语言元素
  • 掌握使用Transact-SQL定义变量,对变量赋值和输出
  • 掌握Transact-SQL流程控制语句及其作用

Transact-SQL语言

Transact-SQL简称T-SQL,是标准SQL程序设计语言的增强版。它对SQL进行了扩展,加入了变量、程序流程控制结构和其它一些语言元素,增强了可编程性。通过T-SQL,可以定义变量,使用流程控制语句、自定义函数、存储过程等。

Transact-SQL语言是一种综合性语言,主要分为4个部分:

  • 数据定义语言(DDL)
  • 数据操作语言(DML)
  • 数据控制语言(DCL)
  • 附加的语言元素:主要包括变量、运算符、函数、注释和流程控制语句。

基本概念

标识符

数据库对象(如表、约束、索引、视图等)的名称即为标识符。常规标识符命名规则:

  • 第一个字符必须是下列字符之一:
    • 英文字母,以及其它语言的字母字符,如汉字
    • 下划线_@#
  • 后续字符可以包括:
    • 英文字母,以及其它语言的字母字符,如汉字
    • 十进制数字
    • 下划线_@#$
  • 标识符不能是Transact-SQL的保留字
  • 不允许有空格或其它特殊字符

批处理

批处理是包含一个或多个T-SQL语句的组,一次性发送到SQL Server进行执行。SQL Server将批处理的语句编译为一个可执行单元,成为执行计划。执行计划中的语句每次执行一条。

常量

常量,也称为文字值或标量值,是在程序运行过程中值保持不变的量,它是表示一个特定数据值的符号。例如:

  • 字符串常量:'abc@qq.com'
  • Unicode字符串:N'威海职业学院'
  • bit常量:01

变量

变量是指在程序运行过程中,值可以改变的量。变量可以分为全局变量局部变量

全局变量

全局变量是由系统定义的,用户可以直接使用,全局变量通常用于存储SQL Server的一些配置信息和能效统计数据。使用全局变量需要注意:

  • 全局变量的名字以@@开头
  • 用户不能创建,也不能修改全局变量的值
  • 全局变量的作用范围不局限于某一程序,任何程序均可随时调用

常用的全局变量有:

全局变量作用
@@error返回执行上一条T-SQL 语句所返回的错误编号。如果语句执行成功,则返回0
@@identity返回最近一次插入的identity列的数值
@@rowcount返回上一天T-SQL 语句所影响的数据行数
@@version返回当前SQL Server服务器的安装日期、版本等信息。
局部变量

局部变量是指用户自己定义、赋值、使用或输出的变量。使用局部变量需要注意:

  • 局部变量不区分大小写
  • 局部变量的作用范围仅在其声明的批处理内部
  • 局部变量必须以@开头,而且必须先使用DECLARE声明后才能使用。

局部变量的声明

声明局部变量的语法如下:

-- var_name 是局部变量的名字,必须以@开头
-- datatype 是局部变量的数据类型
DECLARE @var_name datatype
[, @var_name datatype]

局部变量的赋值

声明局部变量后要给局部变量赋值,可以使用SETSELECT语句。赋值的语法格式如下:

SET @local_var=expression
SELECT @local_var=expression, [, @local_var=expression]

练习

使用变量查找计算机学院教龄超过3年的教师信息。

DECLARE @dept char(5), @year int
SET @dept = 'J'
SELECT @year = 3

SELECT * 
FROM teachers
WHERE deptno = @dept AND teachingyears > @year

PRINT

PRINT想客户端返回一个用户自定义信息,即显示一个字符串、局部变量、全局变量的内容。语法格式如下:

RPINT msg_str | @local_var | string_epr

练习

将局部变量HOMEPAGE声明为char类型,长度为100,并为其赋值为"https://www.baidu.com",并输入变量的值。

DECLARE @HOMEPAGE char(100)
SET @HOMEPAGE = 'https://www.baidu.com'
PRINT @HOMEPAGE

流程控制语句

流程控制语句用于控制T-SQL、语句块和存储过程的执行流程,以完成功能较为复杂的操作,使得程序具有更好的逻辑性和结构性。常用到流程控制语句如下:

语句说明语句说明
BEGIN…END定义语句块IF…ELSE…条件语句
CASE多条件分支语句WHILE循环语句
BREAK中断循环语句CONTINUE挑出本次循环
GOTO跳转语句RETURN返回语句

BEGIN…END

BEGIN…END用于将多个语句组合成一个逻辑块, 当流程控制语句必须执行一个包含两条或两条以上的语句块时,使用BEGIN…END。

语法格式如下:

BEGIN
	sql_statement
END

注意,BEGIN和END必须成对使用

练习

声明两个变量并赋值,然后交换两个变量的值。

DECLARE @a int, @b int, @t int
SET @a = 3
SET @b = 5
BEGIN
	SET @t = @a
	SET @a = @b
	SET @b = @t
END
PRINT @a
PRINT @b

IF…ELSE

如果条件为真,则执行IF条件表达式后面的T-SQL语句;否则,当条件为假时,可以使用ELSE关键字指定要执行的T-SQL。

语法格式如下:

IF boolean_exp
	sql_statement | statement_block
ELSE
	sql_statement | statement_block

练习

声明3个变量并赋值,输出其中较大的值。

DECLARE @a int, @b int, @c int
SET @a = 3
SET @b = 5
set @c = 4
IF @a < @b
	SET @a = @b
IF @a < @c
	set @a = @c
PRINT @a

WHILE

当条件为真是,重复执行循环语句。如果想重复执行一组指令,则需配合BEGIN…END一起使用。

语法格式如下:

WHILE boolean_exp
    BEGIN
        sql_statement | statement_block
    END

练习

求1到100所有整数的和。

DECLARE @n int, @sum int
SET @n = 1
SET @sum = 0
WHILE @n <= 100
	BEGIN
		SET @sum = @sum + @n
		SET @n = @n + 1
	END
PRINT @sum

CASE

根据表达式的真假来确定是否返回某个值。CASE语句可以进行多个分支的选择。

语法格式如下:

CASE
WHEN boolean_exp THEN result_exp
WHEN boolean_exp THEN result_exp
...
ELSE result_exp
END

练习

根据学生分数给出判定:

  • [90,100]输出excellent
  • [70, 90)输出good
  • [60, 70)输出pass
  • 其它分数输出fail
DECLARE @n int, @ans varchar(20)
SET @n = 78
SET @ans = 
CASE
WHEN @n >= 90 AND @n <= 100 THEN 'excellent'
WHEN @n >= 70 AND @n < 90 THEN 'good'
WHEN @n >= 60 AND @n < 70 THEN 'pass'
ELSE 'fail'
END
PRINT @ans
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少儿编程乔老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值