T-SQL入门攻略之6-T-SQL运算符与流程控制
T-SQL入门攻略之6-T-SQL运算符与流程控制,有需要的朋友可以参考下。
1:运算符
运算符是用来指定要在一个或者多个表达式中执行操作的一种符号.下面简单介绍:
算术运算符号
select+2+2--'+'表示加法或者正號前面表示正號後面表示加號
select-2+1--'-'表示減法或者負號前面表示負號後面表示減號
select-2*2--'*'表示乘法
select13/5,13.0/5--'/'表示除法注意兩個結果有何不同
select13%5--'%'表示取模(取餘數)
比較運算符
用於測試兩個表達式的值之間的關係,這種關係是指等於,大於,小於等等。
比較運算符幾乎使用所有的表達式(除text,ntext,image等數據類型除外)
if3>2
print'3>2'
select*
fromstudent
wheres_no>20060206
邏輯運算符號
用於對某些條件進行測試返回值為true或false.包括all,and,any,between,exists,like,not等等.
賦值運算符號
即“=”除了賦值操作外,賦值運算符還可以用於建立列標題和定義列值的表達式之間的關係。如:
select
國家='中國',
s_no學號,
s_name姓名
fromstudent
wheres_no>20060206
/*
國家學號姓名
---- -------- --------------------------------------------------
中國20060207赵智远
中國20060208王可
*/
字符串連接運算符
即“+”表示將兩個字符串連接起來形成一個新的字符串
select'Hello'+' wufeng'
位運算符
位運算符表示在兩個操作數之間執行按位進行運算的符號,操作數必須為整型數據類型之一及二進制字符串數據類型
select1&2--邏輯與
select1|2--邏輯或
select1^2--邏輯異或
select~2--邏輯取非
2:流程控制
語句塊一程序中一個相對獨立的執行單元,它由begin …end括起來而形成的代碼段。其中begin表示語句塊的開始,end則表示語句塊的結束,可以嵌套定義。
2.1 IF語句
在程序中,有的語句塊執行是有條件的,有時候需要在多個語句或者語句之間的執行作出選擇。IF是最基本的判斷控制語句。
2.1.1IF句型
--如果學號"20060202"成績及格則輸出姓名成績
DECLARE@nochar(8),@namechar(8),@avgradenumeric(3,1)
SET@no='20060202'
SELECT@name=s_name,
@avgrade=s_avgrade
Fromstudent
Wheres_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.2IF…ELSE…句型
--如果學號"20060202"成績不及格則輸出姓名成績否則輸出學號
DECLARE@nochar(8),@namechar(8),@avgradenumeric(3,1)
SET@no='20060202'
SELECT@name=s_name,@avgrade=s_avgrade
Fromstudent
Wheres_no=@no;
IF@avgrade<60.0
BEGIN
PRINT@name
PRINT@avgrade
END
ELSE
PRINT@no
GO
/*
20060202
*/
2.1.3IF…ELSEIF…ELSE句型
GO
DECLARE@nochar(8),@namechar(8),@avgradenumeric(3,1)
SET@no='20060202'
SELECT@name=s_name,@avgrade=s_avgrade
Fromstudent
Wheres_no=@no;
IF@avgrade>=90.0
PRINT'优秀'
ELSEIF@avgrade>=80.0
PRINT'良好'
ELSEIF@avgrade>=70.0
PRINT'中等'
ELSEIF@avgrade>=60.0
PRINT'及格'
ELSE
PRINT'不及格'
GO
/*
良好
*/
2.2CASE結構
CASE結構用與多出口的判斷情況。CASE結構實際上被當作一個函數執行,執行後都有一個返回值。有兩種類型
2.2.1簡單式case函數
SELECT学号=s_no,姓名及爱n=
CASEs_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
FROMstudent
2.2.1搜索式case函數
SELECT学号=s_no,
姓名=s_name,
成绩级=
CASE
/*搜索式case函數中,關鍵字case後面沒有表達式,且when後面的表達式
已被限定為布爾表達式(返回true或false),執行時從上到下依次計算每個
when後面表達式的值如果值為true則計算then後面表達式的值,並將該值作為
case函數的返回值,如果所有when後面均為false則計算else後面表達式的值並
將其返回作為case函數的值.
*/
WHENs_avgrade>90.0THEN'优秀'
WHENs_avgrade>80.0THEN'良好'
WHENs_avgrade>70.0THEN'中等'
WHENs_avgrade>60.0THEN'及格'
ELSE'不及格'
END
FROMstudent
2.3 WHILE語句(含Break,Continue)
GO
DECLARE@maxnumeric(3,1),@avgnumeric(3,1)
SET@max=(SELECTMAX(s_avgrade)FROMstudent)
WHILE@max<99
--在while語句中如果表達式的值為真就重複執行
--循環體內的語句.如果布爾表達式中有select
--語句必須用括號將select語句括起來
BEGIN
UPDATEstudent
SETs_avgrade=s_avgrade+s_avgrade*0.005
SET@max=(SELECTMAX(s_avgrade)FROMstudent)
SET@avg=(SELECTMAX(s_avgrade)FROMstudent)
if@avg>76.0break
--將執行到break語句時程序將無條件退出當前循環體,執行出現在end
--(循環體結束標記)關鍵字後面的語句
if@avg>74.0continue
--當執行到continue語句時,程序將不執行continue語句後的所有語句
--提前結束本次循環(並非退出循環),並重新開始新的循環
print@avg
END
GO
2.4 GOTO語句
GOTO語句是一種無條件轉義語句,可以實現執行流程從一個地方轉到另外一個地方。
DECLARE@sint,@sumint
SET@s=0
SET@sum=0
label1:
/*
label1為定義的標籤,他是goto語句轉義的依據,標籤必須符號命名規則
無論是否使用goto語句標籤均可以作為注釋方法使用.當執行語句執行到
"goto lablel1"時執行流程將無條件的轉到標籤所指向的地址,並從該地址
依次往下執行所遇到的語句.
*/
SET@s=@s+1
SET@sum=@sum+@s
IF@s<>100GOTOlabel1
PRINT@sum
2.5 TRY…CATCH語句
GO
DELETEFROMstudent
GO
BEGINTRY
INSERTINTOstudent
Values('20060201',N'李好',N'男','1987-1-10',N'计算机应技术',94.5,N'计算机系')
INSERTINTOstudent
Values('20060202',N'王丫',N'女','1987-2-23',N'计算机软件与理论',88.8,N'计算机系')
INSERTINTOstudent
Values('20060203',N'王智高',N'男','1986-121-25',N'网络工程',85.8,N'信息工程系')
ENDTRY
/*
當try塊內語句產生錯誤(拋出異常)則會將控制傳遞catch塊的第一個語句
當try塊所包含的語句沒有任何錯誤時,則在try塊中最後一個語句完成時後
將控制傳遞給緊跟在end...catch語句之後的語句
*/
BEGINCATCH
PRINTN'插入操作有错。'
ENDCATCH;
select*fromstudent
2.6 RETURN語句
Return語句從過程,批處理,或者語句塊中無條件退出,return之後的語句不被執行,return之後可以跟整型表達式,當執行到return語句時先計算表達式的值
然後返回該值,如果return嵌入存儲過程該語句不能返回空值,否則生成警告信息並生成0值
select1
return
select2
2.7 waitfor語句
格式為:
Waitfor {delay'time_to_pass'
|
Time'time_to_execute'
}
其中,
delay子句用於設定waitfor語句所要等待的時間(這個時間後執行後面的語句),時間長短由後面'time_to_pass'指定(只能包含時間格式最長24H)
time子句用於設定waitfor語句等待的終結時刻由參數'time_to_execute'說明
不能指定日期值.
猜你在找