sql server課件第5章章節(jié)課件_第1頁
sql server課件第5章章節(jié)課件_第2頁
sql server課件第5章章節(jié)課件_第3頁
sql server課件第5章章節(jié)課件_第4頁
sql server課件第5章章節(jié)課件_第5頁
已閱讀5頁,還剩63頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第5章Transact-SQL基礎(chǔ)5.1T-SQL概述5.2T-SQL數(shù)據(jù)操縱語言5.3T-SQL數(shù)據(jù)查詢語言5.4T-SQL附加語言元素本章主要介紹以下內(nèi)容:5.1T-SQL概述5.1.1T-SQL的發(fā)展

在20世紀(jì)70年代初,IBM公司的E.E.Codd發(fā)表了《ARelationModalofDataforlargeSharedDataBanks》,即大型共享數(shù)據(jù)庫的數(shù)據(jù)關(guān)系模型,確立了關(guān)系型數(shù)據(jù)庫的概念。70年代中期,IBM公司首先使用該模型開發(fā)出了結(jié)構(gòu)化英語查詢語言SEQUEL-StructedEnglishQueryLanguage,作為其關(guān)系數(shù)據(jù)庫原型systemR的操作語言,實(shí)現(xiàn)對關(guān)系型數(shù)據(jù)庫的信息檢索;Oracle公司則在1979年率先推出商用的SQL語言。1986年10月,SQL成為美國國家標(biāo)準(zhǔn)組織ANSI的關(guān)系型數(shù)據(jù)管理系統(tǒng)操作語言的國家標(biāo)準(zhǔn)(ANSIX3.135-1986)。并于1989年、1992年、1999年、2003年和2006年推出了SQL的ANSI標(biāo)準(zhǔn)的新版本。國際標(biāo)準(zhǔn)組織(ISO)也將之確定為關(guān)系型數(shù)據(jù)庫語言的國際標(biāo)準(zhǔn)(ISO9075-1989:DatabaseLanguageSQLwithIntegrityEnhancement)。T-SQL是微軟公司在遵循SQL標(biāo)準(zhǔn)的基礎(chǔ)上,經(jīng)過進(jìn)一步發(fā)展,應(yīng)用于SQLServer的數(shù)據(jù)庫系統(tǒng)操作語言。5.1.2T-SQL的語言分類T-SQL語言中語句眾多,非常豐富,按其功能不同可以大致分為以下四類:數(shù)據(jù)控制語言(DCL,DataControlLanguage):用于安全性管理,可以確定哪些用戶可以查看或者修改數(shù)據(jù),包含GRANT、DENY、REVOKE等。數(shù)據(jù)定義語言(DDL,DataDefinitionLanguage):用于執(zhí)行數(shù)據(jù)庫的任務(wù),創(chuàng)建和管理數(shù)據(jù)庫以及數(shù)據(jù)庫中的各種對象,包含CREAT、ALERT、DROP等。數(shù)據(jù)操縱語言(DML,DataManipulationLanguage):用于在數(shù)據(jù)庫中操縱各種對象、檢索和修改數(shù)據(jù),包含SELECT、INSERT、UPDATE、DELETE等。本部分語言中,根據(jù)對數(shù)據(jù)影響情況又可以細(xì)分為數(shù)據(jù)操縱和數(shù)據(jù)查詢語言。數(shù)據(jù)操縱是對數(shù)據(jù)庫數(shù)據(jù)產(chǎn)生變更影響的語言,包含INSERT、UPDATE、DELETE。數(shù)據(jù)查詢語言是指從數(shù)據(jù)庫中獲取滿足指定條件的數(shù)據(jù),而對原始數(shù)據(jù)不會產(chǎn)生變更影響的語言,主要是各種SELECT語句。附加語言,包含變量、運(yùn)算符、函數(shù)、流程控制語言和注釋等。5.2T-SQL數(shù)據(jù)操縱語言往數(shù)據(jù)表中輸入數(shù)據(jù)、編輯數(shù)據(jù)和刪除數(shù)據(jù)是數(shù)據(jù)庫系統(tǒng)管理數(shù)據(jù)的三項(xiàng)最基本的操作。在SQLServer2019實(shí)現(xiàn)上述三項(xiàng)操作的基本語句是:INSERT、UPDATE和DELETE。5.2.1INSERT插入數(shù)據(jù)INSERT是SQLServer插入數(shù)據(jù)的語句,其基本語法如下:INSERT[INTO]{table_nameorView_name}{[(column_list)][<OUTPUTClause>]{VALUES(({DEFAULT|NULL|expression}[,...n])[,...n])}}5.2.1INSERT插入數(shù)據(jù)各主要參數(shù)的含義如下:table_nameorView_name,是指接收插入數(shù)據(jù)的數(shù)據(jù)表或者視圖名稱。column_list,插入數(shù)據(jù)表或視圖中的列的名稱,是可選項(xiàng)。如果不添加列名的列表,則插入的數(shù)據(jù)值的個(gè)數(shù)要求與列在表或視圖中的順序一致。OUTPUTClause,是指執(zhí)行INSERT語句后,系統(tǒng)返回值的子句。VALUES,插入的數(shù)據(jù)值的列表,需要使用英文半角逗號分隔。5.2.1INSERT插入數(shù)據(jù)1、INSERT插入單行數(shù)據(jù)使用INSERT插入單行數(shù)據(jù)的代碼較為簡單,例如,以下代碼為向“產(chǎn)品數(shù)據(jù)表”中輸入一行數(shù)據(jù):INSERTINTO產(chǎn)品數(shù)據(jù)表(ProductName,UnitPrice,Unit,Description)VALUES('聯(lián)想Y450A-TSI',4899.00,'臺','T6600酷睿2GBDDR320G獨(dú)立顯存')2、INSERT插入多行數(shù)據(jù)INSERT語句可以一次插入多行數(shù)據(jù),插入的數(shù)據(jù)行可以以數(shù)據(jù)組的形式列在VALUES列表中,如以下代碼向“產(chǎn)品數(shù)據(jù)表”中輸入了三條數(shù)據(jù)。INSERTINTO產(chǎn)品數(shù)據(jù)表(ProductName,UnitPrice,[Description])VALUES('聯(lián)想',4899.00,'T66001'),('聯(lián)想',4999.00,'T66002'),('聯(lián)想',5099.00,'T66003')

5.2.2UPDATE更新數(shù)據(jù)T-SQL中更新數(shù)據(jù)的語句是UPDATE,UPDATE可以一次更新一行數(shù)據(jù),也可以一次更新多行數(shù)據(jù);也可以一次只更新一列的值,或一次更新多列的值。在UPDATE中可以通過更新列列表,指定更新的列數(shù)及數(shù)據(jù)值,通過WHERE條件可以指定更新的數(shù)據(jù)行。UPDATE語句的基本語法如下:UPDATEtable_or_View_nameSET<SETcaluseexpression>[{,<SETcaluseexpression>},...][WHERE<searchcondition>]各主要參數(shù)的含義如下:table_or_View_name,被更改的數(shù)據(jù)表或視圖名稱。SETcaluseexpression,被更改的列的表達(dá)式,如“unit=’PCS’”等。searchcondition,用于行數(shù)據(jù)篩選的條件表達(dá)式。5.2.2UPDATE更新數(shù)據(jù)如果只需要將“ProductID”列值為3的數(shù)據(jù)行的“UNIT”列更新為“PCS”,“ProductName”列的值更改為“LENOVO電腦”UPDATE產(chǎn)品數(shù)據(jù)表

SETUNIT='PCS',ProductName='LENOVO電腦'WHEREProductID=3被更新的列列表及數(shù)據(jù),使用英文半角逗號分隔。被更新的行數(shù)據(jù)篩選條件。5.2.3DELETE刪除數(shù)據(jù)T-SQL中刪除數(shù)據(jù)的語句是DELETE。DELETE可以刪除指定表的一行或者多行數(shù)據(jù)。DELETE的基本語法如下:DELETEFROMtable_or_View_Name[WHERE<searchcondition>]各主要參數(shù)的含義如下:table_or_View_Name,指定要?jiǎng)h除數(shù)據(jù)的表或者視圖名稱。searchcondition,指定要?jiǎng)h除的行數(shù)據(jù)的條件。例如,以下代碼從“產(chǎn)品數(shù)據(jù)表”中刪除“ProductID”列值為3的數(shù)據(jù)行。DELETEFROM產(chǎn)品數(shù)據(jù)表

WHEREProductID=35.3T-SQL數(shù)據(jù)查詢語言5.3.1單表數(shù)據(jù)查詢在T-SQL中數(shù)據(jù)查詢的基本語句是SELECT。SELECT語句最基本的應(yīng)用如下例代碼所示,表示從“產(chǎn)品數(shù)據(jù)表”中查詢所有數(shù)據(jù),包括所有列,“*”代表將所有列都顯示出來。SELECT*FROM產(chǎn)品數(shù)據(jù)表1、查詢指定列的數(shù)據(jù)在某些列數(shù)較多的數(shù)據(jù)表或者某些只需要顯示部分列的應(yīng)用中,如新聞網(wǎng)站的首頁只需顯示新聞的標(biāo)題等場合時(shí),可以使用SELECT語句顯示部分列查詢需要的數(shù)據(jù)。此時(shí),可以采用列列表來代替“*”,并且列列表中列的順序可以與表結(jié)構(gòu)中列的順序不一致。SELECTProductName,UnitPriceFROM產(chǎn)品數(shù)據(jù)表11SELECT[id],[項(xiàng)目編號],[項(xiàng)目名稱],[單位編號],[聯(lián)系人編號],[合作方式],[項(xiàng)目類別],[產(chǎn)業(yè)化階段],[關(guān)鍵詞],[時(shí)間],[轉(zhuǎn)化情況]FROM[項(xiàng)目成果]5.3.1單表數(shù)據(jù)查詢2、更改列標(biāo)題的名稱在圖5-3所示的查詢結(jié)果中,列的標(biāo)題顯示是數(shù)據(jù)表中列的名稱。在有些場合,需要將標(biāo)題更改為更易于理解的名稱,如將“ProductName”顯示為“產(chǎn)品名稱”更易于理解,且不會產(chǎn)生岐議。此時(shí),可以通過更改列標(biāo)題來實(shí)現(xiàn)。如:

SELECTProductName‘產(chǎn)品名稱’,UnitPrice‘單價(jià)’FROM產(chǎn)品數(shù)據(jù)表

SELECTProductNameAS'產(chǎn)品名稱',UnitPriceAS'單價(jià)'FROM產(chǎn)品數(shù)據(jù)表5.3.1單表數(shù)據(jù)查詢3、數(shù)據(jù)運(yùn)算在SELECT語句中還可以添加各種常量、函數(shù),對查詢的數(shù)據(jù)執(zhí)行各種運(yùn)算。如對數(shù)值型列可以在查詢中執(zhí)行算術(shù)運(yùn)算,對字符型列可以執(zhí)行字符串的合并、比較等各種運(yùn)算。例如以下代碼在“ProductName”前添加字符常量,并對“UnitPrice”列打9折后顯示為“9折單價(jià)”,其中“+”可以用于連接兩個(gè)字符型數(shù)據(jù)列,或者連接查詢字符型數(shù)據(jù)列和字符型常量。同樣,SELECT語句對列的運(yùn)算并不會改變表中的實(shí)際數(shù)據(jù)值。

SELECT'產(chǎn)品名稱:'+ProductName,UnitPrice*0.9'9折單價(jià):'FROM產(chǎn)品數(shù)據(jù)表5.3.1單表數(shù)據(jù)查詢4、簡單的查詢條件如果不指定WHERE條件子句,SELECT查詢顯示的是數(shù)據(jù)表中所有行的數(shù)據(jù)。設(shè)置WHERE條件,查詢滿足要求的數(shù)據(jù)在現(xiàn)實(shí)中的應(yīng)用比查詢?nèi)繑?shù)據(jù)更廣泛。如果只需要設(shè)定一個(gè)條件,如在“產(chǎn)品數(shù)據(jù)庫”查詢“ProductID”列值為“4”的數(shù)據(jù),可以稱為簡單的查詢條件,SELECT語句可表示為:

SELECT*FROM產(chǎn)品數(shù)據(jù)表whereProductID=45.3.1單表數(shù)據(jù)查詢4、簡單的查詢條件如果不指定WHERE條件子句,SELECT查詢顯示的是數(shù)據(jù)表中所有行的數(shù)據(jù)。設(shè)置WHERE條件,查詢滿足要求的數(shù)據(jù)在現(xiàn)實(shí)中的應(yīng)用比查詢?nèi)繑?shù)據(jù)更廣泛。如果只需要設(shè)定一個(gè)條件,如在“產(chǎn)品數(shù)據(jù)庫”查詢“ProductID”列值為“4”的數(shù)據(jù),可以稱為簡單的查詢條件,SELECT語句可表示為:

SELECT*FROM產(chǎn)品數(shù)據(jù)表whereProductID=4select*from局表whereID=@C5.3.1單表數(shù)據(jù)查詢4、簡單的查詢條件在有些場合,如查詢新聞時(shí),可能不知道新聞標(biāo)題的完整內(nèi)容,但知道其中的部分關(guān)鍵詞,則可以采用模糊匹配條件。模糊匹配采用的關(guān)鍵詞是:LIKE,一般用于字符型數(shù)據(jù)的匹配條件中。如:想從“產(chǎn)品數(shù)據(jù)表”中查詢“ProductName”列中包含“聯(lián)想”的產(chǎn)品時(shí),條件表達(dá)式可以寫為:ProductNamelike'%聯(lián)想%',則查詢語句如下:SELECT*FROM產(chǎn)品數(shù)據(jù)表whereProductNamelike'%聯(lián)想%'5.3.1單表數(shù)據(jù)查詢5、復(fù)合查詢條件如果查詢條件中包含的條件不只一個(gè),如要求同時(shí)滿足2個(gè)以上的條件,或者滿足幾個(gè)條件中的一個(gè),這樣的復(fù)雜條件稱為復(fù)合查詢條件。復(fù)合查詢條件根據(jù)邏輯關(guān)系的不同,可以分為:“與”條件和“或”條件兩種?!芭c”條件表示要求同時(shí)滿足兩個(gè)以上的條件,使用“AND”關(guān)鍵詞,可以構(gòu)造“與”條件?!盎颉睏l件表示在幾個(gè)條件中只要滿足其中的一個(gè),使用“OR”關(guān)鍵詞可以構(gòu)造“或”條件。例如,以下代碼構(gòu)造了一個(gè)“與”條件,即要求從“產(chǎn)品數(shù)據(jù)表”中查詢既滿足“ProductName”列中含有“聯(lián)想”字符,且“UnitPrice”列低于5000的產(chǎn)品數(shù)據(jù),查詢結(jié)果如圖5-9所示。SELECT*FROM產(chǎn)品數(shù)據(jù)表whereProductNamelike'%聯(lián)想%'ANDUnitPrice<40005.3.1單表數(shù)據(jù)查詢6、使用比較運(yùn)算符T-SQL支持采用“=、>、<、>=、<=、<>、!=、!>、!<”等比較運(yùn)算符來構(gòu)造查詢條件,其中“<>”表示“不等于”,與“!=”含義相同,“!>”表示“不大于”與“<=”含義相同,“!<”表示“不小于”,與“>=”含義相同。5.3.1單表數(shù)據(jù)查詢7、使用范圍和列表

在某些情況下,要求查詢條件在某一個(gè)范圍內(nèi),如要求查詢在“2010-01-01”到“2010-01-31”范圍內(nèi)的訂單,或者銷售量在“100”到“200”范圍內(nèi)的產(chǎn)品等,這時(shí)可以使用范圍關(guān)鍵詞BETWEEN和AND來構(gòu)建條件。例如,以下代碼要求從“Orders”表中查詢“orderdate”列在“2010-01-01”到“2010-01-15”之間范圍內(nèi)的訂單數(shù)據(jù)。Selectorderid,customerid,employeeid,orderdatefromorderswhereorderdatebetween‘2010-01-01’and‘2010-01-15’5.3.1單表數(shù)據(jù)查詢7、使用范圍和列表

在另外一些場合,范圍不是連續(xù)的范圍,而是一些離散的值,這時(shí)可以采用列表。在T-SQL中列表可以使用IN關(guān)鍵詞來構(gòu)造,如以下代碼表示要求從“authors”表查詢滿足“state”在“‘CA’,’IN’,’MD’”三項(xiàng)列表中的數(shù)據(jù)。Select*fromauthorswherestatein(‘CA’,’IN’,’MD’)如果列表范圍是數(shù)值,可以使用數(shù)字值來構(gòu)造列表,如以下代碼表示從“產(chǎn)品數(shù)據(jù)表”中查詢“ProductID”列在“1,3,4,8”列表范圍中的產(chǎn)品數(shù)據(jù)。SELECT*FROM產(chǎn)品數(shù)據(jù)表whereProductIDIN(1,3,4,8)5.3.1單表數(shù)據(jù)查詢8、使用聚合函數(shù)聚合函數(shù)包括AVG、MIN、MAX、SUM、COUNT、STDEV、STDEVP、VAR、VARP,這些聚合函數(shù)可以在SELECT語句中實(shí)現(xiàn)對數(shù)據(jù)的統(tǒng)計(jì)。例如,以下代碼分別使用上述聚合函數(shù)計(jì)算“產(chǎn)品數(shù)據(jù)表”中“UnitPrice”列的平均值、最小值、最大值、合計(jì)等。SELECTCOUNT(*)as'表中數(shù)據(jù)條數(shù)',Min(UnitPrice)as'最低單價(jià)',MAX(UnitPrice)as'最高單價(jià)',SUM(UnitPrice)as'單價(jià)合計(jì)',AVG(UnitPrice)as'平均單價(jià)',STDEV(UnitPrice)as'單價(jià)標(biāo)準(zhǔn)偏差',STDEVP(UnitPrice)as'單價(jià)總體標(biāo)準(zhǔn)偏差',VAR(UnitPrice)as'單價(jià)方差',VARP(UnitPrice)as'單價(jià)總體方差'FROM產(chǎn)品數(shù)據(jù)表5.3.1單表數(shù)據(jù)查詢9、數(shù)據(jù)排序ORDERBY可以對數(shù)據(jù)按升序或者降序排列,升序使用的關(guān)鍵詞是ASC,降序使用的關(guān)鍵詞是DESC,系統(tǒng)默認(rèn)設(shè)置是升序。例如,以下代碼對“產(chǎn)品數(shù)據(jù)表”中的數(shù)據(jù)按“UnitPrice”列從低到高的順序排列,查詢執(zhí)行的結(jié)果如圖5-13所示。SELECT*FROM產(chǎn)品數(shù)據(jù)表ORDERBYUnitPriceORDERBY可以按多個(gè)列進(jìn)行排序,如“ORDERBYUnitPrice,ProductID”,排序時(shí)會先以第一個(gè)指定列的順序進(jìn)行排列,如果第一列的值相同,再按第二列的順序進(jìn)行排序,以此類推。在對多個(gè)列進(jìn)行排序時(shí),可以對每個(gè)列分別指定排列的順序,如“ORDERBYUnitPriceDESC,ProductID”,對第一列“UnitPrice”按從高到低的降序排列,第二列按默認(rèn)設(shè)定的升序排序。5.3.1單表數(shù)據(jù)查詢10、去除重復(fù)數(shù)據(jù)在T-SQL中可以使用DISTINCT關(guān)鍵詞來避免在查詢結(jié)果中顯示重復(fù)數(shù)據(jù)。例如:

SELECTDISTINCTProductNameFROM產(chǎn)品數(shù)據(jù)表ORDERBYProductName。DISTINCT是以列列表作為重復(fù)判斷的依據(jù)。因此,如果將上述查詢語句更改為:SELECTDISTINCTProductName,ProductIDFROM產(chǎn)品數(shù)據(jù)表ORDERBYProductNam由于ProductName,ProductID兩列數(shù)據(jù)組合不重復(fù),因此不會去除任何數(shù)據(jù)行。5.3.1單表數(shù)據(jù)查詢11、關(guān)于NULLNULL是一個(gè)特殊值,如果需要查看數(shù)據(jù)表中某一列值為NULL的數(shù)據(jù),有兩種方式可以構(gòu)造NULL條件:“ISNULL”和“=NULL”,如:ProductNameISNULL或者ProductName=NULL。究竟取哪種表達(dá)式,取決于系統(tǒng)的設(shè)置:SETANSI_NULLS{ON|OFF}。在SQLServer早期的版本中,允許使用“whereProductName=NULL”檢查“ProductName”列中是否含有NULL值。但是,這不符合ANSI標(biāo)準(zhǔn),因?yàn)锳NSI標(biāo)準(zhǔn)將NULL看成一個(gè)完全未知的值,不能等于任何其他值。設(shè)置SETANSI_NULLSON,將無法使用“whereProductName=NULL”,此時(shí)可以使用“whereProductNameISNULL”。例如下列代碼中,第一行代碼沒有查詢到數(shù)據(jù),而第二條代碼有數(shù)據(jù)產(chǎn)生,SELECT*FROM產(chǎn)品數(shù)據(jù)表whereProductName=nullSELECT*FROM產(chǎn)品數(shù)據(jù)表whereProductNameisnull5.3.1單表數(shù)據(jù)查詢12、使用GROUPBY分組在T-SQL中可以利用GROUPBY來實(shí)現(xiàn)對數(shù)據(jù)的分組。例如,需要對“訂單細(xì)節(jié)表”中的數(shù)據(jù)按照產(chǎn)品進(jìn)行分組統(tǒng)計(jì),計(jì)算不同產(chǎn)品的銷售數(shù)量和銷售金額,可以用以下代碼實(shí)現(xiàn)。SELECTproductid,sum(sales)as‘銷售量’,sum(subtotal)as‘銷售額’fromdbo.訂單細(xì)節(jié)表GROUPBYproductid如果需要從GROUPBY分組的數(shù)據(jù)中篩選符合特定條件的數(shù)據(jù),需要使用HAVING,而不能使用WHERE。如要從上述分組匯總的數(shù)據(jù)集中篩選出“ProductID”列值為2的數(shù)據(jù),可以使用以下代碼:SELECTproductid,sum(sales)as‘銷售量’,sum(subtotal)as‘銷售額’fromdbo.訂單細(xì)節(jié)表GROUPBYproductidHAVINGProductID=2selectG.裁判id,SUM(G.局評報(bào)酬)as薪酬,COUNT(*)asamount,P.玩家ID,dbo.Get_Up_Judge_LevelStr(P.裁判等級)as裁判等級,p.裁判等級分fromdbo.局表asGinnerjoindbo.玩家asPonG.裁判id=P.數(shù)字IDwhere(G.主局時(shí)間between@d1and@d2)andG.裁判id=@cidGroupbyG.裁判id,P.玩家ID,P.裁判等級,p.裁判等級分orderbyp.裁判等級desc33書名讀者編號借出日期計(jì)算機(jī)應(yīng)用12019-2-1SQLServer22019-2-2數(shù)據(jù)庫開發(fā)技術(shù)32019-2-2計(jì)算機(jī)圖形12019-2-3操作系統(tǒng)12019-2-4讀者編號讀者姓名讀者部門1張三工學(xué)院2李四工學(xué)院3王五理學(xué)院借書表讀者信息表想知道某人借了什么書,連接語句如何寫?5.3.2多表聯(lián)接數(shù)據(jù)查詢T-SQL中,用于聯(lián)接多表的聯(lián)接查詢語句可以劃分為:內(nèi)聯(lián)接(INNERJOIN)、外聯(lián)接(OUTERJOIN)和交叉聯(lián)接(CROSSJOIN)。1、內(nèi)聯(lián)接內(nèi)聯(lián)接采用INNERJOIN聯(lián)接兩個(gè)數(shù)據(jù)表,通過ON關(guān)鍵詞構(gòu)造兩個(gè)表之間的關(guān)系。內(nèi)聯(lián)接可以把兩表中符合聯(lián)接條件的數(shù)據(jù)抽取出來生成第三個(gè)表。因此,內(nèi)聯(lián)接生成的表的數(shù)據(jù)通常會比兩源表中任一表的數(shù)據(jù)量少,或者等于數(shù)據(jù)量較小的那個(gè)表的數(shù)據(jù)量。例如,要從表“訂單細(xì)節(jié)表”中查詢“購買的產(chǎn)品名稱、數(shù)量以及金額”,則需要將“訂單細(xì)節(jié)表”與“產(chǎn)品數(shù)據(jù)表”聯(lián)接,以下代碼可以實(shí)現(xiàn)上述要求。SELECT產(chǎn)品數(shù)據(jù)表.ProductName,訂單細(xì)節(jié)表.salesas‘銷售量’,訂單細(xì)節(jié)表.subtotalas‘銷售額’fromdbo.訂單細(xì)節(jié)表innerjoin產(chǎn)品數(shù)據(jù)表on訂單細(xì)節(jié)表.ProductID=產(chǎn)品數(shù)據(jù)表.ProductID35SELECTtop200項(xiàng)目成果.id,項(xiàng)目成果.項(xiàng)目名稱,項(xiàng)目成果.合作方式,項(xiàng)目類別.項(xiàng)目類別,產(chǎn)業(yè)化階段.產(chǎn)業(yè)化階段,聯(lián)系人.姓名,聯(lián)系人.辦公電話,聯(lián)系人.傳真,聯(lián)系人.電子郵箱,單位.單位名稱,項(xiàng)目成果.項(xiàng)目編號

FROM項(xiàng)目成果INNERJOIN

產(chǎn)業(yè)化階段ON項(xiàng)目成果.產(chǎn)業(yè)化階段=產(chǎn)業(yè)化階段.idINNERJOIN

聯(lián)系人ON項(xiàng)目成果.聯(lián)系人編號=聯(lián)系人.聯(lián)系人編號INNERJOIN

單位ON項(xiàng)目成果.單位編號=單位.單位編號INNERJOIN

項(xiàng)目類別ON項(xiàng)目成果.項(xiàng)目類別=項(xiàng)目類別.id

ORDERBY項(xiàng)目成果.idDESC項(xiàng)目管理的源代碼5.3.2多表聯(lián)接數(shù)據(jù)查詢2、外聯(lián)接外聯(lián)接采用OUTERJOIN聯(lián)接兩個(gè)數(shù)據(jù)表,同樣通過關(guān)鍵詞ON構(gòu)造聯(lián)接條件。外聯(lián)接根據(jù)聯(lián)接方向不同,可以劃分為:左聯(lián)接LEFTOUTERJOIN、右聯(lián)接RIGHTOUTERJOIN和FULLOUTERJOIN。與內(nèi)聯(lián)接只顯示滿足連接條件的數(shù)據(jù)不同,外聯(lián)接可以分為主表和從表,主表中的數(shù)據(jù)會被全部顯示出來,而從表中只顯示滿足聯(lián)接條件的數(shù)據(jù),這樣外聯(lián)接結(jié)果一般會比兩表中數(shù)據(jù)量小的表中的數(shù)據(jù)多。如果是左聯(lián)接LEFTJOIN,則位于FROM子句左端的表為主表,另一端的表為從表;右聯(lián)接則反之。例如,以下代碼構(gòu)造了一個(gè)左連接,“訂單細(xì)節(jié)表”為主表,“產(chǎn)品數(shù)據(jù)表”為從表,聯(lián)接條件是“D.ProductID=P.ProductID”SELECTP.ProductName,D.salesas'銷售量',D.subtotalas'銷售額'fromdbo.訂單細(xì)節(jié)表ASDLEFTjoin產(chǎn)品數(shù)據(jù)表ASPonD.ProductID=P.ProductID5.3.2多表聯(lián)接數(shù)據(jù)查詢3、CROSSJOIN聯(lián)接CROSSJOIN聯(lián)接,也被稱為交叉聯(lián)接。與內(nèi)聯(lián)接、外聯(lián)接都不同,交叉聯(lián)接會羅列所有可能的數(shù)據(jù),最終形成的結(jié)果是兩聯(lián)接表的笛卡兒乘積,即第一表的數(shù)據(jù)行數(shù)與第二表數(shù)據(jù)行數(shù)的乘積。如果聯(lián)接的兩表分別有10行和20行數(shù)據(jù),則CROSSJOIN查詢結(jié)果的數(shù)據(jù)數(shù)為200行。例如,以下代碼構(gòu)造了一個(gè)CROSSJOIN聯(lián)接查詢的實(shí)例,查詢結(jié)果如圖5-28所示,生成的數(shù)量為“產(chǎn)品數(shù)據(jù)表”9行和“訂單細(xì)節(jié)表”5行的乘積,共計(jì)45行數(shù)據(jù)。SELECTP.ProductName,D.salesas'銷售量',D.subtotalas'銷售額'fromdbo.訂單細(xì)節(jié)表ASDCROSSjoin產(chǎn)品數(shù)據(jù)表ASP5.3.2多表聯(lián)接數(shù)據(jù)查詢4、多表聯(lián)接查詢中使用WHERE子句與單表查詢一樣,在多表聯(lián)接查詢中,同樣可以使用“WHERE”來構(gòu)造數(shù)據(jù)查詢的條件,如以下代碼在內(nèi)聯(lián)接四個(gè)表的基礎(chǔ)上添加了數(shù)據(jù)篩選的條件。由于參與聯(lián)接的多個(gè)表中,可能存在列名相同的情況,因此在構(gòu)造條件時(shí),應(yīng)在“列名”前添加表名或者表的別名,如此例中“c.CustomerID=3”表示取“Customer”表的“CustomerID”列的值作為篩選條件。SELECTP.ProductName,D.salesas'銷售量',D.subtotalas'銷售額',C.CustomerNameas'客戶名稱',C.ShipAddressas'送貨地址',O.ordertimeas'訂購時(shí)間'fromdbo.訂單細(xì)節(jié)表ASDinnerjoin產(chǎn)品數(shù)據(jù)表ASPonD.ProductID=P.ProductIDinnerjoindbo.訂單表asOonD.orderID=O.orderIDinnerjoindbo.客戶數(shù)據(jù)表asConO.CustomerID=C.customerIDwherec.CustomerID=35.3.3使用SELECTINTO語句SELECTINTO可以把由SELECT語句中選定的數(shù)據(jù)保存到一個(gè)新數(shù)據(jù)表中。例如,以下代碼執(zhí)行之后會在當(dāng)前數(shù)據(jù)庫“NetSales”中創(chuàng)建數(shù)據(jù)表“Sales”,并且會在“Sales”中添加45行數(shù)據(jù)。SELECTP.ProductName,D.salesas‘銷售量’,D.subtotalas‘銷售額’

intosalesfromdbo.訂單細(xì)節(jié)表ASDCROSSjoin產(chǎn)品數(shù)據(jù)表ASP5.3.4組合查詢T-SQL提供了UNION、INTERSECT和EXCEPT運(yùn)算符,可以實(shí)現(xiàn)組合查詢。所謂組合查詢是指在某些場合,查詢結(jié)果需要通過多條SELECT語句從一個(gè)或多個(gè)表中來獲取,查詢最終結(jié)果是多條SELECT語句查詢結(jié)果的匯總數(shù)據(jù)集。組合查詢可以看作是數(shù)據(jù)的垂直聯(lián)接,而前面所介紹的多表聯(lián)接查詢可以看作是數(shù)據(jù)的水平聯(lián)接。T-SQL提供的三個(gè)查詢組合運(yùn)算符可以分別滿足三種不同的需要,但是組合查詢要求每條SELECT語句生成的數(shù)據(jù)集中列的個(gè)數(shù)、列的數(shù)據(jù)類型和順序必須相同。5.3.4組合查詢1、UNIONUNION是一種并集運(yùn)算,可以將兩個(gè)以上的查詢結(jié)果合并成一個(gè)結(jié)果,并在后續(xù)的結(jié)果集中去除前面結(jié)果集中已有的數(shù)據(jù)行。例如以下代碼采用UNION組合了兩條SELECT語句,這兩條SELECT分別從“產(chǎn)品數(shù)據(jù)表”和“產(chǎn)品”表中查詢“ProductName”數(shù)據(jù)。SELECTProductNamefrom產(chǎn)品數(shù)據(jù)表UNIONSELECTProductNamefrom產(chǎn)品左右5.3.4組合查詢2、INTERSECTINTERSECT可以返回多條查詢語句中都包含的非重復(fù)數(shù)據(jù)。例如以下代碼,從“產(chǎn)品數(shù)據(jù)表”和“產(chǎn)品”表中執(zhí)行INTERSECT組合查詢。SELECTProductNamefrom產(chǎn)品數(shù)據(jù)表INTERSECTSELECTProductNamefrom產(chǎn)品左右5.3.4組合查詢3、EXCEPTEXCEPT可以比較左右兩個(gè)查詢結(jié)果集的差異,并從左側(cè)的查詢結(jié)果集中返回在右側(cè)找不到的數(shù)據(jù),即從左側(cè)的結(jié)果集中減去與右側(cè)結(jié)果集相同的數(shù)據(jù)后得到的結(jié)果。例如,以下代碼使用EXCEPT從“產(chǎn)品數(shù)據(jù)表”和“產(chǎn)品”表中獲取組合查詢結(jié)果。SELECTProductNamefrom產(chǎn)品數(shù)據(jù)表EXCEPTSELECTProductNamefrom產(chǎn)品左右5.3.5使用FETCH與OFFSET分頁當(dāng)查詢結(jié)果數(shù)據(jù)量較大時(shí),采用分頁方式顯示數(shù)據(jù)是一種必然的選擇。在T-SQL未提供直接的分頁語句之前,實(shí)現(xiàn)分頁功能是一個(gè)相對較為復(fù)雜的過程。自SQLServer2012起,T-SQL提供了FETCH和OFFSET參數(shù),可以非常簡捷和高效地實(shí)現(xiàn)大數(shù)據(jù)集的分頁顯示。

FETCH和Offset可以作為OrderBy子句的參數(shù),其語法如下:其中,OFFSET參數(shù)用于指定從結(jié)果集中獲取記錄的起始行,其后的參數(shù)可以是整數(shù)、也可以是表達(dá)式,integer_constant代表整數(shù)值,offset_row_count_expression代表表達(dá)式。FETCH用于指定在處理OFFSET子句后返回的行數(shù),該值可以是大于或等1的整數(shù)常量或表達(dá)式,同樣integer_constant代表整數(shù)值,offset_row_count_expression代表表達(dá)式。參數(shù)中ROW和ROWS具有相同含義,F(xiàn)IRST和NEXT也具有相同含義。OFFSET{integer_constant|offset_row_count_expression}{ROW|ROWS}[FETCH{FIRST|NEXT}{integer_constant|fetch_row_count_expression}{ROW|ROWS}ONLY]5.3.5使用FETCH與OFFSET分頁UseNetSaleSELECTProductID,ProductName,UnitPrice,Unit,InstocksFROM產(chǎn)品數(shù)據(jù)表orderbyProductIDGOSELECTProductID,ProductName,UnitPrice,Unit,InstocksFROM產(chǎn)品數(shù)據(jù)表orderbyProductIDOFFSET0ROWFETCHNEXT3ROWONLY第一條SELECT語句,顯示了產(chǎn)品數(shù)據(jù)表中的所有數(shù)據(jù),第二條SELECT從產(chǎn)品數(shù)據(jù)表返回從第一行開始的三條記錄。UseNetSaleDECLARE@OffsetRowstinyint=2,@FetchRowstinyint=5SELECTProductID,ProductName,UnitPrice,Unit,InstocksFROM產(chǎn)品數(shù)據(jù)表OrderbyProductIDOFFSET@OffsetRowsROWSFETCHNEXT@FetchRowsROWSONLY定義了兩tinyint型變量@OffsetRows和@FetchRows,分別用于保存分頁起始的記錄行和每頁返回的行數(shù)。5.4T-SQL附加語言元素T-SQL作為數(shù)據(jù)庫操作語言,除了上述語句之外,還包含很多附加的語言元素,如:標(biāo)識符、保留關(guān)鍵字、常量、變量、運(yùn)算符、流程控制語句、函數(shù)、注釋等。5.4.1標(biāo)識符在T-SQL語言中,標(biāo)識符用于命名各種對象,如數(shù)據(jù)庫名稱、數(shù)據(jù)表名稱、存儲過程等,以及變量、函數(shù)等名稱。與其他語言類似,T-SQL中的標(biāo)識符也必須符合標(biāo)識符命名的規(guī)則,這些規(guī)則包括以下幾項(xiàng)。1、首字符可以是Unicode字符集中的一個(gè)字母,包含英文字母A-Z,a-z,以及其他Unicode字符,如漢字等等。2、首字符還可以是下劃線(_)、位置符號(@)、數(shù)字符號(#)。但以這些符號作為首字符時(shí)會有不同的含義,如位置符號(@)開頭表示定義的標(biāo)識為局部變量,以兩個(gè)(@@)開頭表示系統(tǒng)內(nèi)置的某些函數(shù);以一個(gè)(#)開頭表示為局部臨時(shí)表或過程,以兩個(gè)(#)開頭表示為全局臨時(shí)對象。5.4T-SQL附加語言元素3、標(biāo)識符長度限制在128個(gè)字符以內(nèi),除了局部臨時(shí)表的名稱之外,其他標(biāo)識長度限制在116個(gè)字符以內(nèi)。4、后續(xù)字符可以是Unicode字母、數(shù)字、@、$、_、#等符號。5、標(biāo)識符不能是SQLServer的保留關(guān)鍵字。6、標(biāo)識符不能嵌入空格或除上述字符以外的其他特殊字符。例如:Products129、_129、@1G等都是合法的標(biāo)識符,而CustomerName,1_name等則不是合法標(biāo)識符。5.4T-SQL附加語言元素5.4.2保留關(guān)鍵字保留關(guān)鍵字是SQLServer預(yù)留的用于定義、操作和訪問數(shù)據(jù)庫的關(guān)鍵詞,是T-SQL語言的組成部分。這些關(guān)鍵詞不能直接用于命名標(biāo)識符,雖然允許通過分隔標(biāo)識符,如[]或””來引用這些關(guān)鍵詞,作為標(biāo)識符,但為避免引起不必要的誤解,建議不要使用關(guān)鍵字作為標(biāo)識符。T-SQL中的保留關(guān)鍵字包括:ADD、ALL、ALTER、AND、ANY、AS、ASC、AUTHORIZATION、BACKUP、BEGIN、BETWEEN、BREAK、BROWSE、BULK、BY等現(xiàn)在用的180個(gè)關(guān)鍵詞,還包括ABSOLUTE、ACTION、ADMIN、AFTER、AGGREGATE、BEFORE、FREE等將來可能使用的關(guān)鍵字194個(gè)。5.4T-SQL附加語言元素5.4.3常量與變量常量是表示特定數(shù)據(jù)值的符號,如‘SQLServer2019’表示一個(gè)字符串常量,1表示一個(gè)整型常量,1.0表示浮點(diǎn)數(shù)常量。在SQLServer2019中,要求字符串常量需要使用一對單引號(’’),數(shù)值型常量直接使用數(shù)值,日期時(shí)間型常量需要使用一對單引號(’’)。變量是指在T-SQL代碼執(zhí)行過程中,其值可變,需要賦值的對象。在SQLServer2019中,變量可用于批處理和腳本中,用來計(jì)算循環(huán)的次數(shù),也可以保存數(shù)據(jù)值以供控制流語句測試,還可以用于保存存儲過程或函數(shù)返回的數(shù)據(jù)值。5.4T-SQL附加語言元素5.4.3常量與變量在T-SQL中,定義變量的語句為DECLARE,所定義變量的首字符必須是@,且必須指定數(shù)據(jù)類型和長度。例如:DECLARE@SalesCountint默認(rèn)定義的變量其值為NULL,如果需要對變量賦值,可以使用SET語句,如:DECLARE@saler_namevarchar(20)SET@saler_name=‘王強(qiáng)’5.4T-SQL附加語言元素變量定義后,可以在存儲過程、函數(shù)或者其他過程中使用變量,如以下代碼定義了變量@id,并將之用于SELECT語句,執(zhí)行結(jié)果如圖所示。DECLARE@idintSet@id=100select*fromNewswhereid>@id5.4.4運(yùn)算符運(yùn)算符是程序設(shè)計(jì)語言重要元素。在T-SQL中提供了算術(shù)運(yùn)算符、比較運(yùn)算符、邏輯運(yùn)算符、賦值運(yùn)算符、字符串連接運(yùn)算符、位運(yùn)算符和一元運(yùn)算符等多種運(yùn)算符,使T-SQL具備完成各種運(yùn)算的能力。當(dāng)一個(gè)表達(dá)式中包含上述運(yùn)算符中的多個(gè)時(shí),T-SQL會根據(jù)不同運(yùn)算符的優(yōu)先級來執(zhí)行運(yùn)算。這些運(yùn)算符的優(yōu)先級順序如下。正、負(fù)、非(+、-、~)*、/、%+(加法或字符串連接)、-(減法)、&=(比較)、>、<、>=、<=、<>、!=、!>、!<^、|NOTANDALL、ANY、BETWEEN、IN、LIKE、OR、SOME=(賦值)5.4.5控制流語句T-SQL中提供了九種控制流語句,可以實(shí)現(xiàn)對程序流程的控制。這些語句包括:BEGIN...END、BREAK、CONTINUE、GOTO、IF...ELSE、RETURN、TRY...CATCH、WAITFOR、WHILE等,這些語句的含義如表所示:控制流語句含義BEGIN...END用于定義一組要求連續(xù)執(zhí)行的語句塊,語句塊可以嵌套定義BREAK跳出循環(huán)語句的循環(huán)過程,繼續(xù)執(zhí)行循環(huán)語句后面的語句CONTINUE重新開始新的WHILE循環(huán)GOTO跳轉(zhuǎn)到由GOTO后指定的語句,并執(zhí)行IF...ELSE條件分支語句,如果條件成立,執(zhí)行IF后的語句,條件不成立執(zhí)行ELSE后的語句RETURN從過程、函數(shù)中返回,不再執(zhí)行RETURN后的語句,如果RETURN語句指定有返回值,則將值返回,否則返回值為0。TRY...CATCH錯(cuò)誤捕捉語句,程序先執(zhí)行TRY后的語句,如果出現(xiàn)錯(cuò)誤,則執(zhí)行CATCH后的語句。因此,可以在CATCH中添加錯(cuò)誤處理語句,實(shí)現(xiàn)對錯(cuò)誤的響應(yīng)。WAITFOR掛起后續(xù)語句,直到以下情況發(fā)生:已超過指定的時(shí)間間隔、到達(dá)一天中指定的時(shí)間、指定的RECVEIVE語句至少修改一行數(shù)據(jù);再繼續(xù)執(zhí)行掛起的及后續(xù)的語句。WHILE為循環(huán)語句。當(dāng)條件成立時(shí),循環(huán)執(zhí)行循環(huán)體內(nèi)的語句,條件不成立時(shí),執(zhí)行循環(huán)體后續(xù)的語句。5.4.5控制流語句1、使用IF…ELSE實(shí)現(xiàn)條件分支結(jié)構(gòu)IF…ELSE語句是實(shí)現(xiàn)條件分支最常用的語句,基本語法如下,當(dāng)Boolean_expression為真時(shí),執(zhí)行IF后的語句塊,為假時(shí),執(zhí)行ELSE后的語句塊。IFBoolean_expression

{sql_statement|statement_block}[ELSE

{sql_statement|statement_block}]例如:以下代碼配合EXISTS,構(gòu)建了一個(gè)條件分支語句。在IF語句中先判斷是否存在“產(chǎn)品”表,如果存在,就執(zhí)行BEGIN...END之間的語句塊,不存在則提示“數(shù)據(jù)表產(chǎn)品不存在?!痹摱未a執(zhí)行的結(jié)果如圖5-37所示。IFEXISTS(SELECT*fromINFORMATION_SCHEMA.TABLESwhereTABLE_NAME='產(chǎn)品')BEGINSELECT‘?dāng)?shù)據(jù)表產(chǎn)品存在?!甋ELECT*from產(chǎn)品ENDElseSELECT'數(shù)據(jù)表產(chǎn)品不存在。'5.4.5控制流語句2、使用WHILE構(gòu)造循環(huán)結(jié)構(gòu)WHILE語句可以用來構(gòu)造循環(huán)結(jié)構(gòu)程序。WHILE語句的語法如下,即當(dāng)Boolean_expression表達(dá)式為真時(shí),執(zhí)行循環(huán)體內(nèi)的語句,執(zhí)行到BREAK時(shí)跳出循環(huán),執(zhí)行循環(huán)體后續(xù)的語句。WHILEBoolean_expression

{sql_statement|statement_block}

[BREAK]

{sql_statement|statement_block}

[CONTINUE]

{sql_statement|statement_block}例如以下使用WHILE語句構(gòu)造了一個(gè)循環(huán)結(jié)構(gòu)的程序,WHILE循環(huán)體執(zhí)行了三次,當(dāng)變量@i=4時(shí),退出循環(huán)。declare@iintset@i=1while0<(SELECTCOUNT(*)from產(chǎn)品)BEGINSELECT*from產(chǎn)品set@i=@i+1if@i>3breakEND5.4.5控制流語句3、使用CASE在T-SQL中還可使用CASE語句來構(gòu)造條件分支結(jié)構(gòu)。CASE的基本語法如下,input_expression為輸入的用于判斷的表達(dá)式,當(dāng)when_expression表達(dá)式為真時(shí),執(zhí)行THEN后的語句,WHEN語句可以有多條,當(dāng)所有的WHEN語句條件都不滿足時(shí),執(zhí)行ELSE后的語句。CASEinput_expression

WHENwhen_expressionTHENresult_expression

[...n]

[

ELSEelse_result_expression

]END例如以下實(shí)例,構(gòu)造了一個(gè)應(yīng)用CASE語句實(shí)現(xiàn)的條件分支結(jié)構(gòu),根據(jù)“CategoryID”列取值不同,將數(shù)據(jù)分成三類,即“臺式電腦”、“筆記本電腦”和“其他”。

SELECTProductID,ProductName,UnitPrice,產(chǎn)品類別=CASEWHENCategoryID=1THEN'臺式電腦’WHENCategoryID=2THEN'筆記本電腦’ELSE‘其他’ENDFROM產(chǎn)品數(shù)據(jù)表5.4.6函數(shù)T-SQL提供了大量的系統(tǒng)函數(shù),可用于實(shí)現(xiàn)查詢語句列運(yùn)算、查詢條件的構(gòu)造、觸發(fā)器、視圖以及各種表達(dá)式等。在T-SQL中,函數(shù)根據(jù)執(zhí)行功能的不同,可以分為:聚合函數(shù)、配置函數(shù)、加密函數(shù)、游標(biāo)函數(shù)、日期和時(shí)間函數(shù)、數(shù)學(xué)函數(shù)、元數(shù)據(jù)函數(shù)、排名函數(shù)、行集函數(shù)、安全函數(shù)、字符串函數(shù)、系統(tǒng)函數(shù)、系統(tǒng)統(tǒng)計(jì)函數(shù)、文本函數(shù)等14類。5.4.6函數(shù)1、聚合函數(shù)聚合函數(shù)經(jīng)常用于數(shù)據(jù)的統(tǒng)計(jì),如統(tǒng)計(jì)不同產(chǎn)品的銷售量、統(tǒng)計(jì)最高的成績等,這類函數(shù)包括:AVG、MIN、MAX、SUM、COUNT、STDEV、STDEVP、VAR、VARP等。2、日期和時(shí)間函數(shù)日期和時(shí)間函數(shù)用于日期和時(shí)間的計(jì)算,在T-SQL查詢中經(jīng)常需要使用到對當(dāng)月銷售數(shù)量、本周出勤率等與時(shí)間有關(guān)的統(tǒng)計(jì)應(yīng)用。使用日期和時(shí)間函數(shù),可以處理日期和時(shí)間數(shù)據(jù),生成需要的結(jié)果值。在T-SQL中,日期和時(shí)間函數(shù)主要包括:DATEADD()、DATEDIFF()、DATENAME()、DATEPART()、DAY()、GETDATE()、GETUTCDATE()、MONTH()、YEAR()等函數(shù)名稱語法/含義DATEADD()DATEADD(datepart,number,date)在指定的日期時(shí)間值上加上一個(gè)時(shí)間間隔值,產(chǎn)生一個(gè)新值,如:Dateadd(dd,1,'2010-10-12'),表示在“2010-10-12”時(shí)間值上加上1天(dd代表天數(shù)),形成的新日期時(shí)間值為“2010-10-13”。DATEDIFFDATEDIFF(datepart,startdate,enddate)用于返回兩個(gè)日期時(shí)間值的邊界數(shù)。如:DATEDIFF(year,'2009-12-31','2010-01-02'),表示比較兩日期的年份(year)的差值。DATENAMEDATENAME(datepart,datetoinspect)用于返回指定日期時(shí)間值中指定部分的值,如:DATENAME(month,'2010-01-25'),要求返回月份(MONTH)的值。DATEPART()DATEPART(datepart,datetoinspect)用于返回指定日期值指定部分的值。如:DATEPART(DAY,'2010-01-25'),要求返回天(DAY)的部分。DAY()DAY(date)用于返回指定日期中的“天”的值,如DAY('2010-02-07')GETDATE()GETDATE()返回系統(tǒng)當(dāng)前的日期和時(shí)間值GETUTCDATE()GETUTCDATE()與GETDATE()一樣都能返回系統(tǒng)當(dāng)前的日期時(shí)間,但值是UTC的日期時(shí)間值。MONTH()MONTH(date)返回指定日期時(shí)間值的“月份”的值。YEAR()YEAR(date)返回指定日期時(shí)間值的“年份”的值。5.4.6函數(shù)3、數(shù)學(xué)函數(shù)T-SQL中提供了23種數(shù)據(jù)函數(shù),這些數(shù)據(jù)函數(shù)可以對SQLServer2019中的各種數(shù)值型數(shù)據(jù)進(jìn)行運(yùn)算。這些數(shù)學(xué)函數(shù)包括:ABS、ACOS、ASIN、ATAN、ATN2、CEILING、COS、COT、DEGREES、EXP、FLOOR、LOG、LOG10、PI、POWER、RADIANS、RAND、ROUND、SIGN、SIN、SQRT、SQUARE、TAN等。5.4.6函數(shù)4、字符串函數(shù)字符串函數(shù)是對字符串進(jìn)行各種操作的函數(shù)。T-SQL提供的字符串函數(shù)包括:ASCII、CHAR、CHARINDEX、DIFFERENCE、LEFT、LEN、LOWER、LTRIM、NCHAR、PATINDEX、QUOTENAME、REPLACE、REPLCATE、REVERSE、RIGHT、RTRIM、SOUNDEX、SPACE、STR、STUFF、SUBSTRING、UNICODE、UPPER等。5.4.6函數(shù)5、其他常用函數(shù)ISDATE()。該函數(shù)是一個(gè)對列、變量或常量進(jìn)行判斷,判別該列、變量或常量是否是一個(gè)日期時(shí)間值的函數(shù)。如果是日期時(shí)間,則返回1,否則返回0。這個(gè)函數(shù)能否

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論