T-SQL入门攻略之6-T-SQL运算符与流程控制

本文详细介绍了T-SQL中的运算符(算术、比较、逻辑、字符串连接、位运算)与流程控制(IF、CASE、WHILE、GOTO语句),并提供了实际例子进行说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--> Title : T-SQL入门攻略6-T-SQL运算符与流程控制

--> Author : wufeng4552

--> Date : 2010-03-30

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

邏輯運算符號

用於對某些條件進行測試返回值為truefalse.包括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…ELSEIFELSE句型

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後面的表達式

已被限定為布爾表達式(返回truefalse),執行時從上到下依次計算每個

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語句轉義的依據,標籤必須符號命名規則

無論是否使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值