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

下載本文檔

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

文檔簡(jiǎn)介

第六章

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

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

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

0xAE46.1常量3.bit常量

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

datetime常量使用單引號(hào)括起來(lái)的特定格式的字符日期值表示。例如:

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

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

18942+145345234-21474836486.decimal常量

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

1894.12042.056.1常量7.float和real常量

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

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

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

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

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

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

DECLARE@MyVariableintSET@MyVariable=1

GO

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

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

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

DECLARE@myvarchar(20)

SET@myvar='Thisisatest'

--用SET賦值

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

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

結(jié)果為'abcdef'

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

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

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

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

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

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

TRUE、FALSE。

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

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

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

NOT(3>8)

結(jié)果為T(mén)RUE

(3>8)AND(5<6)

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

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

BEGIN{sql語(yǔ)句|語(yǔ)句塊}END

其中,sql語(yǔ)句為一條Transact-SQL語(yǔ)句;語(yǔ)句塊為用BEGIN和END定義的語(yǔ)句塊??梢钥闯?,在一個(gè)語(yǔ)句塊中可以包含另一個(gè)語(yǔ)句塊。216.4.2IF…ELSE語(yǔ)句IF…ELSE語(yǔ)句的語(yǔ)法如下:

IF布爾表達(dá)式

{sql語(yǔ)句1|語(yǔ)句塊1}[ELSE{sql語(yǔ)句2|語(yǔ)句塊2}]

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

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

FROMStudent

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

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

CASE輸入表達(dá)式

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

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

功能:

計(jì)算輸入表達(dá)式的值,依次與每個(gè)WHEN子句中的when_表達(dá)式進(jìn)行比較,直到發(fā)現(xiàn)第一個(gè)與輸入表達(dá)式相等的表達(dá)式時(shí),便返回該WHEN子句的THEN后面所指定的結(jié)果表達(dá)式。如果不存在與輸入表達(dá)式相等的when_表達(dá)式,則當(dāng)指定ELSE子句時(shí)將返回ELSE字句指定的結(jié)果表達(dá)式,若沒(méi)有指定ELSE子句,則返回NULL值。256.4.3CASE函數(shù)【例】將數(shù)據(jù)庫(kù)中的Student表的StuSex字段的值用0和1分別顯示“男”和“女”。SELECT'學(xué)號(hào)'=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ì)算每個(gè)WHEN子句中的布爾表達(dá)式,返回第一個(gè)值為T(mén)RUE的布爾表達(dá)式之后對(duì)應(yīng)的的結(jié)果表達(dá)式值。如果每一個(gè)WHEN子句之后的布爾表達(dá)式為都不為T(mén)RUE,則當(dāng)指定ELSE子句時(shí),返回ELSE子句中的結(jié)果表達(dá)式的值,若沒(méi)有指定ELSE子句,則返回NULL值。276.4.3CASE函數(shù)【例】將Student表顯示為如下格式:學(xué)號(hào)年齡A00001小于20歲A00002超過(guò)20歲SELECT'學(xué)號(hào)'=StuID,'年齡'

=

CASEWHENdatediff(yy,StuBirthDate,getdate())<20THEN'小于20歲'WHENdatediff(yy,StuBirthDate,getdate())>=20THEN'超過(guò)20歲'ENDFROMStudent286.4.4WHILE循環(huán)格式:WHILE布爾表達(dá)式{sql語(yǔ)句|語(yǔ)句塊}功能:從WHILE語(yǔ)句開(kāi)始,計(jì)算布爾表達(dá)式的值,當(dāng)布爾表達(dá)式的值為T(mén)RUE時(shí),執(zhí)行循環(huán)體,然后返回WHILE語(yǔ)句,再計(jì)算布爾表達(dá)式的值,如果仍為T(mén)RUE,則再執(zhí)行循環(huán)體,……,直到某次布爾表達(dá)式的值為FALSE時(shí),則不執(zhí)行循環(huán)體,而直接執(zhí)行WHILE循環(huán)之后的其他語(yǔ)句。296.4.4WHILE循環(huán)【例】對(duì)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)體中可以包含語(yǔ)句:

BREAK語(yǔ)句

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

CONTINUE語(yǔ)句

執(zhí)行CONTINUE語(yǔ)句將使循環(huán)跳過(guò)CONTINUE語(yǔ)句后面的語(yǔ)句,回到WHILE循環(huán)的第一條語(yǔ)句。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語(yǔ)句格式:

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

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

WAITFOR{DELAY'時(shí)間'|TIME'時(shí)間'}功能:

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

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

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

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論