T - SQL 概述

1. 局部变量

DECLARE @b VARCHAR(50)
SELECT @b = '测试'
PRINT @b

declare @song varchar(20)
set @song = 'Hello World'
print @song

--为多个变量一起赋值,只能用select
declare @d int,@c char(10),@a int
select @d = 1,@c = 'love',@a = 2
print @d
print @c
print @a

2. 运算符

2.1 算数运算符包括加、减、乘、除、取余(%)

注意:取余运算两边的表达式必须是整型数据。

例:求2对5取余

declare @x int,@y int,@z int
select @x = 2,@y = 5
set @z = @x % @y
print @z

2.2 比较运算符

共9个比较运算符:=, >, < , >=, <=, <>(不等于), !=(非等于), !>(非大于), !<(非小于)

其中 !=,!>,!< 不是 ANSI 标准的运算符。

2.3 逻辑运算符

运算符行为
ALL如果一个比较集中全部都是TRUE,则值为TRUE
AND如果两个布尔表达式均为TRUE,则值为TRUE
ANY如果一个比较集中任何一个为TRUE,则值为TRUE
BETWEEN如果操作数是在某个范围内,则值为TRUE
EXISTS如果子查询包含任何行,则值为TRUE
IN如果操作数与一个表达式列表中的某个相等,则值为TRUE
LIKE如果操作数匹配某个模式,则值为TRUE
NOT对任何其他布尔运算符的值取反
OR如果任何一个布尔表达式是TRUE,则值为TRUE
SOME如果一个比较集中的某些为TRUE,则值为TRUE
--exists
--eists(select):若子查询的结果集非空时,exists()表达式返回true;子查询的结果集为空时,exists()表达式返回false。
select * from Student
where exists (select S# from Student where S# = '10')
--in
select * from Student
where S# in (select S# from SC)

当 NOT、AND 和 OR 出现在同一表达式中时,优先级时 NOT > AND > OR。

例如,3>5 or 6>3 and not 6>4=false

先计算 not 6>4=false;然后再计算 6>3 and false = false,最后计算 3>5 or false = false。

2.4 位运算符

位运算符的操作数可以是整数数据类型或二进制串数据类型(image 数据类型除外)范畴。

运算符说明
&按位 AND
|按位 OR
^按位互斥 OR
~按位 NOT

SQL Server 逻辑位运算示例

2.5 连接运算符

连接运算符 “+” 用于连接两个或两个以上的字符或二进制串、列名或者串和列的混合体,将一个串加入到另一个串的末尾。

declare @name varchar(10)
set @name = '漫威'
print '我爱的电影是' + @name

2.6 运算符优先级

当一个复杂表达式中包含有多个运算符时,运算符的优先级决定了表达式计算和比较操作的先后顺序。运算符的优先级由高到低的顺序如下:

  1. +(正)-(负)~(位反)
  2. *(乘)/(除)%(取余)
  3. +(加)+(字符串串联运算符)-(减)
  4. =、>、<、>=、<=、<>、!=、!>、!<(比较运算符)
  5. ^(按位异或)&(按位与)|(按位或)
  6. NOT
  7. AND
  8. ALL、ANY、BETWEEN、IN、LIKE、OR、SOME(逻辑运算符)
  9. =(赋值)

3. 通配符

匹配指定范围内或者属于方括号所指定的集合中的任意单个字符。可以在涉及模式匹配的字符串比较(比如 LIKE 和 PATINDEX)中使用这些通配符。

在 SQL 中通常用 LIKE 关键字与通配符结合起来实现模糊查询。SQL 支持的通配符如下:

通配符描述示例
%包含零个或更多字符的任意字符"loving%"可以表示为:“loving”、“loving you”、“loving?”
_(下划线)任何单个字符"loving_“可以表示为"lovingc”。后面只能再接一个字符。
[ ]指定范围([a ~ f])或集合([abcdef])中的任何单个字符[0 ~ 9]123 表示以 0~9 之间任意一个字符开头,以’123’结尾的字符
[^]不属于指定范围([a ~ f])或集合([abcdef])中的任何单个字符[^0 ~ 5]123表示不以 0~5 之间任意一个字符开头,却以’123’结尾的字符

4. 流程控制

4.1 BEGIN…END

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

declare @x int,@y int,@t int
set @x=1
set @y=2
begin
set @t=@x
set @x=@y
set @y=@t
end
print @x
print @y

4.2 IF

在 SQL Server 中为了控制程序的执行方向,也会像其他语言(如C语言)有顺序、选择和循环 3 种控制语句,其中 IF 就属于选择判断结构。

declare @x int
set @x = 8
if @x % 2 = 0
print '@x 偶数'
print 'end'

4.3 IF…ELSE

declare @x int,@y int
set @x = 8
set @y = -3
if @x > 0
	if @y > 0
		print '@x@y位于第一象限'
	else
		print '@x@y位于第四象限'
else
	if @y > 0
		print '@X@y位于第二象限'
	else
		print '@x@y位于第三象限'

4.4 CASE

Case具有两种格式。简单Case函数和Case搜索函数。

--简单Case函数

CASE sex
	WHEN '1' THEN '男'
	WHEN '2' THEN '女'
	ELSE '其他' 
END

--Case搜索函数

CASE 
	WHEN sex = '1' THEN '男'
	WHEN sex = '2' THEN '女'
	ELSE '其他' 
END
select *,case
when score >= 90 then '优秀'
when score < 90 and score >= 80 then '良好'
when score < 80 and score >= 70 then '及格'
else '不及格'
end as "备注"
from SC

4.5 WHILE

WHILE 子句是 T-SQL 语句支持的循环结构。在条件为真的情况下,WHILE 子句可以循环地执行其后的一条 T-SQL 命令。如果想循环执行一组命令,则需要配合 BEGIN…END 子句使用。

declare @n int,@sum int
set @n = 1
set @sum = 0
while @n <= 10
begin
	set @sum = @sum + @n
	set @n = @n + 1
end
print @sum

4.6 WHILE…CONTINUE…BREAK

循环结构 WHILE 子句还可以用 CONTINUE 和 BREAK 命令控制 WHILE 循环中语句的执行。
其中,CONTINUE 命令可以让程序跳过 CONTINUE 命令之后的程序,回到 WHILE 循环的第一行命令。
BREAK 命令则让程序完全跳出循环,结束 WHILE 命令的执行。

declare @x int,@sum int
set @x = 1
set @sum = 0
while @x < 10
begin
	set @x = @x + 1
	if @x % 2 = 0
		set @sum = @sum + @x
	else
		continue
end
print @sum

4.7 RETURN

RETURN 语句用于从查询或过程中无条件退出。RETURN 语句可在任何时候用于从过程、批处理或语句块中退出,位于 RETURN 之后的语句不会被执行。

declare @x int
set @x = 3
if @x > 0
	print '遇到return之前'
return
print '遇到return之后'

4.8 GOTO

GOTO 命令用来改变程序执行的流程,使程序跳到标志符指定的程序行再继续执行下去。

标志符需要在其名称后面加上一个冒号":"

declare @x int
select @x = 1
loving:
	print @x
	select @x = @x + 1
while @x <= 3
goto loving

4.9 WAITFOR

WAITFOR 指定触发器、存储过程或事务执行的时间、时间间隔或事件;还可以用来暂时停止程序的执行,直到所设定的等待时间已过才继续执行下去。
其中,时间必须为 datetime 类型的数据,如 11:12:13,但不能包括日期。
各关键字含义如下:
DELAY:用来设定等待的时间,最多可达24小时。
TIME:用来设定等待结束的时间点。

--3秒后执行
WAITFOR DELAY '00:00:03'
PRINT 'Hello World'
--9点52分55秒执行
WAITFOR TIME '09:52:55'
PRINT 'Hello World'
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值