SQL-Server数据库技术与应用
T-SQL语言
1. 基本概念
-
标识符
标识符:数据库对象的名称 -
标识符的种类
• 常规标识符
• 分隔标识符 -
标识符的命名规则
① 第一个字符必须是:英文字母 a~z 和 A ~Z、下划线(_)、@或者#。
② 后续字符:可包括:
• 英文字母 a~z 和 A ~Z、下划线()、以及来自其他语言的字母字符
• 十进制数字
• @、¥、# 和 下划线()
③ 标识符不能是T-SQL关键字
④ 不允许嵌入空格或其他特殊字符
2. 常量和变量
2.1 常量
2.2 变量
局部变量
声明局部变量的语法:
DECLARE @变量名 数据类型 [,@变量名 数据类型] …
--声明两个变量 name 字符类型 age int
declare @name varchar(10), @age int
声明后赋值:
可以用SET或SELECT语句赋值,语法格式为:
SET @局部变量=值
SELECT @局部变量=值[,……值n]
--set:
set @name='张'
set @age=18
--select
select @name='李',@age=19
--输出
print @name
print @age
注:SET一次只可赋一个值,SELECT可以一次赋多个值
练习:
将局部变量Homepage声明为char类型,长度为100,并为其赋值为
http://www.itzcn.com
/*将局部变量Homepage声明为char类型,长度为100,并为其赋值为
http://www.itzcn.com*/
Declare @Homepage char(100)
SET @Homepage='http://www.itzcn.com'
全局变量
首先定义好的变量,不允许用户创建和修改。
以@@开头。
2.3 运算符
- 算术运算符 + - * / %
--算术运算符
declare @a int, @b int, @z int
set @a=18
set @b=4
set @z=@a+@b
print @z
-
赋值运算符,即“=”
-
位运算符
两个表达式必须是任意两个整数类型。&与,|或,^异或(两个位相同为0,不同为1) -
比较运算符
-
逻辑运算符
返回结果是布尔类型的值,True或者False,表示条件成立或不成立。
AND 若两个表达式都为True,则结果为True。
BETWEEN 如果操作数在某个范围内,则结果为True。
IN
LIKE
NOT
OR -
连接运算符
‘+’,可以将字符串连接起来。
declare @name char(20)
set @name='world'
print 'hello'+@name
-
一元运算符
+数值为正 -数值为负 ~逻辑非,位反 -
运算符的优先级:
①一元运算符 +(正)、-(负)、~(取反)
②算术运算符
③比较运算符
④逻辑运算符
⑤赋值运算符
具体见图:
3. 流控制语句
BEGIN…END
begin……end用于将多个语句组合成逻辑块
当流程控制语句必须执行一个包含两条或两条以上的语句块时,使用BEGIN…END语句。
语法:
BEGIN
{
两条或两条以上的语句块
}
END
说明: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
IF…ELSE
若条件为真,则执行条件表达式后面的T-SQL语句,当条件为假,则可使用ELSE关键字指定要执行的T-SQL语句。
语法:
IF 布尔表达式
T-SQL语句
[ELSE
T-SQL语句]
例:
declare @m int
set @m=12
if @m>0
print 'true'
else
print 'false'
--
declare @a int, @b int
set @a=3
set @b=7
if @a>@b
print '@m大于@n'
else
print '@m不大于@n'
--
declare @m int
set @m=12
if @m between 50 and 80
print 'true'
else
print 'false'
例:
输入一个坐标值,然后判断它在哪一个象限
--输入一个坐标值,然后判断它在哪一个象限
declare @x int, @y int
set @x=3
set @y=-2
begin
if @x>0
if @y>0
print '第一象限'
else --y<0
print '第四象限'
else
if @y>0
print '第二象限'
else --y<0
print '第三象限'
end
WHILE
循环结构。当条件为真时,可重复执行循环语句。若想循环执行一组命令,则需配合begin……end一起使用。
语法:
WHILE 布尔表达式
begin
逻辑块
end
例:
求1-10之间的整数和
--求1-10之间的整数和
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 --55
求1-10之间的偶数和
--求1-10之间的整数和
declare @m int,@sum int
set @m=1
set @sum=0
while m<=10
begin
if @m%2=0
begin
set @sum=@sum+@m
end
set @m=@m+1
end
print @sum --30
BREAK与CONTINUE
break直接跳出循环,continue跳回循环最开始的的地方
语法:
WHILE 条件表达式
begin
逻辑块
[break] --跳出所有循环
[continue] --跳到循环最开始的的地方
逻辑块
end
例:求1到10之间偶数的和
declare @x int,@sum int
set @x=0
set @sum=0
while @x<10
begin
set @x=@x+1
if @x%2=0
set @sum=@sum+@x
else
continue
end
print @sum
CASE多分支语句
可根据表达式的真假来确定是否返回某个值。
语法:
CASE
WHEN 判断条件
THEN 语句块1
[…n]
[ELSE 语句块]
END
例:
根据学生分数给出判断:90-100(包含90,100)的显示excellent,70-90(包含70)显示good,60-70(包含60)的显示pass,其他分数显示fail。
/*根据学生分数给出判断:
90-100(包含90)的显示excellent,
70-90(包含70)显示good,
60-70(包含60)的显示pass,
其他分数显示fail。*/
declare @score int,@message varchar(50)
set @score=88
set @message=
case
when @score>=90 and @score<=100 then 'excellent'
when @score>=70 and @score<90 then 'good'
when @score>=60 and @score<70 then 'pass'
else 'fail'
end
print @message
WAITFOR
延迟语句,可以将它之后的语句在一个指定的时间间隔之后执行,或在未来的某一指定时间执行。
语法:
Waitfor delay ‘time’ | time ‘time’
其中delay用于设定等待的时间,最多可达24小时。
time用于设定等待结束的时间点。‘时间’的数据类型必须为datetime格式为‘hh:mm:ss’,不能包含日期。
例:
--3秒后显示'hello world'
waitfor delay '00:00:03'
print 'hello world'
--15点显示'hello ye'
waitfor time '15:00:00'
print 'hello ye'
GOTO命令
goto命令用来改变程序执行的流程,使程序跳到标识符指定的程序再继续往下执行。
语法:
goto 标识符
标识符需要在其名称后加上一个冒号":"
标识符自己定义
例:
用goto语句实现跳转输出小于等于3的值
--用goto语句实现跳转输出小于等于3的值
declare @x int
select @x=1
loving: --这里的标识符loving相当于单独罗列出while条件后的语句
print @x
select @x=@x+1
while @x<3
goto loving
RETURN无条件退出语句
从查询或过程中无条件退出。此时位于retur后面的语句不被执行。
语法:
RETURN 整数值
例:
declare @x int
select @x=3
if @x>0
print '遇到return之前'
return
print '遇到return之后'