《sql server數(shù)據(jù)庫應(yīng)用與實(shí)踐教程》課件第6章-表達(dá)式與流程控制_第1頁
《sql server數(shù)據(jù)庫應(yīng)用與實(shí)踐教程》課件第6章-表達(dá)式與流程控制_第2頁
《sql server數(shù)據(jù)庫應(yīng)用與實(shí)踐教程》課件第6章-表達(dá)式與流程控制_第3頁
《sql server數(shù)據(jù)庫應(yīng)用與實(shí)踐教程》課件第6章-表達(dá)式與流程控制_第4頁
《sql server數(shù)據(jù)庫應(yīng)用與實(shí)踐教程》課件第6章-表達(dá)式與流程控制_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第六章

表達(dá)式與流程控制2目標(biāo)常量、變量及表達(dá)式流程控制語句及注釋語句36.1常量常量也稱為標(biāo)量值,是表示一個特定數(shù)據(jù)值的符號。常量的格式取決于它所表示的值的數(shù)據(jù)類型。1.字符串常量

字符串常量用單引號括起來。如果要在字符串中包含單引號,則可以使用連續(xù)的兩個單引號來表示。例如:

'Chinese‘2.二進(jìn)制常量二進(jìn)制常量使用0x作為前輟,后面跟隨十六進(jìn)制數(shù)字字符串。例如:

0xAE46.1常量3.bit常量

bit常量使用False或True表示。4.datetime常量

datetime常量使用單引號括起來的特定格式的字符日期值表示。例如:

'2011-09-1614:30:24‘5.整型常量

由正、負(fù)號和數(shù)字0~9組成,正號可以省略。例如:

18942+145345234-21474836486.decimal常量

由正、負(fù)號、小數(shù)點(diǎn)、數(shù)字0~9組成,正號可以省略。例如:

1894.12042.056.1常量7.float和real常量

使用科學(xué)記數(shù)法表示。例如:

101.5E50.5E-2+123E-3-12E58.money常量

以可選小數(shù)點(diǎn)和可選貨幣符號作為前綴的一串?dāng)?shù)字??梢詭д?、負(fù)號。例如:

$12$542023.14-$45.56+$423456.9966.2變量變量是可以保存特定類型的單個數(shù)據(jù)值的對象,SQLServer的變量分為兩種:用戶自己定義的局部變量和系統(tǒng)提供的全局變量。局部變量的作用范圍僅限制在程序的內(nèi)部。常用來保存臨時數(shù)據(jù)。局部變量的定義:DECLARE{@局部變量名數(shù)據(jù)類型}[,…n]注:局部變量名:必須以@開頭,符合標(biāo)識符的命名規(guī)則數(shù)據(jù)類型:系統(tǒng)定義的數(shù)據(jù)類型;用戶定義數(shù)據(jù)類型。不能是text、ntext或image數(shù)據(jù)類型。局部變量定義后初始值為NULL。76.2變量【例】定義變量@MyCounter為int類型:

DECLARE@MyCounterint【例】定義變量@LastName為nvarchar(30)類型,定義變量@FirstName為nvarchar(20)類型,定義變量@State為nchar(2)類型:

DECLARE@LastNamenvarchar(30),@FirstNamenvarchar(20),@Statenchar(2)86.2變量【例4-5】執(zhí)行下列語句將產(chǎn)生語法錯誤,因?yàn)樵谝粋€批處理中所引用的變量是在另一個批處理中定義的。

DECLARE@MyVariableintSET@MyVariable=1

GO

--結(jié)束當(dāng)前批

SELECT*FROMEmployeesWHEREEmployeeID=@MyVariable96.2變量2.局部變量的賦值(1)用SET語句給局部變量賦值格式:

SET@局部變量名=表達(dá)式【例】定義局部變量@myvar,并為其賦值,最后顯示@myvar的值。

DECLARE@myvarchar(20)

SET@myvar='Thisisatest'

--用SET賦值

PRINT@myvar--用PRINT語句顯示106.2變量(2)用SELECT語句給局部變量賦值:格式:

SELECT{@局部變量名=表達(dá)式}[,…n]【例】定義局部變量@myvar1和@myvar2,并為它們賦值,最后顯示@myvar1和@myvar2的值:

DECLARE@myvar1char(20),@myvar2char(20)

SELECT@myvar1='Hello!',@myvar2='Howareyou!'

--用SELECT賦值

SELECT@myvar1,@myvar2

--用SELECT顯示116.2.2局部變量

全局變量是SQLServer系統(tǒng)內(nèi)部使用的變量,全局變量具有以下特點(diǎn):全局變量不是由用戶的程序定義的,它們是SQLServer系統(tǒng)在服務(wù)器級定義的。引用全局變量時,必須以標(biāo)記符“@@”開頭。用戶可以在程序中用全局變量來測試系統(tǒng)的設(shè)定值或者是Transact-SQL命令執(zhí)行后的狀態(tài)值。例如:@@VERSION用于返回SQLServer當(dāng)前安裝的日期、版本和處理器類型;@@CONNECTIONS用于返回自上次啟動SQLServer以來連接或試圖連接的次數(shù);@@LANGUAGE用于返回當(dāng)前使用的語言名。126.3表達(dá)式SQLServer運(yùn)算符有以下幾類:算術(shù)運(yùn)算符字符串串聯(lián)運(yùn)算符賦值運(yùn)算符比較運(yùn)算符邏輯運(yùn)算符位運(yùn)算符一元運(yùn)算符13算術(shù)運(yùn)算符算術(shù)運(yùn)算符包括:+、?、*、/、%(取模)%:用于返回一個整數(shù)除以另一個整數(shù)的余數(shù)。例如:12%5=2由算術(shù)運(yùn)算符組成的表達(dá)式稱為算術(shù)表達(dá)式。14字符串串聯(lián)運(yùn)算符字符串串聯(lián)運(yùn)算符:+作用:將兩個字符串串聯(lián)起來,構(gòu)成字符串表達(dá)式。例如:'abc'+'def'

結(jié)果為'abcdef'

'123'+'456'結(jié)果為'123456'15賦值運(yùn)算符賦值運(yùn)算符:=例如:

DECLARE@MyCounterintSET@MyCounter=116比較運(yùn)算符比較運(yùn)算符:=><>=<=<>!=!<!>作用:

比較兩個表達(dá)式的大小。比較結(jié)果:

布爾值TRUE、FALSE、UNKNOWNTRUE:表示表達(dá)式的結(jié)果為真

FALSE:表示表達(dá)式的結(jié)果為假

UNKNOWN:當(dāng)SETANSI_NULLS為ON時,帶有一個或兩個NULL表達(dá)式的比較運(yùn)算返回UNKNOWN。當(dāng)SETANSI_NULLS為OFF時,上述規(guī)則同樣適用,但當(dāng)兩個表達(dá)式都為NULL時,返回結(jié)果為TRUE。例如,NULL=NULL返回TRUE。17邏輯運(yùn)算符邏輯運(yùn)算符:NOTANDOR作用:對具有布爾值的表達(dá)式進(jìn)行運(yùn)算。運(yùn)算結(jié)果:

TRUE、FALSE。

NOT:一元運(yùn)算符,對布爾表達(dá)式的值取反

AND:只有兩個布爾表達(dá)式的值都為TRUE,運(yùn)算結(jié)果才為TRUE,否則結(jié)果為FALSE。

OR:如果兩個布爾表達(dá)式中的一個為TRUE,那么運(yùn)算結(jié)果為TRUE。只有兩個布爾表達(dá)式都為FALSE,運(yùn)算結(jié)果才為FALSE。18邏輯運(yùn)算符例:

NOT(3>8)

結(jié)果為TRUE

(3>8)AND(5<6)

結(jié)果為FALSE(3>8)Or(5<6)

結(jié)果為TRUE196.4流程控制語句流程控制語句用于控制Transact-SQL語句、語句塊和存儲過程的執(zhí)行流程。這些語句可用于Transact-SQL語句、批處理和存儲過程中。如果不使用流程控制語句,則各Transact-SQL語句按其出現(xiàn)的先后順序執(zhí)行。使用流程控制語句可以按需要控制語句的執(zhí)行次序和執(zhí)行分支。206.4.1BEGIN…END語句BEGIN…END語句用于將多個Transact-SQL語句定義成一個語句塊。語句塊可以在程序中視為一個單元處理。BEGIN…END語句的語法如下:

BEGIN{sql語句|語句塊}END

其中,sql語句為一條Transact-SQL語句;語句塊為用BEGIN和END定義的語句塊??梢钥闯觯谝粋€語句塊中可以包含另一個語句塊。216.4.2IF…ELSE語句IF…ELSE語句的語法如下:

IF布爾表達(dá)式

{sql語句1|語句塊1}[ELSE{sql語句2|語句塊2}]

布爾表達(dá)式:返回TRUE或FALSE的表達(dá)式;

sql語句:一條Transact-SQL語句;語句塊:用BEGIN和END定義的語句組。功能:當(dāng)布爾表達(dá)式的值為TRUE時,執(zhí)行sql語句1或語句塊1;當(dāng)布爾表達(dá)式的值為FALSE時,執(zhí)行sql語句2或語句塊2。如果省略ELSE部分,則表示當(dāng)布爾表達(dá)式的值為FALSE時不執(zhí)行任何操作。226.4.2IF…ELSE語句【例】設(shè)有一個“學(xué)生信息”數(shù)據(jù)庫,數(shù)據(jù)庫中有一個“Student”表,該表包含StuID、StuName、StuBirthDate等列。要給本月出生的學(xué)生舉辦慶祝生日會,每月1日選出要過生日的學(xué)生名單。解決方案:DECLARE@TodayintSET@Today=DAY(GETDATE())IF(@Today=1)BEGINSELECTStuID,StuName

FROMStudent

WHEREMONTH(StuBirthDate)=MONTH(GETDATE())END236.4.3CASE函數(shù)CASE函數(shù)可以計(jì)算多個條件式,并返回其中一個符合條件的結(jié)果表達(dá)式。按照使用形式的不同,可以分為簡單CASE函數(shù)和CASE搜索函數(shù):簡單CASE函數(shù)將某個表達(dá)式與一組簡單表達(dá)式進(jìn)行比較以確定返回的結(jié)果。

CASE搜索函數(shù)計(jì)算一組布爾表達(dá)式以確定返回的結(jié)果。246.4.3CASE函數(shù)1.簡單CASE函數(shù)

CASE輸入表達(dá)式

WHENwhen_表達(dá)式THEN結(jié)果表達(dá)式

[...n][ELSE結(jié)果表達(dá)式]END

功能:

計(jì)算輸入表達(dá)式的值,依次與每個WHEN子句中的when_表達(dá)式進(jìn)行比較,直到發(fā)現(xiàn)第一個與輸入表達(dá)式相等的表達(dá)式時,便返回該WHEN子句的THEN后面所指定的結(jié)果表達(dá)式。如果不存在與輸入表達(dá)式相等的when_表達(dá)式,則當(dāng)指定ELSE子句時將返回ELSE字句指定的結(jié)果表達(dá)式,若沒有指定ELSE子句,則返回NULL值。256.4.3CASE函數(shù)【例】將數(shù)據(jù)庫中的Student表的StuSex字段的值用0和1分別顯示“男”和“女”。SELECT'學(xué)號'=StuID,'性別'=CASEStuSexWHEN'0'THEN'男'WHEN'1'THEN'女‘ENDFROMStudent266.4.3CASE函數(shù)2.CASE搜索函數(shù)

CASEWHEN布爾表達(dá)式THEN結(jié)果表達(dá)式

[...n][ELSE結(jié)果表達(dá)式]END

功能:依次計(jì)算每個WHEN子句中的布爾表達(dá)式,返回第一個值為TRUE的布爾表達(dá)式之后對應(yīng)的的結(jié)果表達(dá)式值。如果每一個WHEN子句之后的布爾表達(dá)式為都不為TRUE,則當(dāng)指定ELSE子句時,返回ELSE子句中的結(jié)果表達(dá)式的值,若沒有指定ELSE子句,則返回NULL值。276.4.3CASE函數(shù)【例】將Student表顯示為如下格式:學(xué)號年齡A00001小于20歲A00002超過20歲SELECT'學(xué)號'=StuID,'年齡'

=

CASEWHENdatediff(yy,StuBirthDate,getdate())<20THEN'小于20歲'WHENdatediff(yy,StuBirthDate,getdate())>=20THEN'超過20歲'ENDFROMStudent286.4.4WHILE循環(huán)格式:WHILE布爾表達(dá)式{sql語句|語句塊}功能:從WHILE語句開始,計(jì)算布爾表達(dá)式的值,當(dāng)布爾表達(dá)式的值為TRUE時,執(zhí)行循環(huán)體,然后返回WHILE語句,再計(jì)算布爾表達(dá)式的值,如果仍為TRUE,則再執(zhí)行循環(huán)體,……,直到某次布爾表達(dá)式的值為FALSE時,則不執(zhí)行循環(huán)體,而直接執(zhí)行WHILE循環(huán)之后的其他語句。296.4.4WHILE循環(huán)【例】對1到100之間的數(shù)求和。DECLARE@iint,@sumintSET@i=1SET@sum=0WHILE@i<=100BEGINSET@sum=@sum+@iSET@i=@i+1ENDPRINT‘1到100之間數(shù)的和為’+Convert(char(10),@sum)306.4.5BREAK和CONTINUE在循環(huán)體中可以包含語句:

BREAK語句

執(zhí)行BREAK語句將完全跳出循環(huán),結(jié)束WHILE循環(huán)的執(zhí)行。

CONTINUE語句

執(zhí)行CONTINUE語句將使循環(huán)跳過CONTINUE語句后面的語句,回到WHILE循環(huán)的第一條語句。316.4.5BREAK和CONTINUEDECLARE@iint,@sumintSET@i=0WHILE@i<10BEGINSET@i=@i+1 IF(@i=6) PRINTConvert(char(10),@i) ENDBREAK;CONTINUE;326.4.6RETURN語句格式:

RETURN[整數(shù)表達(dá)式]功能:

用于無條件地終止一個查詢、存儲過程或者批處理,當(dāng)執(zhí)行RETURN語句時,位于RETURN語句之后的程序?qū)⒉粫粓?zhí)行。說明:RETURN:在存儲過程中可以在RETURN后面使用一個具有整數(shù)值的表達(dá)式,用于向調(diào)用過程或應(yīng)用程序返回整型值。(關(guān)于存儲過程的使用將在第7章介紹)336.4.8WAITFOR語句格式:

WAITFOR{DELAY'時間'|TIME'時間'}功能:

用于暫時停止SQL語句、語句塊或者存儲過程等的執(zhí)行,直到所設(shè)定的時間已過或者所設(shè)定的時間已到才繼續(xù)執(zhí)行。說明:

DELAY:使用該關(guān)鍵字表示其后的時間應(yīng)為時間間隔,該時間間隔最長可達(dá)24小時.

TIME:使用該關(guān)鍵字表示其后的時間用于指示要等待到的時間點(diǎn),格式為:hh:mm:ss。346.4.8WAITFOR語句【例】在一分鐘以后打印“HELLO”,代碼如下:BEGINWAITFORDELAY'00:01'PRINT'HELLO'END【例】在晚上10:20時打印“HELLO”。BEGINWAITFORTIME'22:20'PRINT'HELLO'END356.5注釋語句

注釋用于對代碼行或代碼段進(jìn)行說明,或暫時禁用某些代碼行。注釋語句不被編譯器編譯。注釋是程序代碼中不執(zhí)行的文本字符串。使用注釋對代碼進(jìn)行說明,可以使程序代碼更易于理解和

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論