版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第6章T-SQL語言——T-SQL語言簡介T-SQL語言簡介T-SQL語言由以下幾部分組成。(1)數(shù)據(jù)定義語言(DataDefinitionLanauage,簡稱DDL)。DDL用于執(zhí)行數(shù)據(jù)庫的任務,對數(shù)據(jù)庫及數(shù)據(jù)庫中的各種對象進行創(chuàng)建、刪除、修改等操作。如前所述,數(shù)據(jù)庫對象主要包括表、默認約束、規(guī)則、視圖、觸發(fā)器和存儲過程。DDL包括的主要語句及功能如表。語
句功
能CREATE創(chuàng)建數(shù)據(jù)庫或數(shù)據(jù)庫對象ALTER對數(shù)據(jù)庫或數(shù)據(jù)庫對象進行修改DROP刪除數(shù)據(jù)庫或數(shù)據(jù)庫對象(2)數(shù)據(jù)操縱語言(DataManipulationLanguage,簡稱DML)。DML用于操縱數(shù)據(jù)庫中的各種對象,檢索和修改數(shù)據(jù)。DML包括的主要語句及功能如表。語
句功
能SELECT從表或視圖中檢索數(shù)據(jù)INSERT將數(shù)據(jù)插入到表或視圖中UPDATE修改表或視圖中的數(shù)據(jù)DELETE從表或視圖中刪除數(shù)據(jù)T-SQL語言簡介(3)數(shù)據(jù)控制語言(DataManagementLanguage,簡稱DCL)。DCL用于安全管理,確定哪些用戶可以查看或修改數(shù)據(jù)庫中的數(shù)據(jù)。DCL包括的主要語句及功能如表。語
句功
能GRANT授予權限REVOKE收回權限DENY收回權限,并禁止從其他角色繼承許可權限(4)T-SQL增加的語言元素。這部分不是ANSISQL所包含的內容,而是Microsoft公司為了用戶編程的方便而增加的語言元素,包括變量、運算符、流程控制語句、函數(shù)等。這些T-SQL語句都可以在查詢分析器窗格中交互執(zhí)行。第6章T-SQL語言——常量、變量與數(shù)據(jù)類型01常
量字符串常量整型常量實型常量日期時間常量貨幣常量唯一標識常量常
量1.字符串常量字符串常量分為普通字符串常量和Unicode字符串常量。(1)普通字符串常量。它是用單引號括起來,由ASCII字符和中文字符構成的符號串。例如:'你好!''It''stimeforclass.'說明:如果單引號中的字符串包含引號,可以使用兩個單引號來表示嵌入的單引號。(2)Unicode字符串常量。用一個N標識符(N代表SQL-92標準中的國際語言)引導。例如:N'你好!'N'It''stimeforclass.'Unicode數(shù)據(jù)中的每個字符用兩個字節(jié)存儲,而每個ASCII字符用一個字節(jié)存儲。常
量2.整型常量按照整型常量的不同表示方式,又分為二進制整型常量、十六進制整型常量和十進制整型常量。(1)十進制整型常量即不帶小數(shù)點的十進制數(shù)。例如:18942+145345234-2147483648(2)前輟0x為十六進制整型常量。例如:0xEBF0x69048AEFDD010E0x /*空十六進制常量*/(3)二進制整型常量為數(shù)字0或1。如果使用一個大于1的數(shù)字,它將被轉換為1。常
量3.實型常量實型常量有定點和浮點兩種表示方式。(1)包含小數(shù)的數(shù)就是定點表示的實型常量。例如:1894.12042.0+145345234.2234-2147483648.10(2)采用科學記數(shù)法表示的數(shù)就是浮點表示的實型常量。例如:101.5E50.5E-2+123E-3-12E5常
量4.日期時間常量日期時間常量:用單引號將表示日期時間的字符串括起來構成。SQLServer可以識別如下格式的日期和時間。字母日期格式:如'April20,2020';數(shù)字日期格式:如'4/15/2018','2018-04-15'未分隔的字符串格式:如'20201207'。(1)時間常量。例如:'14:30:24''04:24:PM'(2)日期時間常量。例如:'April20,202014:30:24'常
量5.貨幣常量貨幣常量是以“$”作為前綴的一個整型或實型常量數(shù)據(jù)。例如:$12$542023-$45.56+$423456.996.唯一標識常量唯一標識常量是用于表示全局唯一標識符(GUID)值的字符串。可以使用字符串或十六進制字符串格式指定。例如:'6F9619FF-8A86-D011-B42D-00004FC964FF'0xff19966f868b11d0b42d00c04fc964ff02變
量變量及其分類局部變量局部游標變量表數(shù)據(jù)類型變量變
量1.變量及其分類(1)標識符變量標識符分常規(guī)標識符和分隔標識符。常規(guī)標識符:以ASCII字母、Unicode字母、下劃線(_)、“@”或“#”開頭,后續(xù)可跟一個或若干個ASCII字符、Unicode字符、下劃線(_)、美元符號($)、“@”或“#”,但不能全為下劃線(_)、“@”或“#”。分隔標識符:包含在雙引號(")或者方括號([])內的常規(guī)標識符或不符合常規(guī)標識符規(guī)則的標識符。標識符允許的最大長度為128個字符。符合常規(guī)標識符格式規(guī)則的標識符可以分隔,也可以不分隔。對不符合標識符規(guī)則的標識符必須進行分隔。變
量(2)變量的分類根據(jù)作用域變量可以分為全局變量和局部變量。全局變量:由系統(tǒng)提供且預先聲明,通過在名稱前加兩個“@”來區(qū)別于局部變量。T-SQL全局變量可作為函數(shù)引用。例如,@@ERROR返回執(zhí)行的上一個T-SQL語句的錯誤號;@@CONNECTIONS返回自上次啟動SQLServer以來連接或試圖連接的次數(shù)。局部變量:用于保存單個數(shù)據(jù)值。例如,保存運算的中間結果,作為循環(huán)變量等。當首字母為“@”時,表示該標識符為局部變量名;當首字母為“#”時,此標識符為一臨時數(shù)據(jù)庫對象名,若開頭含一個“#”,表示局部臨時數(shù)據(jù)庫對象名;若開頭含兩個“#”,表示全局臨時數(shù)據(jù)庫對象名。變
量2.局部變量1)局部變量的定義在批處理或過程中用DECLARE語句聲明局部變量,所有局部變量在聲明后均初始化為NULL。語法格式如下。DECLARE@局部變量
數(shù)據(jù)類型[=值],…說明:(1)@局部變量:局部變量名應為常規(guī)標識符。前面的“@”表示是局部變量。(2)數(shù)據(jù)類型:用于定義局部變量的類型,可為系統(tǒng)類型或自定義類型。(3)=值:為變量賦值,值可以是常量或表達式,但它必須與變量聲明類型匹配。變
量2)局部變量的賦值當聲明局部變量后,可用SET或SELECT語句為其賦值。用SET語句賦值。將DECLARE語句創(chuàng)建的局部變量設置為指定表達式的值。語法格式如下。SET@局部變量=表達式說明:(1)@局部變量:除cursor、text、ntext、image及table外的任何類型變量名。變量名必須以“@”開頭。(2)表達式:任何有效的SQLServer表達式。變
量【例6.1】創(chuàng)建局部變量@var1、@var2并賦值,然后輸出變量的值。語句如下,執(zhí)行結果如圖。DECLARE@var1char(10),@var2char(30)SET@var1='中國'SET@var2=@var1+'是一個偉大的國家'SELECT@var1,@var2GO變
量【例6.2】創(chuàng)建一個名為sex的局部變量,并在SELECT語句中使用該局部變量查找xsb表中所有女同學的學號、姓名。語句如下:DECLARE@sexbitSET@sex=0SELECT學號,姓名 FROMxsb WHERE性別=@sex【例6.3】使用查詢?yōu)樽兞抠x值。語句如下:DECLARE@studentchar(8)SET@student= (SELECT姓名 FROMxsb WHERE學號='221102’ )SELECT@studentAS姓名變
量用SELECT語句賦值。語法格式如下。SELECT@局部變量=表達式,…說明:(1)“SELECT@局部變量”通常用于將單個值返回到變量中。(2)如果SELECT語句沒有返回行,變量將保留當前值。(3)如果“表達式”是不返回值的標量子查詢,則將變量設為NULL。(4)一個SELECT語句可以初始化多個局部變量?!纠?.4】使用SELECT語句為局部變量賦值。語句如下:DECLARE@var1nvarchar(30)SELECT@var1='劉豐'SELECT@var1AS'NAME'變
量【例6.5】為局部變量賦空值。語句如下:DECLARE@var1nvarchar(30)SELECT@var1='劉豐'USExscjSELECT@var1=( SELECT姓名 FROMxsb WHERE學號='221399')SELECT@var1AS'NAME'變
量3.局部游標變量1)局部游標變量的定義其語法格式如下。DECLARE@游標變量名CURSOR,…2)局部游標變量的賦值利用SET語句為一個游標變量賦值,有3種情況,語法格式如下。SET @游標變量= @游標變量
|游標名
|CURSOR子句
3)局部游標變量的使用步驟如下:定義游標變量→給游標變量賦值→打開游標→利用游標讀取行(記錄)→使用結束后關閉游標→刪除游標的引用。變
量【例6.6】使用游標變量。語句如下:USExscjDECLARE@CursorVarCURSOR /*定義游標變量*/SET@CursorVar=CURSORSCROLLDYNAMIC /*為游標變量賦值*/ FOR SELECT學號,姓名 FROMxsb WHERE姓名LIKE'王%'OPEN@CursorVar /*打開游標*/FETCHNEXTFROM@CursorVarFETCHNEXTFROM@CursorVar /*通過游標讀行記錄*/CLOSE@CursorVarDEALLOCATE@CursorVar /*刪除對游標的引用*/執(zhí)行結果如圖。變
量4.表數(shù)據(jù)類型變量其語法格式如下。DECLARE@表變量名[AS]TABLE(
列定義 ... [表約束])變
量【例6.7】聲明一個表數(shù)據(jù)類型變量并向變量中插入數(shù)據(jù)。語句如下:USExscjDECLARE@var_tableASTABLE( numchar(6)NOTNULLPRIMARYKEY, namechar(8)NOTNULL, sexbitNULL) /*聲明表數(shù)據(jù)類型變量*/INSERTINTO@var_table SELECT學號,姓名,性別FROMxsb /*插入xsb數(shù)據(jù)記錄*/SELECTTOP(4)*FROM@var_table /*查看內容*/執(zhí)行結果如圖。03用戶自定義數(shù)據(jù)類型用戶定義類型用戶定義類型的使用用戶定義類型的刪除SSMS界面方式操作定義類型用戶自定義數(shù)據(jù)類型1.用戶定義類型(1)用戶定義數(shù)據(jù)類型語法格式如下。CREATETYPE類型名 FROM基類型[(精度[,位數(shù)])][NULL|NOTNULL]說明:“類型名”為定義的數(shù)據(jù)類型的名稱?!盎愋汀敝付ǘx數(shù)據(jù)類型所基于的系統(tǒng)數(shù)據(jù)類型。(2)用戶定義表類型用戶定義表類型可作為參數(shù)提供給語句、存儲過程或者函數(shù)。語法格式如下。CREATETYPE類型名 ASTABLE (
列定義
... [表約束] )說明:列定義為對列的描述,包含列名、數(shù)據(jù)類型、為空性、約束等。用戶自定義數(shù)據(jù)類型2.用戶定義類型的使用(1)用戶定義數(shù)據(jù)類型的使用用戶定義數(shù)據(jù)類型后,就可以像系統(tǒng)數(shù)據(jù)類型一樣使用。【例6.8】先定義char(6)數(shù)據(jù)類型,對xsb1表學號列采用自定義數(shù)據(jù)類型。USExscjCREATETYPESTUDENT_num FROMchar(6)NOTNULLGODROPTABLExsb1CREATETABLExsb1(
學號
STUDENT_num NOTNULLPRIMARYKEY, /*學號為STUDENT_num類型*/
姓名 char(8) NOTNULL,
性別 bit NULLDEFAULT1,
出生日期 date NULL,
專業(yè) varchar(12) NULLDEFAULT'計算機',
總學分 int NULLDEFAULT0,
備注 varchar(500) NULL)用戶自定義數(shù)據(jù)類型(2)用戶定義表類型的使用【例6.9】先創(chuàng)建用戶自定義表類型,表結構與cjb表相同,然后使用該表類型。語句如下:CREATETYPEcjb_type ASTABLE (
學號 char(6) NOTNULL,
課程號 char(3) NOTNULL,
成績 int NOTNULL, PRIMARYKEY(學號,課程號) )GODECLARE@tab1cjb_typeINSERTINTO@tab1VALUES('201301','301',80)SELECT*FROM@tab1執(zhí)行結果如圖。用戶自定義數(shù)據(jù)類型3.用戶定義類型的刪除刪除用戶定義類型可以使用下列語句。語法格式如下。DROPTYPE類型名例如:USExscjDROPTYPEcjb_typeDROPTYPESTUDENT_num說明:這里cjb_type表類型可以刪除,但STUDENT_num數(shù)據(jù)類型不能被刪除,因為xsb1表中引用了它。用戶自定義數(shù)據(jù)類型4.SSMS界面方式操作定義類型(1)創(chuàng)建定義類型指定數(shù)據(jù)庫(例如xscj)→可編程性→類型→用戶定義數(shù)據(jù)類型、用戶定義表類型等,按右鍵,選擇“新建用戶定義數(shù)據(jù)類型”等,在打開的新建用戶定義數(shù)據(jù)類型對話框中定義有關內容,單擊“確定”。在創(chuàng)建自定義類型后,在對應的欄下就會顯示類型名。即在用戶定義數(shù)據(jù)類型下顯示“STUDENT_num”,在用戶定義表類型下顯示cjb_type。(2)刪除定義類型選擇類型名稱,按右鍵,選擇“刪除”,在顯示的對話框中單擊“確定”按鍵。第6章T-SQL語言——運算符與表達式運算符與表達式1.算術運算符算術運算符在兩個表達式中執(zhí)行數(shù)學運算,這兩個表達式可以是任何數(shù)字數(shù)據(jù)類型。算術運算符有“+”(加)、“-”(減)、“*”(乘)、“/”(除)和“%”(求模)五種?!?”(加)和“-”(減)運算符還可用于對日期時間類型的值進行算術運算。2.位運算符位運算符在兩個表達式之間執(zhí)行位操作,這兩個表達式的類型可為整型或與整型兼容的數(shù)據(jù)類型(如字符型等),但不能為image類型。位運算符如表。運
算
符運算規(guī)則&兩個位均為1時,結果為1,否則為0|只要一個位為1,則結果為1,否則為0^兩個位值不同時,結果為1,否則為0運算符與表達式【例6.10】在test1數(shù)據(jù)庫中,建立表bitop,并插入一行,然后將a字段和b字段列的值進行按位運算。USEtest1CREATETABLEbitop( aintNOTNULL, bintNOTNULL)GOINSERTbitopVALUES(168,73)SELECTa&b,a|b,a^b FROMbitopGO執(zhí)行結果如圖。運算符與表達式說明:a(168)的二進制表示為0000000010101000;b(73)的二進制表示為0000000001001001。在這兩個值之間進行的位運算如下:運算符與表達式3.比較運算符比較運算符(又稱關系運算符)如表所示,用于測試兩個表達式的值是否相同,其運算結果為邏輯值,可以為TRUE、FALSE及UNKNOWN三者之一。除text、ntext或image類型的數(shù)據(jù)外,比較運算符可以用于所有的表達式。運
算
符含
義運
算
符含
義=等于<=小于等于>
大于<>、!=不等于<
小于!<不小于>=大于等于!>不大于運算符與表達式4.邏輯運算符邏輯運算符用于對某個條件進行測試,運算結果為TRUE或FALSE。SQLServer提供的邏輯運算符如表6.6所示。運
算
符運算規(guī)則AND如果兩個操作數(shù)值都為TRUE,則運算結果為TRUEOR如果兩個操作數(shù)中有一個為TRUE,則運算結果為TRUENOT若一個操作數(shù)值為TRUE,則運算結果為FALSE,否則為TRUEALL如果每個操作數(shù)值都為TRUE,則運算結果為TRUEANY在一系列操作數(shù)中只要有一個為TRUE,則運算結果為TRUEBETWEEN如果操作數(shù)在指定的范圍內,則運算結果為TRUEEXISTS如果子查詢包含一些行,則運算結果為TRUEIN如果操作數(shù)值等于表達式列表中的一個,則運算結果為TRUELIKE如果操作數(shù)與一種模式相匹配,則運算結果為TRUESOME如果在一系列操作數(shù)中,有些值為TRUE,則運算結果為TRUE運算符與表達式(1)ANY、SOME、ALL、IN的使用。可以將ALL或ANY關鍵字與比較運算符組合進行子查詢。SOME的用法與ANY相同。以“>”比較運算符為例。>ALL表示大于每一個值,即大于最大值。例如,>ALL(5,2,3)表示大于5。因此,使用>ALL的子查詢也可用MAX集函數(shù)實現(xiàn)。>ANY表示至少大于一個值,即大于最小值。例如,>ANY(7,2,3)表示大于2。因此,使用>ANY的子查詢也可用MIN集函數(shù)實現(xiàn)。=ANY運算符與IN等效。<>ALL與NOTIN等效。運算符與表達式【例6.11】查詢成績高于“林一帆”最高成績的學生姓名、課程名及成績。語句如下:USExscjSELECT姓名,課程名,成績 FROMxsb,cjb,kcb WHERE成績>ALL ( SELECTb.成績 FROMxsba,cjbb WHEREa.學號=b.學號ANDa.姓名='林一帆' ) ANDxsb.學號=cjb.學號 ANDkcb.課程號=cjb.課程號 AND姓名<>'林一帆'查詢結果如圖。運算符與表達式(2)BETWEEN的使用。語法格式如下。
測試表達式[NOT]BETWEEN起始表達式AND結束表達式說明:如果“測試表達式”的值大于或等于“起始表達式”的值并且小于或等于“結束表達式”的值,則運算結果為TRUE,否則為FALSE。“起始表達式”和“結束表達式”指定測試范圍,3個表達式的類型必須相同?!纠?.12】查詢總學分在40~50的學生學號和姓名。語句如下:SELECT學號,姓名,總學分 FROMxsb WHERE總學分BETWEEN40AND50使用>=和<=代替BETWEEN實現(xiàn)相同的功能,語句如下。SELECT學號,姓名,總學分 FROMxsb WHERE總學分>=40AND總學分<=50運算符與表達式【例6.13】查詢總學分在范圍40~50之外的所有學生的學號和姓名。語句如下:SELECT學號,姓名,總學分 FROMxsb WHERE總學分NOTBETWEEN40AND50(3)LIKE的使用。語法格式如下。表達式[NOT]LIKE模式[ESCAPE轉義符]說明:如果指定的字符串與指定的模式匹配,則運算結果為TRUE,否則為FALSE。模式可以包含普通字符和通配符。【例6.14】查詢課程名以“計”或C開頭的課程情況。語句如下:SELECT* FROMkcb WHERE課程名LIKE'[計C]%'運算符與表達式(4)EXISTS與NOTEXISTS的使用。語法格式如下。EXISTS子查詢說明:如果子查詢的結果不為空,則運算結果為TRUE,否則為FALSE?!白硬樵儭贝硪粋€受限的SELECT語句(不允許有COMPUTE子句和INTO關鍵字)?!纠?.15】查詢所有選課學生的姓名。語句如下:SELECTDISTINCT姓名 FROMxsb WHEREEXISTS ( SELECT* FROMcjb WHERExsb.學號=cjb.學號 )運算符與表達式5.字符串連接運算符通過運算符“+”實現(xiàn)兩個字符串的連接運算。【例6.16】多個字符串的連接。語句如下:SELECT(學號+','+姓名)AS學號及姓名 FROMxsb WHERE學號='221101'查詢結果如圖。6.一元運算符一元運算符有“+”(正)、“-”(負)和“~”(按位取反)3個。對于按位取反運算符的舉例如下。設a的值為12(0000000000001100),計算~a的值為1111111111110011。7.賦值運算符指給局部變量賦值的SET和SELECT語句中使用的“=”。運算符與表達式8.運算符的優(yōu)先順序當一個復雜的表達式有多個運算符時,運算符優(yōu)先級決定執(zhí)行運算的先后次序。執(zhí)行的順序會影響所得到的運算結果。運算符優(yōu)先級如表所示。在一個表達式中按先高(優(yōu)先級數(shù)字?。┖蟮停▋?yōu)先級數(shù)字大)的順序進行運算。運
算
符優(yōu)
先
級運
算
符優(yōu)
先
級+(正)、-(負)、~(按位NOT)1NOT6*(乘)、/(除)、%(取模)2AND7+(加)、+(串聯(lián))、-(減)3ALL、ANY、BETWEEN、IN、LIKE、OR、SOME8=、>、<、>=、<=、<>、!=、!>、!<比較運算符4=(賦值)9^(位異或)、&(位與)、|(位或)5
運算符與表達式9.表達式表達式就是常量、變量、列名、復雜計算、運算符和函數(shù)的組合。一個表達式通常可以得到一個值。與常量和變量一樣,表達式的值也具有某種數(shù)據(jù)類型,可能的數(shù)據(jù)類型有字符類型、數(shù)值類型、日期時間類型。這樣根據(jù)值的類型,表達式可分為字符型表達式、數(shù)值型表達式和日期時間型表達式。表達式還可以根據(jù)值的復雜性來分類。若表達式的結果只是一個值,如一個數(shù)值、一個單詞或一個日期,則這種表達式稱為標量表達式,如1+2,'a'>'b'。若表達式的結果是由不同類型數(shù)據(jù)組成的一行值,則這種表達式稱為行表達式。例如:('201101','王林','計算機',15)。若表達式的結果為0個、1個或多個行表達式的集合,那么這個表達式就稱為表表達式。第6章T-SQL語言——流程控制語句流程控制語句在SQLServer中提供了如表所示的流程控制語句。控制語句說
明控制語句說
明BEGIN…END語句塊CONTINUE用于重新開始下一次循環(huán)IF…ELSE條件語句BREAK用于退出最內層的循環(huán)CASE分支語句RETURN無條件返回GOTO無條件轉移語句WAITFOR為語句的執(zhí)行設置延遲WHILE循環(huán)語句
【例6.17】查詢總學分大于42的學生人數(shù)。語句如下:DECLARE@numintSELECT@num=(SELECTCOUNT(姓名)FROMxsbWHERE總學分>42)IF@num<>0 SELECT@numAS'總學分大于42的人數(shù)'01語句塊語句塊當要執(zhí)行多條T-SQL語句時,就需要使用語句塊,作為一組語句來執(zhí)行。語法格式如下。BEGIN SQL語句塊END說明:關鍵字BEGIN是T-SQL語句塊的起始位置,END標識同一個T-SQL語句塊的結尾。“SQL語句塊”是由一條或者多條T-SQL語句構成。02條件語句條件語句在程序中如果要對指定的條件進行判定,當條件為真或假時分別執(zhí)行不同的T-SQL語句,可用IF…ELSE語句實現(xiàn)。語法格式如下。IF條件表達式 SQL語句|語句塊 /*A*/[ELSE SQL語句|語句塊] /*B*/
IF語句的執(zhí)行流程如圖。條件語句【例6.18】“計算機導論”課程的平均成績75分分兩段顯示。語句如下:IF( SELECTAVG(成績) FROMxsb,cjb,kcb WHERExsb.學號=cjb.學號
ANDcjb.課程號=kcb.課程號 ANDkcb.課程名='計算機導論')<=75 SELECT'計算機導論','平均成績小于等于75'ELSE SELECT'計算機導論','平均成績大于75'條件語句【例6.18續(xù)】“計算機導論”課程的平均成績75分、85分分三段顯示。語句如下:IF( SELECTAVG(成績) FROMxsb,cjb,kcb WHERExsb.學號=cjb.學號
ANDcjb.課程號=kcb.課程號 ANDkcb.課程名='計算機導論')<=75 SELECT'平均成績小于等于75分'ELSE IF ( SELECTAVG(成績) FROMxsb,cjb,kcb WHERExsb.學號=cjb.學號
ANDcjb.課程號=kcb.課程號 ANDkcb.課程名='計算機導論' )<=85 SELECT'平均成績大于75分小于等于85分' ELSE SELECT'平均成績大于85分'條件語句【例6.19】刪除數(shù)據(jù)庫快照IFEXISTS(SELECTdbidFROMsys.databasesWHERENAME='sales_snapshot0600')DROPDATABASESalesSnapshot0600;GO--RevertingSalestosales_snapshot1200USEmaster;RESTOREDATABASESalesFROMDATABASE_SNAPSHOT='sales_snapshot1200';GO03分支語句分支語句CASE語句可進行流程控制,可根據(jù)多重條件分支。語法格式如下。CASE輸入表達式 WHEN表達式THEN結果表達式 … [ELSE結果表達式]END或者:CASE WHEN布爾表達式THEN結果表達式 … [ELSE結果表達式]END分支語句說明:(1)第一種格式中“輸入表達式”是要判斷的值或表達式,接下來是一系列的WHEN
THEN塊,每一塊的“WHEN表達式”參數(shù)指定要與“輸入表達式”比較的值,如果為真,就執(zhí)行“結果表達式”中的T-SQL語句。如果前面的每一個塊都不匹配,就會執(zhí)行ELSE塊指定的語句。CASE語句最后以END關鍵字結束。(2)第二種格式中CASE關鍵字后面沒有參數(shù),在WHEN
THEN塊中,“布爾表達式”指定了一個比較表達式,表達式為真時執(zhí)行THEN后面的語句。分支語句【例6.20】使用第一種格式的CASE語句,根據(jù)性別值輸出“男”或“女”。語句如下:SELECT學號,姓名,專業(yè),SEX= CASE性別 WHEN1THEN'男' WHEN0THEN'女' ELSE'無' END FROMxsb WHERE總學分>48使用第二種格式的CASE語句則可以使用以下T-SQL語句。SELECT學號,姓名,專業(yè),SEX= CASE WHEN性別=1THEN'男' WHEN性別=0THEN'女' ELSE'無' END FROMxsb WHERE總學分>4804無條件轉移語句無條件轉移語句無條件轉移語句將執(zhí)行流程轉移到標號指定的位置。語法格式如下。
GOTO標號“標號”是指向的語句標號,必須符合標識符規(guī)則。標號的定義形式如下。
標號:語句05循環(huán)語句WHILE循環(huán)語句BREAK語句CONTINUE語句循環(huán)語句1.WHILE循環(huán)語句如果需要重復執(zhí)行程序中的一部分語句,則可使用WHILE循環(huán)語句實現(xiàn)。語法格式如下。WHILE條件表達式 SQL語句|語句塊 /*循環(huán)體*/執(zhí)行流程如圖。循環(huán)語句【例6.21】在一個臨時表中生成順序編號列。語句如下:USExscjDECLARE@iintDECLARE@tab1ASTABLE( numchar(6)NOTNULL, namechar(12))SET@i=1WHILE@i<=10BEGIN INSERTINTO@tab1 (num)VALUES(@i) SET@i=@i+1ENDSELECT*FROM@tab1執(zhí)行結果如圖。循環(huán)語句【例6.22】計算所有課程的平均成績。語句如下:DECLARE@kchchar(3)DECLARE@cjfloatUSExscjDECLAREcj_curcursor /*定義游標*/FORSELECT課程號,AVG(成績) FROMcjb GROUPBY課程號OPENcj_cur /*打開游標*/FETCHNEXTFROMcj_cur /*讀取第一條記錄放到對應變量中*/INTo@kch,@cjWHILE(@@fetch_status=0) BEGINSELECT@kch,@cj /*顯示課程號和平均成績*/FETCHNEXTFROMcj_cur /*讀取當前記錄放到對應變量中*/ INTO@kch,@cjENDCLOSEcj_curDEALLOCATEcj_cur執(zhí)行結果如圖。循環(huán)語句2.BREAK語句其語法格式如下。BREAKBREAK語句一般用在循環(huán)語句中,用于退出本層循環(huán)。當程序中有多層循環(huán)嵌套時,使用BREAK語句只能退出其所在的這一層循環(huán)。3.CONTINUE語句其語法格式如下。CONTINUECONTINUE語句一般用在循環(huán)語句中,用于結束本次循環(huán),重新轉到下一次循環(huán)條件的判斷。06返回語句返回語句用于從存儲過程、批處理或語句塊中無條件退出,不執(zhí)行位于RETURN之后的語句。其語法格式如下。RETURN[整數(shù)表達式]如果用在存儲過程中,則可以返回整型的表達式值。如果不包含選項,則退出程序并返回一個空值。當用于存儲過程時,RETURN不能返回空值。【例6.23】判斷xsb1是否存在學號為221301的學生,如果存在則返回,不存在則插入該學生記錄語句如下:IFEXISTS(SELECT*FROMxsb1WHERE學號='221301') RETURNELSE INSERTINTOxsb1VALUES('221301','張可',1,'2004-08-12','電氣工程',0,NULL)SELECT*FROMxsb107等待語句等待語句等待語句指定觸發(fā)語句塊、存儲過程或事務執(zhí)行的時刻或需等待的時間間隔。其語法格式如下。WAITFOR DELAY'等待時間' |TIME'執(zhí)行時刻'說明:(1)DELAY'等待時間':指定運行批處理、存儲過程和事務必須等待的時間,最長可達24小時?!暗却龝r間”可以用time數(shù)據(jù)格式指定,用單引號括起來。(2)TIME'執(zhí)行時刻':指定運行批處理、存儲過程和事務的時刻,“執(zhí)行時刻”表示WAITFOR語句完成的時刻,值的指定同上?!纠?.24】設定在早上8點執(zhí)行查詢語句。語句如下:BEGIN WAITFORTIME'8:00' SELECT*FROMxsb1END08錯誤處理語句錯誤處理語句在SQLServer中,可以使用TRY…CATCH語句進行T-SQL語言中的錯誤處理。語法格式如下。BEGINTRY SQL語句|語句塊ENDTRYBEGINCATCH [SQL語句|語句塊]ENDCATCH第6章T-SQL語言——系統(tǒng)內置函數(shù)01系統(tǒng)內置函數(shù)介紹行集函數(shù)聚合函數(shù)標量函數(shù)系統(tǒng)內置函數(shù)介紹1.行集函數(shù)SQLServer2008主要提供了如下行集函數(shù)。(1)CONTAINSTABLE:對于基于字符類型的列,按照一定的搜索條件進行精確或模糊匹配,然后返回一個表,該表可能為空。(2)FREETEXTTABLE:為基于字符類型的列返回一個表,其中的值符合指定文本的含義,但不符合確切的表達方式。(3)OPENDATASOURCE:提供與數(shù)據(jù)源的連接。(4)OPENQUERY:在指定數(shù)據(jù)源上執(zhí)行查詢??梢栽诓樵兊腇ROM子句中像引用基本表一樣引用OPENQUERY函數(shù),雖然查詢可能返回多個記錄,但OPENQUERY只返回第一個記錄。(5)OPENROWSET:包含訪問OLEDB數(shù)據(jù)源中遠程數(shù)據(jù)所需的全部連接信息。可在查詢的FROM子句中像引用基本表一樣引用OPENROWSET函數(shù),雖然查詢可能返回多個記錄,但OPENROWSET只返回第一個記錄。(6)OPENXML函數(shù):通過XML文檔提供行集視圖。系統(tǒng)內置函數(shù)介紹2.聚合函數(shù)聚合函數(shù)對一組值操作,返回單一的匯總值。聚合函數(shù)在以下情況下,允許作為表達式使用。(1)SELECT語句的選擇列表(子查詢或外部查詢)。(2)COMPUTE或COMPUTEBY子句。(3)HAVING子句。T-SQL語言提供的常用聚合函數(shù)的應用請參考第4章相關內容。3.標量函數(shù)標量函數(shù)的特點:輸入參數(shù)的類型為基本類型,返回值也為基本類型。02常用系統(tǒng)標量函數(shù)配置函數(shù)數(shù)學函數(shù)字符串函數(shù)系統(tǒng)函數(shù)日期時間函數(shù)游標函數(shù)元數(shù)據(jù)函數(shù)常用系統(tǒng)標量函數(shù)1.配置函數(shù)配置函數(shù)用于返回當前配置選項設置的信息。2.數(shù)學函數(shù)數(shù)學函數(shù)可對SQLServer提供的數(shù)字數(shù)據(jù)(decimal、integer、float、real、money、smallmoney、smallint和tinyint)進行數(shù)學運算并返回運算結果。(1)ABS函數(shù)的語法格式如下。ABS(數(shù)字表達式)返回指定數(shù)字表達式的絕對值。參數(shù)為數(shù)字型表達式(bit數(shù)據(jù)類型除外),返回值類型與“數(shù)字表達式”相同。例如,顯示ABS函數(shù)對3個不同數(shù)字的效果,語句如下。SELECTABS(
5.0),ABS(0.0),ABS(8.0)(2)RAND函數(shù)的語法格式如下。RAND([種子])返回0~1之間的一個隨機值。參數(shù)“種子”是指定種子值的整型表達式,返回值類型為float。如果未指定“種子”,則隨機分配種子值。對于指定的種子值,返回的結果始終相同。例如,如下程序通過RAND函數(shù)返回隨機值。DECLARE@countintSET@count=5SELECTRAND(@count)常用系統(tǒng)標量函數(shù)3.字符串函數(shù)字符串函數(shù)用于對字符串進行處理。在此介紹一些常用的字符串函數(shù),其他的請參考有關文檔。(1)ASCII函數(shù)的語法格式如下。
ASCII(字符表達式)返回字符表達式最左端字符的ASCII值。參數(shù)“字符表達式”為字符型的表達式,返回值為整型。例如,查找字符串'sql'最左端字符的ASCII值,語句如下。
SELECTASCII('sql')執(zhí)行結果為115,它是小寫s的ASCII值。(2)CHAR函數(shù)的語法格式如下。CHAR(整型表達式)將ASCII碼轉換為字符?!罢捅磉_式”為介于0~255之間的整數(shù),返回值為字符型。常用系統(tǒng)標量函數(shù)(3)LEFT函數(shù)的語法格式如下。
LEFT(字符表達式,整型表達式)返回從字符串左邊開始指定個數(shù)的字符,返回值為varchar型。例如,返回課程名最左邊的4個字符,語句如下。SELECTLEFT(課程名,4) FROMkcb ORDERBY課程號又如:SELECT學號,姓名 FROMxsb WHERELEFT(學號,2)='19'常用系統(tǒng)標量函數(shù)(4)LTRIM函數(shù)的語法格式如下。
LTRIM(字符表達式)刪除“字符表達式”字符串中的前導空格,并返回字符串。例如,使用LTRIM函數(shù)刪除字符變量中的起始空格,語句如下。DECLARE@stringvarchar(40)SET@string='中國,一個古老而偉大的國家'SELECTLTRIM(@string)SELECT@string(5)REPLACE函數(shù)的語法格式如下。REPLACE('字符串表達式1','字符串表達式2','字符串表達式3')用“字符串表達式3”替換“字符串表達式1”中包含的“字符串表達式2”,并返回替換后的表達式(返回值為字符型)。常用系統(tǒng)標量函數(shù)(6)SUBSTRING函數(shù)的語法格式如下。SUBSTRING(表達式,起始,長度)返回表達式中指定的部分數(shù)據(jù)。參數(shù)“表達式”可為字符串、二進制串、text、image字段或表達式;“起始”、“長度”均為整型,前者指定子串的開始位置,后者指定子串的長度(要返回字節(jié)數(shù))。如果“表達式”是字符類型和二進制類型,則返回值類型與“表達式”的類型相同。在其他情況下,參考表。給定的表達式返回值類型給定的表達式返回值類型給定的表達式返回值類型textvarcharimagevarbinaryntextnvarchar【例6.25】顯示第1列為xsb表中的姓,在第2列中為學生名。語句如下,執(zhí)行結果如圖。SELECTTOP(4)SUBSTRING(姓名,1,1),SUBSTRING(姓名,2,LEN(姓名)-1) FROMxsb ORDERBY姓名常用系統(tǒng)標量函數(shù)【例6.26】顯示字符串"China"中每個字符的ASCII值和字符。語句如下,執(zhí)行結果如圖。DECLARE@positionint,@stringchar(6)SET@position=1SET@string='China'WHILE@position<=DATALENGTH(@string)BEGIN SELECTASCII(SUBSTRING(@string,@position,1))ASASCII碼, CHAR(ASCII(SUBSTRING(@string,@position,1)))AS字符 SET@position=@position+1END常用系統(tǒng)標量函數(shù)4.系統(tǒng)函數(shù)1)數(shù)據(jù)類型的轉換函數(shù)CAST、CONVERT這兩個函數(shù)的功能都是實現(xiàn)數(shù)據(jù)類型的轉換,但CONVERT的功能更強。常用的類型轉換有以下幾種情況:日期型→字符型、字符型→日期型、數(shù)值型→字符型。語法格式如下。CAST(表達式AS數(shù)據(jù)類型[(長度)])CONVERT(數(shù)據(jù)類型[(長度)],表達式[,類型])常用系統(tǒng)標量函數(shù)說明:這兩個函數(shù)將表達式的類型轉換為“數(shù)據(jù)類型”所指定的類型。參數(shù)“表達式”可為任何有效的表達式,“數(shù)據(jù)類型”可為系統(tǒng)提供的基本類型,不能為用戶自定義類型,當為nchar、nvarchar、char、varchar、binary或varbinary等數(shù)據(jù)類型時,可以通過“長度”參數(shù)指定長度。對于不同的表達式類型轉換,參數(shù)“類型”的取值不同?!邦愋汀钡某S萌≈导捌渥饔萌绫怼2粠兰o數(shù)位(yy)帶世紀數(shù)位(yyyy)標
準輸入/輸出
0或100默認值monddyyyyhh:miAM(或PM)1101美國mm/dd/yyyy2102ANSIyy.mm.dd
9或109默認值+毫秒monddyyyyhh:mi:ss:mmmAM(或PM)10110美國mm-dd-yy12112ISOyymmdd日期型與字符型轉換時“類型”的常用取值及其作用常用系統(tǒng)標量函數(shù)style值輸
出0(默認值)根據(jù)需要使用科學記數(shù)法,長度最多為61使用科學記數(shù)法,長度為82使用科學記數(shù)法,長度為16值輸
出0(默認值)小數(shù)點左側每3位數(shù)字之間不以逗號分隔,小數(shù)點右側取兩位數(shù),如4235.981小數(shù)點左側每3位數(shù)字之間以逗號分隔,小數(shù)點右側取兩位數(shù),如3,510.922小數(shù)點左側每3位數(shù)字之間不以逗號分隔,小數(shù)點右側取4位數(shù),如4235.9819
float或real轉換為字符型數(shù)據(jù)時“類型”的取值從money或smallmoney轉換為字符數(shù)據(jù)時“類型”的取值常用系統(tǒng)標量函數(shù)【例6.27】檢索總學分在50~59分的學生姓名,并將總學分轉換為char(20)。語句如下:/*使用CAST實現(xiàn)*/SELECT姓名,總學分 FROMxsb WHERECAST(總學分ASchar(20))LIKE'5_'/*使用CONVERT實現(xiàn)*/SELECT姓名,總學分 FROMxsb WHERECONVERT(char(20),總學分)LIKE'5_'常用系統(tǒng)標量函數(shù)2)獲得非空表達式的值語法格式如下。COALESCE(表達式,…)說明:返回參數(shù)表中第一個非空表達式的值,如果所有自變量均為NULL,則COALESCE返回NULL值。參數(shù)“表達式”可為任何類型的表達式。COALESCE(表達式1,…)與如下形式的CASE語句等價。CASE WHEN(表達式1ISNOTNULL)THEN表達式1 … WHEN(表達式NISNOTNULL)THEN表達式NELSENULL
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年汽車維修(汽車發(fā)動機保養(yǎng))試題及答案
- 2025年高職醫(yī)療器械維護與管理(器械維修)試題及答案
- 2025年高職護理(心理危機干預)試題及答案
- 2025年高職體育(體育教學方法)試題及答案
- 2025年高職環(huán)境工程(大氣污染控制技術)試題及答案
- 2025年大學大一(影視基礎)影視知識期中測試試題及答案
- 2026年平板銷售(需求分析)試題及答案
- 2025年大學三年級(人類學)文化人類學試題及答案
- 2025年中職工業(yè)機器人基礎(機器人基礎理論)試題及答案
- 2026年酒店客房(客房應急管理)試題及答案
- 2026年及未來5年市場數(shù)據(jù)中國聚甲醛市場運行態(tài)勢及行業(yè)發(fā)展前景預測報告
- 2025廣東省佛山市南海公證處招聘公證員助理4人(公共基礎知識)測試題附答案解析
- (支行)2025年工作總結和2026年工作計劃匯報
- 社會工作本科畢業(yè)論文
- 2025年秋統(tǒng)編版(新教材)初中歷史七年級第一學期期末模擬試題及答案
- 金華市軌道交通控股集團運營有限公司應屆生招聘考試真題2024
- 清淤工程分包合同范本
- 風電項目數(shù)據(jù)采集與監(jiān)控方案
- 人教版(PEP)六年級英語上冊復習知識點大全
- 咨詢服務風險管理策略-洞察及研究
- 物業(yè)維修工安全培訓課件
評論
0/150
提交評論