sql 數(shù)據(jù)庫(kù) 第十章 SQL Server 2008T-SQL編程基礎(chǔ).ppt_第1頁(yè)
sql 數(shù)據(jù)庫(kù) 第十章 SQL Server 2008T-SQL編程基礎(chǔ).ppt_第2頁(yè)
sql 數(shù)據(jù)庫(kù) 第十章 SQL Server 2008T-SQL編程基礎(chǔ).ppt_第3頁(yè)
sql 數(shù)據(jù)庫(kù) 第十章 SQL Server 2008T-SQL編程基礎(chǔ).ppt_第4頁(yè)
sql 數(shù)據(jù)庫(kù) 第十章 SQL Server 2008T-SQL編程基礎(chǔ).ppt_第5頁(yè)
已閱讀5頁(yè),還剩72頁(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)介

1、SQL Server 數(shù)據(jù)庫(kù)程序設(shè)計(jì),授課教師:姜 姍,第10章 Transact-SQL編程基礎(chǔ),掌握常量和變量的使用方法 掌握運(yùn)算符和表達(dá)式的使用 掌握函數(shù)的定義和使用方法 掌握流程控制語(yǔ)句的使用,SQL是結(jié)構(gòu)化查詢語(yǔ)言(Structured Query Language)的縮寫,是一種數(shù)據(jù)庫(kù)查詢和程序設(shè)計(jì)語(yǔ)言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)。 SQL最早是IBM的圣約瑟研究實(shí)驗(yàn)室為其關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)System R開發(fā)的一種查詢語(yǔ)言,由于其結(jié)構(gòu)簡(jiǎn)潔,功能強(qiáng)大,簡(jiǎn)單易學(xué),所以得到了廣泛的應(yīng)用,目前大多數(shù)數(shù)據(jù)庫(kù)供應(yīng)商都支持SQL語(yǔ)言作為查詢語(yǔ)言。,概述,Transact-S

2、QL即事務(wù)SQL,也簡(jiǎn)稱為T-SQL,它是微軟公司對(duì)SQL語(yǔ)言的擴(kuò)充,是SQL語(yǔ)言的超集,是應(yīng)用程序與SQL- Server數(shù)據(jù)庫(kù)引擎溝通的主要語(yǔ)言。 Transact-SQL語(yǔ)言包括以下四個(gè)部分: 數(shù)據(jù)定義語(yǔ)言(DDL):定義和管理數(shù)據(jù)庫(kù)及其對(duì)象 數(shù)據(jù)操作語(yǔ)言(DML):操作數(shù)據(jù)庫(kù)中各對(duì)象 數(shù)據(jù)控制語(yǔ)言(DCL):進(jìn)行安全管理和權(quán)限管理等 一些附加的語(yǔ)言元素,數(shù)據(jù)定義語(yǔ)言是指用來(lái)定義和管理數(shù)據(jù)庫(kù)以及數(shù)據(jù)庫(kù)中的各種對(duì)象的語(yǔ)句。在SQL Server 中,數(shù)據(jù)庫(kù)對(duì)象包括表、視圖、觸發(fā)器、存儲(chǔ)過(guò)程、規(guī)則、缺省、用戶自定義的數(shù)據(jù)類型等。,數(shù)據(jù)定義語(yǔ)言(DDL),DDL的主要語(yǔ)句及功能,數(shù)據(jù)操縱語(yǔ)言(

3、DML),DML的主要語(yǔ)句及功能,DML是一般開發(fā)人員俗稱的 CRUD (Create/Retrieve/Update/Delete) 功能,意指數(shù)據(jù)的新增提取修改刪除四個(gè)數(shù)據(jù)操縱功能。,DCL語(yǔ)言用于安全管理,確定哪些用戶可以查看或修改數(shù)據(jù)庫(kù)中的數(shù)據(jù)。,數(shù)據(jù)控制語(yǔ)言(DCL),DCL的主要語(yǔ)句及功能,附加語(yǔ)言元素,這部分是微軟為了用戶編程方便增加的語(yǔ)言元素,這些語(yǔ)言元素包括運(yùn)算符、變量、函數(shù)和流程控制語(yǔ)句以及程序中的批處理、腳本、注釋等。 例如有些任務(wù)不能由單獨(dú)的T-SQL語(yǔ)句來(lái)完成,就需要使用SQL Server的批處理、腳本、存儲(chǔ)過(guò)程、觸發(fā)器等組織多條T-SQL語(yǔ)句來(lái)完成。,表達(dá)式是指將

4、常量、變量、函數(shù)等,用運(yùn)算符按一定的規(guī)則連接起來(lái)的有意義的式子。 運(yùn)算符是一些符號(hào),它們能夠用來(lái)執(zhí)行算術(shù)運(yùn)算、字符串連接、賦值以及在字段、常量和變量之間進(jìn)行比較。,10.2表達(dá)式,常量是指使用字符或數(shù)字表示出來(lái)的字符串、數(shù)值或日期等數(shù)據(jù),表示一個(gè)特定數(shù)據(jù)值的符號(hào)。根據(jù)數(shù)據(jù)類型,可將常量分為各種不同類型。 字符串常量 Unicode字符串 二進(jìn)制常量 bit常量 datetime常量,整型常量 decimal常量 float和real常量 貨幣常量 空值,一、常量,字符串常量是指使用單引號(hào)作為定界符,由字母(a-z、A-Z和漢字等)、數(shù)字(0-9)以及特殊字符(如感嘆號(hào)!、at符和數(shù)字號(hào)#)等組

5、成的字符序列,不包含任何字符的字符串,稱為空字符串,表示為。在字符串中,可使用兩個(gè)單引號(hào)來(lái)插入一個(gè)單引號(hào)。 下面是字符串的示例: abcdef 123 數(shù)據(jù)類型 abcdef,1.字符串常量,2. Unicode字符串,Unicode字符串的格式與普通字符串相似,但每個(gè)字符用兩個(gè)字節(jié)存儲(chǔ),需在字符串前面加一個(gè)N進(jìn)行區(qū)別,N前綴必須大寫。 下面是Unicode字符串的示例。 Nabcdef N123 N數(shù)據(jù)類型,3 二進(jìn)制常量,使用數(shù)字0或1表示,并且不使用引號(hào)。如果使用一個(gè)大于1的數(shù)字,它將被轉(zhuǎn)換為1。 十六進(jìn)制整型常量用0 x作前輟,例如:0 x123、0 xABC,單獨(dú)的0 x視為一個(gè)空十

6、六進(jìn)制常量。,4. bit常量,bit常量使用數(shù)字0或1表示,并且不使用引號(hào)。如果使用一個(gè)大于1的數(shù)字,它將被轉(zhuǎn)換為1。,5.日期時(shí)間型常量,datetime常量是用單引號(hào)括起來(lái)的日期和時(shí)間數(shù)據(jù),如下所示。 2004-3-12 1 may,2003 2004年3月12日 04/03/12 12:00:00 4/6/09 6:35:52 PM,整型常量是指不帶小數(shù)點(diǎn)的整數(shù),例如,123,+123,-100。,7 decimal常量,decimal常量是指帶小數(shù)點(diǎn)的數(shù),例如,123.56,+45.67,-10.005。,8 float和real常量,float是指使用科學(xué)記數(shù)法表示的數(shù),例如,1.

7、2E5,+0.45e-9,+5.7E12;real常量如153.98、156.231,6 整型常量,貨幣常量是指以$符號(hào)開頭的數(shù)字,如下所示。$12,$542023.14。,10 空值,是一個(gè)特殊的量,表示值未知,不同于空白或零值,用Null來(lái)表示,9 貨幣常量,變量是可以對(duì)其賦值并參與運(yùn)算的一個(gè)實(shí)體,其值在運(yùn)行過(guò)程中可以發(fā)生改變。 變量用于臨時(shí)存放數(shù)據(jù),變量中的數(shù)據(jù)隨著程序的運(yùn)行而變化,是SQL Server用來(lái)在語(yǔ)句之間傳遞數(shù)據(jù)的方式之一。T-SQL中的變量可以分為局部變量和全局變量?jī)煞N,局部變量是以開頭命名的變量,全局變量是以開頭命名的變量。,二、變量,1. 全局變量 全局變量是由系統(tǒng)提

8、供的,用于存儲(chǔ)一些系統(tǒng)信息。只可以使用全局變量,不可以自定義全局變量。 通常用來(lái)跟蹤服務(wù)器范圍和特定會(huì)話期間的信息,不能被用戶顯式地定義和賦值,但是我們可以通過(guò)訪問(wèn)全局變量來(lái)了解系統(tǒng)目前的一些狀態(tài)信息,表10.1 SQL Server中較常用的全局變量,例如:查看Select后的記錄集里的記錄數(shù) SELECT * FROM stu_info.dbo.student PRINT 一共查詢了+CAST(ROWCOUNT AS varchar(5)+條記錄,2.局部變量聲明,局部變量是由用戶自定義的變量,這些變量可以用來(lái)存儲(chǔ)數(shù)值型、字符串型等數(shù)據(jù),也可以存儲(chǔ)函數(shù)或存儲(chǔ)過(guò)程返回的值。使用Declare

9、語(yǔ)句可以聲明局部變量,其語(yǔ)法代碼如下: DECLARE local_variable AS data_type ,.n 其中的參數(shù)說(shuō)明如下。 local_variable:局部變量名稱 data_type:局部變量的數(shù)據(jù)類型,但不能是text,ntext或image類型,用Set語(yǔ)句和Select語(yǔ)句可以為變量賦值,其語(yǔ)法代碼如下: SET local_variable = value SELECT local_variable = value 用Select語(yǔ)句和Print語(yǔ)句可以顯示變量?jī)?nèi)容,其語(yǔ)法代碼如下: SELECT local_variable PEINT local_variab

10、le,2.局部變量的賦值,例1:創(chuàng)建局部變量var1、var2并賦值,然后輸出變量的值。 DECLARE var1 char(10),var2 char(30) Set var1=中國(guó) Select var2=是一個(gè)國(guó)家 select var1+var2 Go,例2:創(chuàng)建局部變量jszh并賦值,然后輸出所有等于該值的記錄。并顯示變量的值 DECLARE jszh char(9) Set jszh=200515001 Select sname,ssex,sdept from student where sno= jszh SELECT jszh PRINT jszh,例3:創(chuàng)建局部變量sex、z

11、ym并賦值,然后輸出數(shù)據(jù)表中等于變量的值的所有記錄。 DECLARE sex char(2),zym varchar(8) Set sex=男 Set zym=CS Selectsno,sname from student where sdept=zym and ssex= sex Go,例4:將學(xué)號(hào)為200515001的記錄的姓名賦值給變量name。 DECLARE name char(8) Set name= (Select sname from student where sno=200515001) select name as 姓名 Go,例5:將學(xué)號(hào)為200515001的記錄的姓名

12、賦值給變量name。 DECLARE name char(8) Set name= 張三 Select name= sname from student where sno=200515001 select name as 姓名 Go 結(jié)果是什么?,若學(xué)號(hào)200515000 ,結(jié)果應(yīng)為什么?,運(yùn)算符是一種用來(lái)指定要在一個(gè)或多個(gè)表達(dá)式中執(zhí)行某種操作的符號(hào)。例如,“+”表示兩個(gè)表達(dá)式進(jìn)行相加操作,“*”表示兩個(gè)表達(dá)式進(jìn)行相乘操作。 T-SQL所使用的運(yùn)算符可以分為算術(shù)運(yùn)算符、賦值運(yùn)算符、位運(yùn)算符、比較運(yùn)算符、邏輯運(yùn)算符、字符串串聯(lián)運(yùn)算符和一元運(yùn)算符7種。,運(yùn)算符,算術(shù)運(yùn)算符可以在兩個(gè)表達(dá)式上執(zhí)行數(shù)

13、學(xué)運(yùn)算,這兩個(gè)表達(dá)式可以是數(shù)字?jǐn)?shù)據(jù)類型分類的任何數(shù)據(jù)類型。 算術(shù)運(yùn)算符包括加(+)、減()、乘(*)、除(/)和取模(%)。,1.算術(shù)運(yùn)算符,例2:求模。 declare a float(5) set a=15%2 select a go,例1:計(jì)算sc表中最高分和最低分之差。 declare num float(5) select num=max(grade)-min (grade) from sc select num go,2. 賦值運(yùn)算符 等號(hào) (=) 是唯一的 Transact-SQL 賦值運(yùn)算符。例如,在下面的例子中使用賦值運(yùn)算符對(duì)變量進(jìn)行賦值: 3. 字符串串聯(lián)運(yùn)算符 加號(hào) (+

14、) 是字符串串聯(lián)運(yùn)算符,可以用它將字符串串聯(lián)起來(lái)。其他所有字符串操作都使用字符串函數(shù)進(jìn)行處理。例如good + + luck的結(jié)果是good luck。,例1:顯示student表中記錄,其中姓名和專業(yè)名顯示在一列。 select sno,sname+sdept,sage,ssex from student,例2:顯示student表中記錄,其中姓名和專業(yè)名顯示在一列,以逗號(hào)隔開。 select sno,sname+,+sdept,ssex,sage from student,例3:顯示student表中年齡記錄,其中學(xué)號(hào)、姓名和專業(yè)名顯示在一列,中間以空格隔開。 select sno+ +s

15、name+ +sdept as 學(xué)生信息,sage from student,4. 比較運(yùn)算符 比較運(yùn)算符用于比較兩個(gè)表達(dá)式的大小或是否相同,其比較的結(jié)果是布爾值,即TRUE、FALSE以及UNKNOWN。除了 text、ntext 或 image 數(shù)據(jù)類型的表達(dá)式外,比較運(yùn)算符可以用于所有的表達(dá)式。,5. 邏輯運(yùn)算符 邏輯運(yùn)算符可以把多個(gè)邏輯表達(dá)式連接起來(lái)。邏輯運(yùn)算符包括AND、OR和NOT等運(yùn)算符。邏輯運(yùn)算符和比較運(yùn)算符一樣,返回帶有 TRUE 或 FALSE 值的布爾數(shù)據(jù)類型。 見表10.4,6.按位運(yùn)算符 位運(yùn)算符使我們能夠在整型數(shù)據(jù)或者二進(jìn)制數(shù)據(jù)(image 數(shù)據(jù)類型除外)之間執(zhí)行位

16、操作。此外,在位運(yùn)算符左右兩側(cè)的操作數(shù)不能同時(shí)是二進(jìn)制數(shù)據(jù)。,a&b 1001 0011 0001,a|b 1001 0011 1011,ab 1001 0011 1010,7. 一元運(yùn)算符 一元運(yùn)算符只對(duì)一個(gè)表達(dá)式進(jìn)行運(yùn)算,SQL Server 2008提供的一元運(yùn)算符如表10.6所示。,()括號(hào) (按位取反) *(乘)、/(除)、%(取余) +(正)、-(負(fù))、+(加)、(+字符串串聯(lián))、-(減)、&(按位與)、(按位異或)、|(按位或) =、= 、 、!=, ! 、!(比較運(yùn)算符) Not And All、Any、Between、In、Like、Or、Some =(賦值),運(yùn)算符的優(yōu)先級(jí)

17、,函數(shù)是能夠完成特定功能并返回處理結(jié)果的一組Transact-SQL語(yǔ)句,處理結(jié)果稱為“返回值”,處理過(guò)程稱為“函數(shù)體”。函數(shù)可以用來(lái)構(gòu)造表達(dá)式,可以出現(xiàn)在Select語(yǔ)句的選擇列表中,也可以出現(xiàn)在Where子句的條件中。SQL Server提供了許多系統(tǒng)內(nèi)置函數(shù),同時(shí)也允許用戶根據(jù)需要自己定義函數(shù)。 SQL Serve提供的常用的內(nèi)置函數(shù)主要有以下幾類:數(shù)學(xué)函數(shù)、字符串函數(shù)、日期函數(shù)、convert函數(shù)、聚合函數(shù)等 。,內(nèi)置函數(shù),Transact-SQL語(yǔ)言中提供的常用的有: Abs ( numeric_expression ):返回指定數(shù)值表達(dá)式的絕對(duì)值 Round ( numeric_e

18、xpression , length ,function ):返回一個(gè)舍入到指定的長(zhǎng)度或精度的數(shù)值 Floor ( numeric_expression ):返回小于或等于指定數(shù)值表達(dá)式的最大整數(shù) Ceiling ( numeric_expression ):返回大于或等于指定數(shù)值表達(dá)式的最小整數(shù) Power ( float_expression , y ):返回指定表達(dá)式的指定冪的值 Sqrt ( float_expression ):返回指定表達(dá)式的平方根 Square ( float_expression ):返回指定表達(dá)式的平方 Exp ( float_expression ):返回指

19、定的表達(dá)式的指數(shù)值 Log ( float_expression ):返回指定表達(dá)式的自然對(duì)數(shù) Log10 ( float_expression ):返回指定表達(dá)式的以10為底的對(duì)數(shù) Sin ( float_expression ):返回指定角度(以弧度為單位)的三角正弦值 Cos ( float_expression ):返回指定角度(以弧度為單位)的三角余弦值 PI():返回的值,數(shù)學(xué)函數(shù),ROUND(x,n,f)函數(shù)按由n指定的精度和由f指定格式對(duì)x四舍五入,如果省略參數(shù)f,其默認(rèn)值為0,則按由n指定的精度四舍五入,如果f為其他值,則執(zhí)行截?cái)?。參?shù)n如果為負(fù)數(shù),并且n的絕對(duì)值大于x整數(shù)部

20、分的數(shù)字個(gè)數(shù),則結(jié)果為0。 ROUND(x,n,f)函數(shù)舉例如下。 ROUND(534.56, 1) -結(jié)果為534.60 ROUND(534.56, 0) -結(jié)果為535.00 ROUND(534.56, -1)-結(jié)果為530.00 ROUND(534.56, -2)-結(jié)果為500.00 ROUND(534.56, -3) -結(jié)果為1000.00 ROUND(534.56, -4) -結(jié)果為0.00,例1:數(shù)學(xué)函數(shù)綜合應(yīng)用:求絕對(duì)值。 Select abs(8.9),abs(-5.0) ,abs(0.0),abs(0),例2:數(shù)學(xué)函數(shù)綜合應(yīng)用:返回半徑為1英寸、高為5英寸的圓柱面積。 dec

21、lare h float,r float Select h=5,r=2 Select pi()*square(r)*h as 圓柱面積,SQL Server提供的常用的字符串函數(shù)有: Ascii ( character_expression ):返回字符表達(dá)式中最左側(cè)的字符的 ASCII 代碼值 Char ( integer_expression ):將 int ASCII 代碼轉(zhuǎn)換為字符 Suubstring ( value_expression ,start_expression , length_expression ):返回字符表達(dá)式的從start_expression位置開始的長(zhǎng)度為

22、length_expression的子串 Left ( character_expression , integer_expression ):返回字符串中從左邊開始指定個(gè)數(shù)的字符 Right ( character_expression , integer_expression ):返回字符串中從右邊開始指定個(gè)數(shù)的字符 Len ( string_expression ):返回指定字符串表達(dá)式的字符數(shù),其中不包含尾隨空格 Ltrim( character_expression ):返回刪除了前導(dǎo)空格之后的字符表達(dá)式 Rtrim ( character_expression ):截?cái)嗨形搽S空格

23、后返回一個(gè)字符串 Str ( float_expression , length , decimal ):返回由數(shù)字?jǐn)?shù)據(jù)轉(zhuǎn)換來(lái)的字符數(shù)據(jù),字符串函數(shù),LEFT函數(shù) 函數(shù)格式: LEFT(expression1,n) 功能:返回字符串expression1從左邊開始n個(gè)字符組成的字符串。如果n=0,則返回一個(gè)空字符串。 返回值數(shù)據(jù)類型:varchar 例:LEFT(abcde, 3)結(jié)果為abc。,RIGHT函數(shù) 函數(shù)格式: RIGHT(expression1,n) 功能:返回字符串expression1從右邊開始n個(gè)字符組成的字符串。如果n=0,則返回一個(gè)空字符串。 返回值數(shù)據(jù)類型:varch

24、ar 例如:RIGHT(abcde, 3)結(jié)果為cde,LEN函數(shù) 函數(shù)格式: LEN(expression1) 功能:返回字符串expression1中的字符個(gè)數(shù),不包括字符串末尾的空格。 返回值數(shù)據(jù)類型:int 例:LEN(abcde )結(jié)果為5,SUBSTRING函數(shù) 函數(shù)格式: SUBSTRING(expression1,start,length) 功能:返回expression1(數(shù)據(jù)類型為字符串、binary、text或image)中從start開始長(zhǎng)度為length個(gè)字符或字節(jié)的子串。 返回值數(shù)據(jù)類型:與expression1數(shù)據(jù)類型相同,但text類型返回值為varchar,i

25、mage類型返回值為varbinary,next類型返回值為nvarchar。 例:SUBSTRING(abcde123,3,2)結(jié)果為cd。,LTRIM函數(shù) 函數(shù)格式: LTRIM(expression1) 功能:刪除字符串expression1左端的空格。 返回值數(shù)據(jù)類型:varchar 例:LTRIM( 12AB)結(jié)果為12AB。 RTRIM( 12AB )結(jié)果為 12AB。,RTRIM函數(shù):刪除右空格,REPLACE函數(shù) 函數(shù)格式: REPLACE(expression1, expression2, express ion3) 功能:將字符串expression1中所有的子字符串ex

26、pression2替換為expression3。 返回值數(shù)據(jù)類型:varchar 例如:REPLACe(abcdeabcdeabcde,de,12)結(jié)果為abc12abc12abc12。,STR函數(shù) 函數(shù)格式: STR(expression1,length,decimal) 功能:將數(shù)字?jǐn)?shù)據(jù)轉(zhuǎn)換為字符數(shù)據(jù)。length為轉(zhuǎn)換得到的字符串總長(zhǎng)度,包括符號(hào)、小數(shù)點(diǎn)、數(shù)字或空格,如果數(shù)字不夠,則在左端加入空格補(bǔ)足長(zhǎng)度,如果小數(shù)部分超過(guò)總長(zhǎng)度,則進(jìn)行四舍五入,length的默認(rèn)值為10,decimal為小數(shù)位位數(shù)。 返回值數(shù)據(jù)類型:char 例如: str(123,6)-結(jié)果為 123 str(123

27、.456,5)-結(jié)果為 123 str(123.456,5,2)-結(jié)果為123.5 str(123.456,8,2)-結(jié)果為 123.46,Transact-SQL語(yǔ)言中提供下列日期時(shí)間函數(shù): Getdate ( ):返回系統(tǒng)當(dāng)前的日期和時(shí)間 Year ( date ):返回表示指定 date 的“年”部分的整數(shù) Month ( date ):返回表示指定 date 的“月”部分的整數(shù) Day ( date ):返回表示指定 date 的“日”部分的整數(shù) Datename ( datepart , date ):返回表示指定date的指定 datepart 的字符串 Datepart ( da

28、tepart , date ):返回表示指定 date 的指定 datepart 的整數(shù) Datediff ( datepart , startdate , enddate ):根據(jù)指定datepart返回兩個(gè)指定日期之間的差值 Dateadd (datepart , number , date ):根據(jù)datepart將一個(gè)時(shí)間間隔與指定 date 的相加,返回一個(gè)新的 datetime 值,日期時(shí)間函數(shù),DATENAME函數(shù) 函數(shù)格式: DATENAME(datepart,date) 功能:返回日期date中由datepart指定的日期部分的字符串。 返回值數(shù)據(jù)類型:nvarchar 例如

29、: datename(yy,1993-3-4) -結(jié)果為1993 datename (m,1993-3-4) -結(jié)果為03 datename (d,1993-3-4) -結(jié)果為4,DATEPART函數(shù)(參數(shù)表見表10.7) 函數(shù)格式: DATEPART(datepart,date) 功能:與DATENAME類似,只是返回值為整數(shù)。 返回值數(shù)據(jù)類型:int 例如: datepart(yy,1993-3-4) -結(jié)果為1993 datepart (m,1993-3-4) -結(jié)果為3 datepart (d,1993-3-4) -結(jié)果為4,DATEDIFF函數(shù) 函數(shù)格式: DATEDIFF(date

30、part,startdate, enddate) 功能:按照datepart指定的內(nèi)容,返回startdate和enddate 之間的差值。 例如: datediff(yy,1981-3-4, 2006-3-4 ) -結(jié)果為25 datediff(m,1981-3-4, 2006-3-4 ) -結(jié)果為300 datediff(d,1981-3-4, 2006-3-4 ) -結(jié)果為9131,Convert函數(shù)可以將一種數(shù)據(jù)類型的表達(dá)式強(qiáng)制轉(zhuǎn)換為另一種數(shù)據(jù)類型的表達(dá)式。兩種數(shù)據(jù)類型必須能夠進(jìn)行轉(zhuǎn)換,例如,Char值可以轉(zhuǎn)換為Binary,但是不能轉(zhuǎn)換為Image。Convert函數(shù)的語(yǔ)法格式為:

31、Convert ( data_type ( length ) , expression , style ) 參數(shù)說(shuō)明: expression :任何有效的表達(dá)式。 data_type :目標(biāo)數(shù)據(jù)類型。 length :指定目標(biāo)數(shù)據(jù)類型長(zhǎng)度的可選整數(shù)。 style :用于日期時(shí)間型數(shù)據(jù)類型和字符數(shù)據(jù)類型的轉(zhuǎn)換。,Convert函數(shù),內(nèi)置函數(shù)大大方便了用戶進(jìn)行程序設(shè)計(jì),但用戶編程時(shí)常常需要將一個(gè)或多個(gè)TSQL語(yǔ)句組成子程序,以便反復(fù)調(diào)用。 SQL SERVER 允許用戶根據(jù)需要自己定義函數(shù)。,數(shù)值函數(shù)返回結(jié)果為單個(gè)數(shù)據(jù)值;表值函數(shù)返回結(jié)果集(table數(shù)據(jù)類型),創(chuàng)建定義函數(shù),1.創(chuàng)建標(biāo)量值函數(shù),

32、例1:定義一函數(shù),按性別統(tǒng)計(jì)當(dāng)前所有學(xué)生的平均年齡。 CREATE FUNCTION aver_age(sex char(2) RETURNS int AS BEGIN declare aver int select aver =(select avg(sage) from student where ssex=sex) Return aver END,例2:調(diào)用函數(shù)aver_age。 declare sex char(2) Set sex = 女 select dbo.aver_age(sex),內(nèi)嵌表值函數(shù)是返回記錄集的用戶自定義函數(shù),可用于實(shí)現(xiàn)參數(shù)化視圖的功能。,例1:定義一函數(shù),按根據(jù)

33、專業(yè)名查詢?cè)搶I(yè)學(xué)生的基本信息。 CREATE FUNCTION student_info(zym varchar(8) RETURNS table AS RETURN(select sno,sname,ssex,sdept,sage from student where sdept= zym ),例2:調(diào)用函數(shù)student_info。 select * from student_info(CS),創(chuàng)建內(nèi)嵌表值函數(shù),多語(yǔ)句表值函數(shù)和內(nèi)嵌表值函數(shù)都返回表記錄,二者不同之處在于: 內(nèi)嵌表值函數(shù)返回的是單個(gè)select 語(yǔ)句的結(jié)果集。 多語(yǔ)句表值函數(shù)在beginend 中定義的函數(shù)主體由TSQL語(yǔ)

34、句序列構(gòu)成,這些語(yǔ)句可生成記錄行并將行插入表中,最后返回表記錄。,多語(yǔ)句表值函數(shù),例1:定義一函數(shù),通過(guò)學(xué)號(hào)查詢?cè)搶W(xué)生的姓名,課程名及成績(jī) CREATE FUNCTION student_cj(xh char(9) RETURNS table AS RETURN(select a.sno, sname,ame, c.grade from student a , course b, sc c where a.sno= xh and a.sno= c.sno and o =o),例2:調(diào)用函數(shù)student_cj。 select * from student_cj(200515001),具體的步驟

35、為: 1)在選定的數(shù)據(jù)庫(kù)下打開【可編程性】節(jié)點(diǎn)。 2)找到【函數(shù)】節(jié)點(diǎn),可以看到【標(biāo)量值函數(shù)】和【表值函數(shù)】節(jié)點(diǎn)。 3)在相應(yīng)的節(jié)點(diǎn)上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇【新建函數(shù)】。 4)在新建的查詢窗口中可以看到關(guān)于自定義函數(shù)的語(yǔ)句模板。在其中添上相應(yīng)的內(nèi)容,單擊工具欄上的【執(zhí)行】按鈕即可。,使用對(duì)象資源管理器創(chuàng)建表值函數(shù),10.5.1 修改自定義函數(shù) 1.利用對(duì)象資源管理器修改 在【對(duì)象資源管理器】中,找到需要修改的函數(shù)節(jié)點(diǎn),在其上單擊鼠標(biāo)右鍵,修改完成后,單擊工具欄上的【執(zhí)行】按鈕,即可完成函數(shù)的修改.,2.利用Alter Function語(yǔ)句修改 Alter Function fun

36、ction_name ( parameter_name As parameter_data_type = default Readonly ,.n ) Returns return_data_type With Encryption As Begin function_body Return scalar_expression End,1.利用對(duì)象資源管理器刪除函數(shù) 1)在【對(duì)象資源管理器】中,找到需要?jiǎng)h除的函數(shù)節(jié)點(diǎn),在其上單擊鼠標(biāo)右鍵,彈出快捷菜單。 2)在快捷菜單中,單擊【刪除】菜單,彈出確認(rèn)刪除窗口,選擇【確定】即可刪除。,刪除自定義函數(shù),2.使用Drop Function語(yǔ)句刪除函數(shù)

37、使用Drop Function語(yǔ)句可以從當(dāng)前數(shù)據(jù)庫(kù)中刪除一個(gè)或多個(gè)用戶自定義函數(shù),具體的語(yǔ)法形式如下。 Drop Function function_name ,n 例如: Drop Function student_cj,1. 批處理 在SQL Server 2008中,可以一次執(zhí)行多個(gè)T-SQL語(yǔ)句,這樣多個(gè)T-SQL語(yǔ)句稱為“批”。SQL Server 2008會(huì)將一批T-SQL語(yǔ)句當(dāng)成一個(gè)執(zhí)行單元,將其編譯后一次執(zhí)行,而不是將一個(gè)個(gè)T-SQL語(yǔ)句編譯后再一個(gè)個(gè)執(zhí)行。 SQL Server中使用GO語(yǔ)句作為批處理的結(jié)束標(biāo)記,即SQL Server把兩個(gè)GO語(yǔ)句之間的一條或多條語(yǔ)句當(dāng)作一個(gè)

38、批處理。當(dāng)編譯器讀取到GO語(yǔ)句時(shí),它會(huì)把GO語(yǔ)句前的所有語(yǔ)句當(dāng)作一個(gè)批處理,并將這些語(yǔ)句打包發(fā)送給服務(wù)器。,批處理和流程控制語(yǔ)句,例 GO語(yǔ)句本身不是T-SQL語(yǔ)句的組成部分,它只是一個(gè)用于表示批處理結(jié)束的指令。如果在一個(gè)批處理中包含語(yǔ)法錯(cuò)誤,如引用了一個(gè)不存在的對(duì)象等,則整個(gè)批處理就不能被成功地編譯和執(zhí)行。,SELECT * FROM stu_info.dbo.course WHERE cname=數(shù)據(jù)結(jié)構(gòu) UPDATE stu_info.dbo.course SET cp_id=1 WHERE cname=日語(yǔ) GO SELECT * FROM stu_info.dbo.course GO

39、,流程控制語(yǔ)句是指那些用來(lái)控制程序執(zhí)行和流程分支的命令,在SQL Server 中,流程控制語(yǔ)句主要用來(lái)控制SQL語(yǔ)句、語(yǔ)句塊或者存儲(chǔ)過(guò)程的執(zhí)行流程。,流程控制語(yǔ)句,BEGINEND語(yǔ)句能夠?qū)⒍鄠€(gè)Transact-SQL語(yǔ)句組合成一個(gè)語(yǔ)句塊,并將它們視為一個(gè)單元處理。在條件語(yǔ)句和循環(huán)等控制流程語(yǔ)句中,當(dāng)符合特定條件便要執(zhí)行兩個(gè)或者多個(gè)語(yǔ)句時(shí),就需要使用BEGINEND語(yǔ)句。 其語(yǔ)法形式為: BEGIN END,1. BEGINEND語(yǔ)句,BEGIN PRINT 年齡大于20歲的學(xué)生 PRINT 齡為: PRINT age END,IFELSE語(yǔ)法格式: IF ELSE ,例1:判斷數(shù)值大小,打

40、印運(yùn)算結(jié)果。 Declare a int, b int ,c int Select a =4, b =5 ,c =6 If a b print ab Else if bc print bc else print cb 輸出結(jié)果為:cb,2. IFELSE語(yǔ)句,Case函數(shù)是特殊的Transact-SQL表達(dá)式,它允許按列顯示可選值,用于計(jì)算多個(gè)條件并為每個(gè)條件返回單個(gè)值,通常用于將含有多重嵌套的IfElse語(yǔ)句替換為可讀性更強(qiáng)的代碼。Case表達(dá)式有兩種形式:簡(jiǎn)單Case表達(dá)式和搜索Case表達(dá)式。 例: SELECT Sno,Cno,Grade=case when Grade=60 and Grade=80 then 優(yōu)秀 end FROM S

溫馨提示

  • 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)論