T-SQL入门攻略之6-T-SQL运算符与流程控制
2010-10-22 14:22
369 查看
1
:运算符
运算符是用来指定要在一个或者多个表达式中执行操作的一种符号
.
下面简单介绍
:
算术运算符号
select
+
2+
2
--'+'
表示加法或者正號前面表示正號後面表示加號
select
-
2+
1
--'-'
表示減法或者負號前面表示負號後面表示減號
select
-
2*
2
--'*'
表示乘法
select
13/
5,
13.0/
5 --'/'
表示除法注意兩個結果有何不同
select
13%
5
--'%'
表示取模
(
取餘數
)
比較運算符
用於測試兩個表達式的值之間的關係,這種關係是指等於,大於,小於等等。
比較運算符幾乎使用所有的表達式
(
除
text,ntext,image
等數據類型除外
)
if
3>
2
print
'3>2'
select
*
from
student
where
s_no>
20060206
邏輯運算符號
用於對某些條件進行測試返回值為
true
或
false.
包括
all,and,any,between,exists,like,not
等等
.
賦值運算符號
即“
=
”除了賦值操作外,賦值運算符還可以用於建立列標題和定義列值的表達式之間的關係。如
:
select
國家
=
'
中國
'
,
s_no
學號
,
s_name
姓名
from
student
where
s_no>
20060206
/*
國家
學號
姓名
---- -------- --------------------------------------------------
中國
20060207
赵智远
中國
20060208
王可
*/
字符串連接運算符
即“
+
”表示將兩個字符串連接起來形成一個新的字符串
select
'Hello'
+
' wufeng'
位
運算符
位運算符表示在兩個操作數之間執行按位進行運算的符號,操作數必須為整型數據類型之一及二進制字符串數據類型
select
1 &
2 --
邏輯與
select
1 |
2 --
邏輯或
select
1 ^
2 --
邏輯異或
select
~
2
--
邏輯取非
2
:流程控制
語句塊一程序中一個相對獨立的執行單元,它由
begin …end
括起來而形成的代碼段。其中
begin
表示語句塊的開始
,end
則表示語句塊的結束,可以嵌套定義。
2.1 IF
語句
在程序中,有的語句塊執行是有條件的,有時候需要在多個語句或者語句之間的執行作出選擇。
IF
是最基本的判斷控制語句。
2.1.1
IF
句型
--
如果學號
"20060202"
成績
及格
則輸出姓名成績
DECLARE
@no char
(
8),
@name char
(
8),
@avgrade numeric
(
3,
1)
SET
@no =
'20060202'
SELECT
@name =
s_name,
@avgrade =
s_avgrade
From
student
Where
s_no =
@no;
IF
@avgrade>=
60.0
BEGIN
PRINT
@name
PRINT
@avgrade
END
GO
/*
王丫
88.8
*/
注意:關鍵字
go
不是
T-SQL
語句,而是
T-SQL
語句的結束符,客戶端程序不會將
GO
傳給服務器,它只是
SSMS
等客戶端程序代碼編輯器能夠識別的命令。也就是說
GO
是用於定義批處理的關鍵字,兩個
GO
之間的
T-SQL
語句便形成了一個批。其好處在與,他可以將代碼分成若干個小段,即使前一個小段運行失敗,其他的可能會繼續運行。
2.1.2
IF…ELSE…
句型
--
如果學號
"20060202"
成績不及格則輸出姓名成績否則輸出學號
DECLARE
@no char
(
8),
@name char
(
8),
@avgrade numeric
(
3,
1)
SET
@no =
'20060202'
SELECT
@name =
s_name,
@avgrade =
s_avgrade
From
student
Where
s_no =
@no;
IF
@avgrade<
60.0
BEGIN
PRINT
@name
PRINT
@avgrade
END
ELSE
PRINT
@no
GO
/*
20060202
*/
2.1.
3
IF…ELSE
IF
…
ELSE
句型
GO
DECLARE
@no char
(
8),
@name char
(
8),
@avgrade numeric
(
3,
1)
SET
@no =
'20060202'
SELECT
@name =
s_name,
@avgrade =
s_avgrade
From
student
Where
s_no =
@no;
IF
@avgrade>=
90.0
PRINT
'
优秀
'
ELSE
IF
@avgrade>=
80.0
PRINT
'
良好
'
ELSE
IF
@avgrade>=
70.0
PRINT
'
中等
'
ELSE
IF
@avgrade>=
60.0
PRINT
'
及格
'
ELSE
PRINT
'
不及格
'
GO
/*
良好
*/
2.
2
CASE
結構
CASE
結構用與多出口的判斷情況。
CASE
結構實際上被當作一個函數執行,執行後都有一個返回值。有兩種類型
2.2.1
簡單式
case
函數
SELECT
学号
=
s_no,
姓名及爱
¦n=
CASE
s_no --
執行時先計算表示的值,
--
然後將計算結果與
when
後面表達式比較
--
如果相等則計算
then
後面的表達式,計算結果作為
case
函數返回值
--
但是兩者表達式必須相同或者可以隱式轉換
WHEN
'20060201'
THEN
'
李好,游泳
'
WHEN
'20060202'
THEN
'
王丫,登山
'
WHEN
'20060203'
THEN
'
王智高,滑雪
'
WHEN
'20060204'
THEN
'
赵刚,支部书
?'
WHEN
'20060205'
THEN
'
贾志,足球
'
WHEN
'20060206'
THEN
'
丽思,爱
¦n
不详
'
WHEN
'20060207'
THEN
'
赵智远
¡A
长
¶]'
WHEN
'20060208'
THEN
'
王可,山地自行车
'
ELSE
'
没有这人
'
END
FROM
student
2.2.1
搜索式
case
函數
SELECT
学号
=
s_no,
姓名
=
s_name,
成绩
µ¥
级
=
CASE
/*
搜索式
case
函數中
,
關鍵字
case
後面沒有表達式
,
且
when
後面的表達式
已被限定為布爾表達式
(
返回
true
或
false),
執行時從上到下依次計算每個
when
後面表達式的值如果值為
true
則計算
then
後面表達式的值
,
並將該值作為
case
函數的返回值
,
如果所有
when
後面均為
false
則計算
else
後面表達式的值並
將其返回作為
case
函數的值
.
*/
WHEN
s_avgrade>
90.0 THEN
'
优秀
'
WHEN
s_avgrade>
80.0 THEN
'
良好
'
WHEN
s_avgrade>
70.0 THEN
'
中等
'
WHEN
s_avgrade>
60.0 THEN
'
及格
'
ELSE
'
不及格
'
END
FROM
student
2.3 WHILE
語句
(
含
Break,Continue)
GO
DECLARE
@max numeric
(
3,
1),
@avg numeric
(
3,
1)
SET
@max =
(
SELECT
MAX
(
s_avgrade)
FROM
student)
WHILE
@max <
99
--
在
while
語句中如果表達式的值為真就重複執行
--
循環體內的語句
.
如果布爾表達式中有
select
--
語句必須用括號將
select
語句括起來
BEGIN
UPDATE
student
SET
s_avgrade =
s_avgrade +
s_avgrade *
0.005
SET
@max =
(
SELECT
MAX
(
s_avgrade)
FROM
student)
SET
@avg =
(
SELECT
MAX
(
s_avgrade)
FROM
student)
if
@avg>
76.0 break
--
將執行到
break
語句時程序將無條件退出當前循環體
,
執行出現在
end
--(
循環體結束標記
)
關鍵字後面的語句
if
@avg>
74.0 continue
--
當執行到
continue
語句時
,
程序將不執行
continue
語句後的所有語句
--
提前結束本次循環
(
並非退出循環
),
並重新開始新的循環
print
@avg
END
GO
2.4 GOTO
語句
GOTO
語句是一種無條件轉義語句,可以實現執行流程從一個地方轉到另外一個地方。
DECLARE
@s int
,
@sum int
SET
@s =
0
SET
@sum =
0
label1:
/*
label1
為定義的標籤
,
他是
goto
語句轉義的依據
,
標籤必須符號命名規則
無論是否使用
goto
語句標籤均可以作為注釋方法使用
.
當執行語句執行到
"goto lablel1"
時執行流程將無條件的轉到標籤所指向的地址
,
並從該地址
依次往下執行所遇到的語句
.
*/
SET
@s =
@s +
1
SET
@sum =
@sum +
@s
IF
@s <>
100 GOTO
label1
PRINT
@sum
2.5 TRY…CATCH
語句
GO
DELETE
FROM
student
GO
BEGIN
TRY
INSERT
INTO
student
Values
(
'20060201'
,
N'
李好
'
,
N'
男
'
,
'1987-1-10'
,
N'
计算机应
¥Î
技术
'
,
94.5,
N'
计算机系
'
)
INSERT
INTO
student
Values
(
'20060202'
,
N'
王丫
'
,
N'
女
'
,
'1987-2-23'
,
N'
计算机软
件
与理论
'
,
88.8,
N'
计算机系
'
)
INSERT
INTO
student
Values
(
'20060203'
,
N'
王智高
'
,
N'
男
'
,
'1986-121-25'
,
N'
网络
工
程
'
,
85.8,
N'
信息工程系
'
)
END
TRY
/*
當
try
塊內語句產生錯誤
(
拋出異常
)
則會將控制傳遞
catch
塊的第一個語句
當
try
塊所包含的語句沒有任何錯誤時
,
則在
try
塊中最後一個語句完成時後
將控制傳遞給緊跟在
end...catch
語句之後的語句
*/
BEGIN
CATCH
PRINT
N'
插入操作有错。
'
END
CATCH
;
select
*
from
student
2.6 RETURN
語句
Return
語句從過程,批處理,或者語句塊中無條件退出,
return
之後的語句不被執行,
return
之後可以跟整型表達式,當執行到
return
語句時先計算表達式的值
然後返回該值,如果
return
嵌入存儲過程該語句不能返回空值,否則生成警告信息並生成
0
值
select
1
return
select
2
2.7 waitfor
語句
格式為:
Waitfor {
delay
'time_to_pass'
|
Time
'time_to_execute'
}
其中
,
delay
子句用於設定
waitfor
語句所要等待的時間
(
這個時間後執行後面的語句
),
時間長短由後面
'time_to_pass'
指定
(
只能包含時間格式最長
24H)
time
子句用於設定
waitfor
語句等待的終結時刻由參數
'time_to_execute'
說明
不能指定日期值
.
:运算符
运算符是用来指定要在一个或者多个表达式中执行操作的一种符号
.
下面简单介绍
:
算术运算符号
select
+
2+
2
--'+'
表示加法或者正號前面表示正號後面表示加號
select
-
2+
1
--'-'
表示減法或者負號前面表示負號後面表示減號
select
-
2*
2
--'*'
表示乘法
select
13/
5,
13.0/
5 --'/'
表示除法注意兩個結果有何不同
select
13%
5
--'%'
表示取模
(
取餘數
)
比較運算符
用於測試兩個表達式的值之間的關係,這種關係是指等於,大於,小於等等。
比較運算符幾乎使用所有的表達式
(
除
text,ntext,image
等數據類型除外
)
if
3>
2
'3>2'
select
*
from
student
where
s_no>
20060206
邏輯運算符號
用於對某些條件進行測試返回值為
true
或
false.
包括
all,and,any,between,exists,like,not
等等
.
賦值運算符號
即“
=
”除了賦值操作外,賦值運算符還可以用於建立列標題和定義列值的表達式之間的關係。如
:
select
國家
=
'
中國
'
,
s_no
學號
,
s_name
姓名
from
student
where
s_no>
20060206
/*
國家
學號
姓名
---- -------- --------------------------------------------------
中國
20060207
赵智远
中國
20060208
王可
*/
字符串連接運算符
即“
+
”表示將兩個字符串連接起來形成一個新的字符串
select
'Hello'
+
' wufeng'
位
運算符
位運算符表示在兩個操作數之間執行按位進行運算的符號,操作數必須為整型數據類型之一及二進制字符串數據類型
select
1 &
2 --
邏輯與
select
1 |
2 --
邏輯或
select
1 ^
2 --
邏輯異或
select
~
2
--
邏輯取非
2
:流程控制
語句塊一程序中一個相對獨立的執行單元,它由
begin …end
括起來而形成的代碼段。其中
begin
表示語句塊的開始
,end
則表示語句塊的結束,可以嵌套定義。
2.1 IF
語句
在程序中,有的語句塊執行是有條件的,有時候需要在多個語句或者語句之間的執行作出選擇。
IF
是最基本的判斷控制語句。
2.1.1
IF
句型
--
如果學號
"20060202"
成績
及格
則輸出姓名成績
DECLARE
@no char
(
8),
@name char
(
8),
@avgrade numeric
(
3,
1)
SET
@no =
'20060202'
SELECT
@name =
s_name,
@avgrade =
s_avgrade
From
student
Where
s_no =
@no;
IF
@avgrade>=
60.0
BEGIN
@name
@avgrade
END
GO
/*
王丫
88.8
*/
注意:關鍵字
go
不是
T-SQL
語句,而是
T-SQL
語句的結束符,客戶端程序不會將
GO
傳給服務器,它只是
SSMS
等客戶端程序代碼編輯器能夠識別的命令。也就是說
GO
是用於定義批處理的關鍵字,兩個
GO
之間的
T-SQL
語句便形成了一個批。其好處在與,他可以將代碼分成若干個小段,即使前一個小段運行失敗,其他的可能會繼續運行。
2.1.2
IF…ELSE…
句型
--
如果學號
"20060202"
成績不及格則輸出姓名成績否則輸出學號
DECLARE
@no char
(
8),
@name char
(
8),
@avgrade numeric
(
3,
1)
SET
@no =
'20060202'
SELECT
@name =
s_name,
@avgrade =
s_avgrade
From
student
Where
s_no =
@no;
IF
@avgrade<
60.0
BEGIN
@name
@avgrade
END
ELSE
@no
GO
/*
20060202
*/
2.1.
3
IF…ELSE
IF
…
ELSE
句型
GO
DECLARE
@no char
(
8),
@name char
(
8),
@avgrade numeric
(
3,
1)
SET
@no =
'20060202'
SELECT
@name =
s_name,
@avgrade =
s_avgrade
From
student
Where
s_no =
@no;
IF
@avgrade>=
90.0
'
优秀
'
ELSE
IF
@avgrade>=
80.0
'
良好
'
ELSE
IF
@avgrade>=
70.0
'
中等
'
ELSE
IF
@avgrade>=
60.0
'
及格
'
ELSE
'
不及格
'
GO
/*
良好
*/
2.
2
CASE
結構
CASE
結構用與多出口的判斷情況。
CASE
結構實際上被當作一個函數執行,執行後都有一個返回值。有兩種類型
2.2.1
簡單式
case
函數
SELECT
学号
=
s_no,
姓名及爱
¦n=
CASE
s_no --
執行時先計算表示的值,
--
然後將計算結果與
when
後面表達式比較
--
如果相等則計算
then
後面的表達式,計算結果作為
case
函數返回值
--
但是兩者表達式必須相同或者可以隱式轉換
WHEN
'20060201'
THEN
'
李好,游泳
'
WHEN
'20060202'
THEN
'
王丫,登山
'
WHEN
'20060203'
THEN
'
王智高,滑雪
'
WHEN
'20060204'
THEN
'
赵刚,支部书
?'
WHEN
'20060205'
THEN
'
贾志,足球
'
WHEN
'20060206'
THEN
'
丽思,爱
¦n
不详
'
WHEN
'20060207'
THEN
'
赵智远
¡A
长
¶]'
WHEN
'20060208'
THEN
'
王可,山地自行车
'
ELSE
'
没有这人
'
END
FROM
student
2.2.1
搜索式
case
函數
SELECT
学号
=
s_no,
姓名
=
s_name,
成绩
µ¥
级
=
CASE
/*
搜索式
case
函數中
,
關鍵字
case
後面沒有表達式
,
且
when
後面的表達式
已被限定為布爾表達式
(
返回
true
或
false),
執行時從上到下依次計算每個
when
後面表達式的值如果值為
true
則計算
then
後面表達式的值
,
並將該值作為
case
函數的返回值
,
如果所有
when
後面均為
false
則計算
else
後面表達式的值並
將其返回作為
case
函數的值
.
*/
WHEN
s_avgrade>
90.0 THEN
'
优秀
'
WHEN
s_avgrade>
80.0 THEN
'
良好
'
WHEN
s_avgrade>
70.0 THEN
'
中等
'
WHEN
s_avgrade>
60.0 THEN
'
及格
'
ELSE
'
不及格
'
END
FROM
student
2.3 WHILE
語句
(
含
Break,Continue)
GO
DECLARE
@max numeric
(
3,
1),
@avg numeric
(
3,
1)
SET
@max =
(
SELECT
MAX
(
s_avgrade)
FROM
student)
WHILE
@max <
99
--
在
while
語句中如果表達式的值為真就重複執行
--
循環體內的語句
.
如果布爾表達式中有
select
--
語句必須用括號將
select
語句括起來
BEGIN
UPDATE
student
SET
s_avgrade =
s_avgrade +
s_avgrade *
0.005
SET
@max =
(
SELECT
MAX
(
s_avgrade)
FROM
student)
SET
@avg =
(
SELECT
MAX
(
s_avgrade)
FROM
student)
if
@avg>
76.0 break
--
將執行到
break
語句時程序將無條件退出當前循環體
,
執行出現在
end
--(
循環體結束標記
)
關鍵字後面的語句
if
@avg>
74.0 continue
--
當執行到
continue
語句時
,
程序將不執行
continue
語句後的所有語句
--
提前結束本次循環
(
並非退出循環
),
並重新開始新的循環
@avg
END
GO
2.4 GOTO
語句
GOTO
語句是一種無條件轉義語句,可以實現執行流程從一個地方轉到另外一個地方。
DECLARE
@s int
,
@sum int
SET
@s =
0
SET
@sum =
0
label1:
/*
label1
為定義的標籤
,
他是
goto
語句轉義的依據
,
標籤必須符號命名規則
無論是否使用
goto
語句標籤均可以作為注釋方法使用
.
當執行語句執行到
"goto lablel1"
時執行流程將無條件的轉到標籤所指向的地址
,
並從該地址
依次往下執行所遇到的語句
.
*/
SET
@s =
@s +
1
SET
@sum =
@sum +
@s
IF
@s <>
100 GOTO
label1
@sum
2.5 TRY…CATCH
語句
GO
DELETE
FROM
student
GO
BEGIN
TRY
INSERT
INTO
student
Values
(
'20060201'
,
N'
李好
'
,
N'
男
'
,
'1987-1-10'
,
N'
计算机应
¥Î
技术
'
,
94.5,
N'
计算机系
'
)
INSERT
INTO
student
Values
(
'20060202'
,
N'
王丫
'
,
N'
女
'
,
'1987-2-23'
,
N'
计算机软
件
与理论
'
,
88.8,
N'
计算机系
'
)
INSERT
INTO
student
Values
(
'20060203'
,
N'
王智高
'
,
N'
男
'
,
'1986-121-25'
,
N'
网络
工
程
'
,
85.8,
N'
信息工程系
'
)
END
TRY
/*
當
try
塊內語句產生錯誤
(
拋出異常
)
則會將控制傳遞
catch
塊的第一個語句
當
try
塊所包含的語句沒有任何錯誤時
,
則在
try
塊中最後一個語句完成時後
將控制傳遞給緊跟在
end...catch
語句之後的語句
*/
BEGIN
CATCH
N'
插入操作有错。
'
END
CATCH
;
select
*
from
student
2.6 RETURN
語句
Return
語句從過程,批處理,或者語句塊中無條件退出,
return
之後的語句不被執行,
return
之後可以跟整型表達式,當執行到
return
語句時先計算表達式的值
然後返回該值,如果
return
嵌入存儲過程該語句不能返回空值,否則生成警告信息並生成
0
值
select
1
return
select
2
2.7 waitfor
語句
格式為:
Waitfor {
delay
'time_to_pass'
|
Time
'time_to_execute'
}
其中
,
delay
子句用於設定
waitfor
語句所要等待的時間
(
這個時間後執行後面的語句
),
時間長短由後面
'time_to_pass'
指定
(
只能包含時間格式最長
24H)
time
子句用於設定
waitfor
語句等待的終結時刻由參數
'time_to_execute'
說明
不能指定日期值
.
相关文章推荐
- T-SQL入门攻略之6-T-SQL运算符与流程控制
- T-SQL入门攻略之6-T-SQL运算符与流程控制
- 【JavaSE入门系列】第04章_运算符表达式流程控制
- MS SQL入门基础:SQL 流程控制命令
- java 从零开始,学习笔记之基础入门<运算符表达式和流程控制>(六)
- 关于SQL 存储过程入门基础(流程控制)
- 关于SQL 存储过程入门基础(流程控制)
- SQL 存储过程入门(流程控制3
- MS SQL入门基础:SQL 流程控制命令
- SQL 存储过程入门(流程控制)(三)
- PL/SQL --> 流程控制
- 【Justep X3平台上的大型企业应用案例分享】X3平台外的流程控制纯SQL语句实现
- PHP--字符串 运算符 控制流程 以及 foreach
- java学习 java---运算符以及流程控制
- SQL 流程控制语句 之四 WAITFOR语句介绍
- #码神心得_06# 运算符、循环流程控制、数组
- C#入门之流程控制练习题(排序)
- Java入门 之 流程控制语句
- SQL 流程控制语句 之五 return 语句介绍
- Python入门-流程控制