數(shù)據(jù)庫之第八講:Transact-SQL語言基礎.ppt
《數(shù)據(jù)庫之第八講:Transact-SQL語言基礎.ppt》由會員分享,可在線閱讀,更多相關《數(shù)據(jù)庫之第八講:Transact-SQL語言基礎.ppt(88頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、1,Transact-SQL語言基礎 (對應教材第6章) 電氣信息工程學院自動化教研室 主講教師:陳志武 Email:CHENYYJ163.COM,第六講,2,主要內容,,基本數(shù)據(jù)類型,2,常量與變量,3,運算符與表達式,4,流程控制語句,5,T-SQL語言簡介,1,3,主要內容,,注釋,6,函數(shù),7,4,一、歷史,1、T-SQL語言簡介,1、T-SQL語言起源于SQL( Structured Query Language )語言,SQL語言的歷史: 70年代: 由IBM公司開發(fā)出來的;1976年開始在商品化關系數(shù)據(jù)庫系統(tǒng)中應用; 1986:ANSI確認SQL為關系數(shù)據(jù)庫語言的美國標準,198
2、7年被ISO采納為國際標準, 稱為SQL-86; 1989: ANSI發(fā)布了SQL-89標準,后來被ISO采納為國際標準; 1992: ANSI/ISO發(fā)布了SQL-92標準,習慣稱為SQL 2;1999年: ANSI/ISO發(fā)布了SQL-99標準,習慣稱為SQL 3; 2003: ANSI/ISO共同推出了SQL 2003標準。,5,一、歷史,1、T-SQL語言簡介,1、T-SQL語言起源于SQL( Structured Query Language )語言,Transact-SQL語言是Microsoft開發(fā)的一種SQL語言,簡稱T-SQL語言。它不僅包含了SQL-86和SQL-92的大多
3、數(shù)功能,而且還對SQL進行了一系列的擴展,增加了許多新特性,增強了可編程性和靈活性。Transact-SQL語言主要包括: 數(shù)據(jù)定義語句(Data Definition Language,DDL) 如對數(shù)據(jù)庫對象的創(chuàng)建(CREATE)、修改(ALTER)、 刪除語句(DROP) 等,6,一、歷史,1、T-SQL語言簡介,1、T-SQL語言起源于SQL( Structured Query Language )語言,數(shù)據(jù)操縱語句(Data Manipulation Language,DML) 用來查詢(SELECT)、添加(INSERT) 、修改(UPDATE) 、刪除(DELETE)、數(shù)據(jù)庫中數(shù)
4、據(jù)的語句 數(shù)據(jù)控制語句(Data Control Language,DCL) 用來設置或更改 數(shù)據(jù)庫用戶或角色的語句。,7,一、歷史,1、T-SQL語言簡介,1、T-SQL語言起源于SQL( Structured Query Language )語言,一些附加的語言元素 如變量、函數(shù)、流程控制語句等,這些不是SQL-92的標準內容,8,二、標識符,2、標識符的分類: (1)常規(guī)標識符 (2)分隔標識符,1、標識符的定義: 標識符用于標識服務器、數(shù)據(jù)庫、數(shù)據(jù)庫對象、變量等。,1、T-SQL語言簡介,9,二、標識符,1、T-SQL語言簡介,1. 常規(guī)標識符 指符合標識符格式規(guī)則的標識符。標識符的
5、格式規(guī)則如下: 長度不超過128個字符。 開頭字母為a-z或A-Z、#、_ 或 以及來自其它語言的字母字符。 后續(xù)字符可以是a-z、A-Z、來自其它語言的字母字符、數(shù)字、#、$、_、。 不允許嵌入空格或其它特殊字符。 不允許與保留字同名。,10,二、標識符,1、T-SQL語言簡介,2. 分隔標識符 對于不符合格式規(guī)則的標識符,當用于Transact-SQL語句時,必須用雙引號或方括號括起來。 例如: SELECT * FROM My Table 等價于 SELECT * FROM My Table,11,二、標識符,1、T-SQL語言簡介,對于常規(guī)標識符,可以加上雙引號或方括號,也可以不
6、加。 【例如: SELECT * FROM authors 該語句等價于 SELECT * FROM authors 也等價于 SELECT * FROM authors,12,三、語句符號約定,1、T-SQL語言簡介,13,三、語句符號約定,1、T-SQL語言簡介,例如,SELECT子句的語法如下: SELECT ALL | DISTINCT TOP n PERCENT WITH TIES 其中,語法塊進一步定義如下: ::= * | 表名 | 視圖名 | 表別名.* |列名|表達式|IDENTITYCOL|ROWGUIDCOL AS 列別名 | 列別名 = 表達式 ,
7、...n ,14,2、基本數(shù)據(jù)類型,使用SQL Server創(chuàng)建數(shù)據(jù)庫中的表時,要對表中的每一列定義一種數(shù)據(jù)類型,數(shù)據(jù)類型決定了表中的某一列可以存放什么數(shù)據(jù)。除了定義表需要指定數(shù)據(jù)類型外,使用視圖、存儲過程、變量、函數(shù)等都需要用到數(shù)據(jù)類型。 SQL Server提供了豐富的系統(tǒng)定義的數(shù)據(jù)類型,用戶還可以在此基礎上自己定義數(shù)據(jù)類型。,15,2、數(shù)據(jù)類型,1. bigint類型 存儲大小: 8個字節(jié),取值范圍: -263263-1 2. int類型 存儲大小: 4個字節(jié),取值范圍: -231231-1 3. smallint類型 存儲大小: 2個字節(jié),取值范圍: -215215-1 4.
8、tinyint類型 存儲大小: 1個字節(jié),取值范圍: 0255,一、整形數(shù)據(jù)類型,16,2、數(shù)據(jù)類型,二、定點數(shù)據(jù)數(shù)據(jù)類型,定點數(shù)據(jù)類型用于表示定點實數(shù),包括numeric和decimal類型。 Numeric等價于decimal。 格式: decimal(p, s) a numeric(p, s) b 說明: p: 表示精度,指定小數(shù)點左邊和右邊十進制數(shù)字的最大位數(shù),取值在1到38之間,缺省值為18; s: 指定小數(shù)點右邊十進數(shù)的最大位數(shù),取值在0到p之間,缺省值為0。 表示范圍: -1038+11038-1,17,2、數(shù)據(jù)類型,三、浮點數(shù)據(jù)類型,表示范圍: -1.79E+3081.7
9、9E+308,1. float類型 格式: float(n) 說明: n: 尾數(shù)的位數(shù),具體如下表:,18,2、數(shù)據(jù)類型,三、浮點數(shù)據(jù),2. real類型 存儲大小: 4個字節(jié) 取值范圍: -3.40E+383.40E+38 精度: 7位 在SQL Server中,real的同義詞為float(24)。,19,2、數(shù)據(jù)類型,四、字符型數(shù)據(jù),分為Unicode字符數(shù)據(jù)類型和非Unicode字符數(shù)據(jù)類型. 非Unicode字符數(shù)據(jù)類型: 允許使用由特定字符集定義的字符。字符集在安裝SQL Server時選擇,不能更改。 非Unicode字符數(shù)據(jù)類型: char、varchar和text。
10、 Unicode字符數(shù)據(jù)類型: 可存儲由Unicode標準定義的任何字符,包含由不同字符集定義的所有字符。需要相當于非Unicode數(shù)據(jù)類型兩倍的存儲空間。 Unicode字符數(shù)據(jù)數(shù)據(jù)類型包括: nchar、nvarchar和ntext。對于存儲來源于多種字符集的字符的列,可采用這些數(shù)據(jù)類型。,20,2、數(shù)據(jù)類型,四、字符型數(shù)據(jù),1. char類型 格式: char(n) 功能: 定義長度為n個字節(jié)的固定長度非Unicode字符數(shù)據(jù),每個字符占一個字節(jié)。 說明: n:18000 存儲大小: n個字節(jié)(n個字符) 2. varchar類型 格式: varchar(n) 功能: 定義長度最多為
11、n個字節(jié)的可變長度非Unicode字符數(shù)據(jù),每個字符占一個字節(jié)。 說明: n: 18000。 存儲大小: 輸入字符的實際長度。長度可為零,21,2、數(shù)據(jù)類型,四、字符型數(shù)據(jù),3. nchar類型 格式: nchar(n) 功能: 定義包含n個字符的固定長度Unicode字符數(shù)據(jù) 說明: n:14000 存儲大小: 2n個字節(jié) 4. nvarchar類型 格式: nvarchar(n) 功能:定義包含最多n個字符的可變長度Unicode字符數(shù)據(jù) 說明: n: 14000。 存儲大小:所輸入的字符實際個數(shù)的兩倍。長度可以為零。,22,2、數(shù)據(jù)類型,四、字符型數(shù)據(jù),5. text類型 功
12、能: 用于存儲大塊的非Unicode字符,長度可變,字符最大長度 存儲空間等于輸入字符個數(shù) 6. ntext類型 功能:用于存儲大塊的Unicode字符,長度可變,字符最大長度 存儲空間等于輸入字符個數(shù)的兩倍,23,2、數(shù)據(jù)類型,五、日期與時間數(shù)據(jù)類型,日期和時間數(shù)據(jù)類型用于存儲日期和時間的結合體。包括datetime和smalldatetime兩種類型。 1. datetime類型 存儲大小: 8個字節(jié) 表示范圍:1753年1月1日零時9999年12月31日23時59分59秒。 例: 01/01/98 23:59:59 2000-5-29 12:30:48 2. small
13、datetime 存儲大小: 4個字節(jié) 表示范圍: 1900年1月1日2079年6月6日。 例: 2000/05/08 12:35 2000-05-29 12:35 2000-05-29,24,2、數(shù)據(jù)類型,六、 圖形(image)數(shù)據(jù)類型,image數(shù)據(jù)類型用于存儲可變長度二進制數(shù)據(jù),其長度界于0到231-1個字節(jié)之間。,25,2、數(shù)據(jù)類型,七、 貨幣數(shù)據(jù)類型,貨幣數(shù)據(jù)類型包括money和smallmoney數(shù)據(jù)類型。貨幣數(shù)據(jù)存儲的精確度為四位小數(shù)。 1. money類型 存儲大小: 8個字節(jié) 表示范圍: -922,337,203,685,477.5808
14、+922,337,203,685,477.5807 2. smallmoney類型 存儲大小: 4個字節(jié) 表示范圍: -214,748.3648214,748.3647,26,2、數(shù)據(jù)類型,八、 位(bit)數(shù)據(jù)類型,bit數(shù)據(jù)類型的取值只有0和1,如果一個表中有不多于8個的bit列,這些列將作為一個字節(jié)存儲。如果表中有9到16個bit列,這些列將作為兩個字節(jié)存儲。更多列的情況依此類推。,27,2、數(shù)據(jù)類型,九、 二進制數(shù)據(jù)類型,二進制數(shù)據(jù)類型又可以分為binary和varbinary類型。,1. binary類型 格式: binary(n) 功能: 定義固定長度的n個字節(jié)二進制數(shù)據(jù),當輸
15、入的二進制數(shù)據(jù)長度小于n時,余下部分填充0。 說明: n: 18000,28,2、數(shù)據(jù)類型,九、 二進制數(shù)據(jù)類型,2. varbinary類型 格式: varbinary(n) 功能: 定義n個字節(jié)可變長度二進制數(shù)據(jù)。 說明: n: 18000 存儲大小: 為實際輸入數(shù)據(jù)長度加4個字節(jié),而不是n個字節(jié)。輸入的數(shù)據(jù)長度可能為0字節(jié)。 如果在數(shù)據(jù)定義或變量定義語句中使用時沒有指定n,則默認長度n為1。如果在CAST函數(shù)中使用時沒有指定n,則默認長度n為30。,29,2、數(shù)據(jù)類型,十、 其他數(shù)據(jù)類型,1. timestamp類型(時間戳數(shù)據(jù)類型) 存儲大小: 8個字節(jié)。 時間戳類型的數(shù)據(jù)用于提供
16、數(shù)據(jù)庫范圍內的惟一值,反映數(shù)據(jù)庫中數(shù)據(jù)修改的相對順序,相當于一個單調上升的計數(shù)器。當表中的某列定義為timestamp類型時,在對表中某行進行修改或添加行時,相應timestamp類型列的值會自動被更新。,30,2、數(shù)據(jù)類型,十、 其他數(shù)據(jù)類型,2. uniqueidentifier類型 用于存儲一個16字節(jié)長的二進制數(shù)據(jù),它是SQL Server根據(jù)計算機網(wǎng)絡適配器和CPU時鐘產(chǎn)生的全局惟一標識符(Globally Unique Identifier,GUID),該數(shù)字可以通過調用SQL Server的NEWID函數(shù)獲得。 GUID是一個唯一的二進制數(shù)字,世界上的任何兩臺計算機都不會生成
17、重復的GUID值。GUID主要用于在擁有多個節(jié)點、多臺計算機的網(wǎng)絡中,分配必須具有唯一性的標識符。,31,2、數(shù)據(jù)類型,十、 其他數(shù)據(jù)類型,3. sql_variant類型 用于存儲除text、ntext、image、timestamp和sql_variant外的其它任何合法的數(shù)據(jù)。 4. table類型 用于存儲對表或者視圖處理后的結果集。這種新的數(shù)據(jù)類型使得用變量就可以存儲一個表,從而使函數(shù)或過程返回查詢結果更加方便、快捷。 5. cursor類型 cursor類型是變量或存儲過程 的OUTPUT 參數(shù)的一種數(shù)據(jù)類型,這些參數(shù)包含對游標的引用。,32,2、數(shù)據(jù)類型,十一、 用戶自己定
18、義的數(shù)據(jù)類型,33,3、常量與變量,一、 常量,常量也稱為標量值,是表示一個特定數(shù)據(jù)值的符號。常量的格式取決于它所表示的值的數(shù)據(jù)類型。,1. 普通字符串常量 字符串常量用單引號括起來。如果要在字符串中包含單引號,則可以使用連續(xù)的兩個單引號來表示。例如: Chinese Process X is 50% complete. The level for job_id: %d should be between %d and %d. (空字符串) Iam a student,34,3、常量與變量,一、 常量,2、 Unicode 字符串常量 對于Unicode字符串的格式,需要在前面加一
19、個N標識符,N前綴必須是大寫字母。例如: Michl是字符串常量 NMichl是Unicode字符常量 Unicode常量被解釋為Unicode數(shù)據(jù)。Unicode 數(shù)據(jù)中的每個字符都使用兩個字節(jié)進行存儲,而普通字符數(shù)據(jù)中的每個字符則使用一個字節(jié)進行存儲。,35,3、常量與變量,一、 常量,3. 二進制數(shù)常量 二進制常量使用0 x作為前輟,后面跟隨十六進制數(shù)字字符串。例如: 0 xAE 0 x12Ef 0 x69048AEFDD010E 0 x(空二進制常量),36,3、常量與變量,一、 常量,4. bit常量 bit常量使用數(shù)字0或1表示。如果使用一個大于1的數(shù)字,它將被轉
20、換為1。 5. datetime常量 datetime常量使用單引號括起來的特定格式的字符日期值表示。例如: April 15, 1998 15 April, 1998 980415 04/15/98 14:30:24 04:24 PM,37,3、常量與變量,一、 常量,6. 整型常量 由正、負號和數(shù)字09組成,正號可以省略。 例如: 1894 2 +145345234 -2147483648 7. decimal常量 由正、負號、小數(shù)點、數(shù)字09組成,正號可以省略。 例如: 1894.1204 2.0 +145345234.2234 -2147483648.
21、10,38,3、常量與變量,一、 常量,8. float和real常量 使用科學記數(shù)法表示。 例如: 101.5E5 0.5E-2 +123E-3 -12E5 9. money常量 以可選小數(shù)點和可選貨幣符號作為前綴的一串數(shù)字??梢詭д⒇撎?。 例如: $12 $542023.14 -$45.56 +$423456.99,39,3、常量與變量,二、變量,變量是可以保存特定類型的單個數(shù)據(jù)值的對象,SQL Server的變量分為兩種:用戶自己定義的局部變量和系統(tǒng)提供的全局變量。,1、局部變量 局部變量的作用范圍僅限制在程序的內部。常用來保存臨時數(shù)據(jù)。例如,可以使用局部變量保
22、存表達式的計算結果,作為計數(shù)器保存循環(huán)執(zhí)行的次數(shù),或者用來保存由存儲過程返回的數(shù)據(jù)值。,40,3、常量與變量,二、變量,1. 局部變量的定義 格式: DECLARE 局部變量名 數(shù)據(jù)類型 ,n 說明: 局部變量名: 必須以開頭,符合標識符的命名規(guī)則 數(shù)據(jù)類型: 系統(tǒng)定義的數(shù)據(jù)類型;用戶定義數(shù)據(jù)類型。不能是text、ntext或image數(shù)據(jù)類型。 局部變量定義后初始值為NULL。,41,3、常量與變量,二、變量,1. 局部變量的定義,【例】定義變量MyCounter為int類型: DECLARE MyCounter int 【例】定義變量LastName為nvarchar(30)類型,定義
23、變量FirstName為nvarchar(20)類型,定義變量State為nchar(2)類型: DECLARE LastName nvarchar(30), FirstName nvarchar(20),State nchar(2),42,3、常量與變量,二、變量,2. 局部變量的賦值 (1)用SET語句給局部變量賦值 格式: SET 局部變量名 = 表達式 【例4-6】定義局部變量myvar,并為其賦值,最后顯示myvar的值。 DECLARE myvar char(20) SET myvar = This is a test --用SET賦值 PRINT myvar -
24、-用PRINT語句顯示,43,3、常量與變量,二、變量,(2)用SELECT語句給局部變量賦值: 格式: SELECT 局部變量名 = 表達式,n 【例4-7】定義局部變量myvar1和myvar2,并為它們賦值,最后顯示myvar1和myvar2的值: DECLARE myvar1 char(20),myvar2 char(20) SELECT myvar1 = Hello!, myvar2 = How are you! --用SELECT賦值 SELECT myvar1, myvar2 --用SELECT顯示,44,3、常量與變量,二、變量,2、全局變量 是SQL Server系統(tǒng)自
25、帶的變量,特點如下: 全局變量不是由用戶的程序定義的,它們是SQL Server系統(tǒng)在服務器級定義的,作用范圍是一個服務器內都有效。 全局變量通常用來存儲一些配置設定值和統(tǒng)計數(shù)據(jù)。用戶可以在程序中用全局變量來測試系統(tǒng)的設定值或者是Transact-SQL命令執(zhí)行后的狀態(tài)值。,45,3、常量與變量,二、變量,用戶只能使用預先定義的全局變量,不能自己定義全局變量。 全局變量,必須以標記符“”開頭。 局部變量的名稱不能與全局變量的名稱相同,否則會出現(xiàn)不可預測的結果。 任何程序均可以隨時引用全局變量。,例如: VERSION用于返回SQL Server當前安裝的日期、版本和處理器類型;CONNECTI
26、ONS用于返回自上次啟動SQL Server以來連接或試圖連接的次數(shù);LANGUAGE用于返回當前使用的語言名,46,4、運算符與表達式,一、運算符,SQL Server運算符有以下幾類: 算術運算符 字符串串聯(lián)運算符 賦值運算符 關系運算符 邏輯運算符 位運算符 一元運算符,運算符:對常量或變量進行某種運算的符號;由運算符與變量常量構成的式子稱為表達式,47,4、運算符與表達式,一、運算符,1、算術運算符: +、、*、/、%(取余) %: 用于返回一個整數(shù)除以另一個整數(shù)的余數(shù)。 例如: 13 % 5 = 3,48,4、運算符與表達式,一、運算符,2、字符串串聯(lián)運算符: + 作用: 將兩個字
27、符串串聯(lián)起來,構成字符串表達式。 例如: abc + def 結果為 abcdef 123 + 456 結果為 123456,49,4、運算符與表達式,一、運算符,3、賦值運算符: = 例如: DECLARE MyCounter int SET MyCounter = 1,50,4、運算符與表達式,一、運算符,4、關系運算符: = = != ! 作用: 比較兩個表達式的大小。 比較結果: 布爾值TRUE、FALSE、UNKNOWN TRUE:表示表達式的結果為真 FALSE:表示表達式的結果為假 UNKNOWN: 當SET ANSI_NULLS為ON時,帶有一個或兩個NULL
28、表達式的比較運算返回UNKNOWN。 當SET ANSI_NULLS為OFF時,上述規(guī)則同樣適用,但當兩個表達式都為NULL時,返回結果為TRUE。例如,NULL = NULL返回TRUE。,51,4、運算符與表達式,一、運算符,5、邏輯運算符: NOT AND OR 作用:對具有布爾值的表達式進行運算。 運算結果: TRUE、FALSE。 NOT: 一元運算符,對布爾表達式的值取反 AND: 只有兩個布爾表達式的值都為TRUE,運算結果才為TRUE,否則結果為FALSE。 OR: 如果兩個布爾表達式中的一個為TRUE,那么運算結果為TRUE。只有兩個布爾表達式都為FALSE,運算結果才為FA
29、LSE。,52,4、運算符與表達式,一、運算符,例: NOT (3 8) 結果為TRUE (3 8) AND (5 8) Or (5 < 6) 結果為TRUE,53,4、運算符與表達式,一、運算符,6、位運算符: & | 作用: 在兩個整型表達式之間執(zhí)行按位操作 【例4-8】判斷以下各打印語句的打印結果。 (1)PRINT 2 & 3 10 & 11,結果為二進制10,即打印2。 (2)PRINT 13 | 24 01101 | 11000,結果為二進制11101,即打印29。 (3)PRINT 13 24 01101 11000,結果為二進制10101,結果為21。,5
30、4,4、運算符與表達式,一、運算符,7一元運算符: + - (按位邏輯非) 作用: 只對一個表達式執(zhí)行操作,55,4、運算符與表達式,二、運算符的優(yōu)先順序,1. +(正)、(負)、(按位NOT邏輯非) 2. *(乘)、/(除)、%(模) 3. +(加)、(+ 串聯(lián))、(減) 4. =, , =, , !=, !, !<( 關系運算符) 5. (位異或)、&(位與)、|(位或) 6. NOT 7. AND 8. ALL、ANY、BETWEEN、IN、LIKE、OR、SOME 9. =(賦值),56,5、流程控制語句,流程控制語句用于控制Transact-SQL語句、語句塊和存儲過程的執(zhí)行流程。
31、如果不使用流程控制語句,則各Transact-SQL語句按其出現(xiàn)的先后順序執(zhí)行。使用流程控制語句可以按需要控制語句的順序。,一、流程控制語句的作用,57,5、流程控制語句,一、 BEGINEND語句,BEGINEND語句用于將多個Transact-SQL語句定義成一個語句塊。語句塊可以在程序中視為一個單元處理。BEGINEND語句的語法如下: BEGIN sql語句|語句塊 END 其中,sql語句為一條Transact-SQL語句;語句塊為用BEGIN和END定義的語句塊??梢钥闯?,在一個語句塊中可以包含另一個語句塊。,58,5、流程控制語句,二、 IFELSE語句,IFELSE語
32、句的語法如下: IF 布爾表達式 sql語句1 | 語句塊1 ELSE sql語句2 | 語句塊2 布爾表達式: 返回TRUE或FALSE的表達式; sql語句: 一條Transact-SQL語句; 語句塊: 用BEGIN和END定義的語句組。 功能: 當布爾表達式的值為TRUE時,執(zhí)行sql語句1或語句塊1;當布爾表達式的值為FALSE時,執(zhí)行sql語句2或語句塊2。如果省略ELSE部分,則表示當布爾表達式的值為FALSE時不執(zhí)行任何操作。,59,5、流程控制語句,二、 IFELSE語句,【例4-15】已知pubs數(shù)據(jù)庫的圖書信息表titles中,表示書價的列為price,表
33、示圖書種類的列為type,表示書名的列為title。 編程序實現(xiàn):如果mod_cook類圖書的平均價格大于$15,就顯示文本: Average title price is more than $15;否則給出提示“The following titles are excellent mod_cook books:”并列出相應的書名。,60,5、流程控制語句,二、 IFELSE語句,代碼如下: USE pubs IF (SELECT AVG(price) FROM titles WHERE type = mod_cook) < $15 BEGIN PRINT The following t
34、itles are excellent mod_cook books: PRINT SELECT title FROM titles WHERE type=mod_cook END ELSE PRINT Average title price is more than $15.,61,5、流程控制語句,三、 CASE語句,1. 簡單CASE語句 CASE 輸入表達式 WHEN when_表達式 THEN 結果表達式 ...n ELSE 結果表達式 END 功能: 計算輸入表達式的值,依次與每個WHEN子句中的when_表達式進行比較,直到發(fā)現(xiàn)第一個與輸入表達式相
35、等的表達式時,便返回該WHEN子句的THEN后面所指定的結果表達式。如果不存在與輸入表達式相等的when_表達式,則當指定ELSE子句時將返回ELSE字句指定的結果表達式,若沒有指定ELSE子句,則返回NULL值。,62,5、流程控制語句,三、 CASE語句,【例4-16】將pubs數(shù)據(jù)庫中的圖書信息表(titles)中的各種圖書類型(type列)顯示為全稱。 USE pubs SELECT title, tpye = CASE type WHEN popular_comp THEN Popular Computing WHEN mod_cook THEN Modern Cookin
36、g WHEN business THEN Business WHEN psychology THEN Psychology WHEN trad_cook THEN Traditional Cooking ELSE Not yet categorized END, price FROM titles,63,5、流程控制語句,三、 CASE語句,2. CASE搜索語句 CASE WHEN 布爾表達式 THEN 結果表達式 ...n ELSE 結果表達式 END 功能: 依次計算每個WHEN子句中的布爾表達式,返回第一個值為TRUE的布爾表達式之后對應的的結
37、果表達式值。如果每一個WHEN子句之后的布爾表達式為都不為TRUE,則當指定ELSE子句時,返回ELSE子句中的結果表達式的值,若沒有指定ELSE子句,則返回NULL值。,64,5、流程控制語句,三、 CASE語句,【例4-17】對pubs數(shù)據(jù)庫中的各種價位的圖書給予不同的提示。 USE pubs SELECT title, price, 價格類別 = CASE WHEN price IS NULL THEN Not yet priced WHEN price = 10 and price < 20 THEN Coffee Table Title ELSE Expensi
38、ve book! END FROM titles,65,5、流程控制語句,四、 WHILE語句,格式: WHILE 布爾表達式 sql語句 | 語句塊 ,功能:從WHILE語句開始,計算布爾表達式的值,當布爾表達式的值為TRUE時,執(zhí)行循環(huán)體,然后返回WHILE語句,再計算布爾表達式的值,如果仍為TRUE,則再執(zhí)行循環(huán)體,,直到某次布爾表達式的值為FALSE時,則不執(zhí)行循環(huán)體,而直接執(zhí)行WHILE循環(huán)之后的其他語句。,66,5、流程控制語句,四、 WHILE語句,在循環(huán)體中可以包含語句: BREAK語句 執(zhí)行BREAK語句將完全跳出循環(huán),結束WHILE循環(huán)的執(zhí)行。 CONTINUE語句 執(zhí)行
39、CONTINUE語句將使循環(huán)跳過CONTINUE語句后面的語句,回到WHILE循環(huán)的第一條語句。,67,5、流程控制語句,四、 WHILE語句,【例4-18】求1到100之間的數(shù)的和。 DECLARE i smallint,sum smallint SET i=1 SET sum=0 WHILE i<=100 BEGIN SET sum=sum+i SET i=i+1 END PRINT 1 到100之間的數(shù)的和為+str(sum),68,5、流程控制語句,三、 WHILE語句,求1到100之間的奇數(shù)的和 DECLARE i smallint,sum smallint SET i=0 SE
40、T sum=0 WHILE i=0 BEGIN SET i=i+1 IF i<=100 IF (i % 2)=0 CONTINUE ELSE SET sum=sum+i ELSE BEGIN PRINT 1 到100之間的奇數(shù)和為+str(sum) BREAK END END,69,5、流程控制語句,五、 GOTO語句,格式: GOTO 標號 標號: 功能:用于改變程序的執(zhí)行流程,使程序直接跳到標有標號的位置處繼續(xù)執(zhí)行,而位于GOTO語句和標號之間的語句將不會被執(zhí)行。 說明: 標號必須是一個合法的標識符。,70,5、流程控制語句,五、 GO
41、TO語句,【例4-19】利用GOTO語句求1+2+3++50。 DECLARE sum int, count int SET sum=0 SET count=1 label_1: SET sum=sum+count SET count=count+1 IF count<=50 GOTO label_1 PRINT str(count)+str(sum),71,5、流程控制語句,六WAITFOR語句,格式: WAITFOR DELAY 時間 | TIME 時間 功能: 用于暫時停止SQL語句、語句塊或者存儲過程等的執(zhí)行,直到所設定的時間已過或者所設定的時間已到才繼續(xù)執(zhí)行。 說明: DELAY:
42、 使用該關鍵字表示其后的時間應為時間間隔,該時間間隔最長可達24小時. TIME: 使用該關鍵字表示其后的時間用于指示要等待到的時間點,格式為:hh: mm: ss。,72,5、流程控制語句,六WAITFOR語句,【例4-20】在一分鐘以后打印“HELLO”,代碼如下: BEGIN WAITFOR DELAY 00:00:30 PRINT HELLO END 【例4-21】在晚上10:20時打印“HELLO”。 BEGIN WAITFOR TIME 22: 20 PRINT HELLO END,73,5、流程控制語句,七 RETURN語句,格式: RETURN 整數(shù)表達式 功能: 用于無條件
43、地終止一個查詢、存儲過程或者批處理,當執(zhí)行RETURN語句時,位于RETURN語句之后的程序將不會被執(zhí)行。 說明: RETURN: 在存儲過程中可以在RETURN后面使用一個具有整數(shù)值的表達式,用于向調用過程或應用程序返回整型值。,74,5、流程控制語句,七 RETURN語句,例子: BEGIN WAITFOR DELAY 00:00:30 RETURN PRINT HELLO END,75,6、注釋,一 注釋的作用,注釋用于對代碼行或代碼段進行說明,或暫時禁用某些代碼行。注釋是程序代碼中不執(zhí)行的文本字符串。使用注釋對代碼進行說明,可以使程序代碼更易于理解和維護。注釋通常用于說明代碼的功能,描
44、述復雜計算或解釋編程方法,記錄程序名稱、作者姓名、主要代碼更改的日期等。 向代碼中添加注釋時,需要用一定的字符進行標識。SQL Server支持兩種類型的注釋字符。,76,6、注釋,二 注釋的方法,(1) -- : 這種注釋字符可與要執(zhí)行的代碼處在同一行,也可另起一行。從雙連字符開始到行尾均表示注釋。對于多行注釋,必須在每個注釋行的開始使用雙連字符。,【例4-22】使用雙連字符給程序添加注釋。 -- 打開pubs數(shù)據(jù)庫 USE pubs --從titles表中選擇所有的行和列 --按title_id列的升序排序 SELECT * FROM titles ORDER BY title_id A
45、SC,77,6、注釋,二 注釋的方法,(2) /* ... */ : 可與代碼處在同一行,也可另起一行,甚至用在可執(zhí)行代碼內。從/*到*/之間的全部內容均為注釋部分。對于多行注釋,必須使用/*開始注釋,使用*/結束注釋。注釋行上不應出現(xiàn)其它注釋字符。,【例4-23】使用/* ... */給程序添加注釋。 /*打開pubs數(shù)據(jù)庫*/ USE pubs /*從titles表中選擇所有的行和列 按title_id列的升序排序*/ SELECT * FROM titles ORDER BY title_id ASC,78,7、函數(shù),一、函數(shù)的定義,函數(shù)是一個Transact-SQL語句的集合,每個函數(shù)
46、用于完成某種特定的功能,可以在其他的Transact-SQL語句中直接使用(調用)。SQL Server 2000支持兩種類型的函數(shù): (1)內置函數(shù):SQL Server內部已經(jīng)定義好的函數(shù),用戶只能按照內置函數(shù)定義好的方式進行使用,而不能對內置函數(shù)進行修改。 (2)用戶定義函數(shù):用戶使用CREATE FUNCTION語句自己創(chuàng)建的函數(shù)。,79,7、函數(shù),一、函數(shù)的定義,T-SQL提供了用戶定義函數(shù)創(chuàng)建語句CREATE FUNCTION。其語法格式為: CREATE FUNCTION schema_name. function_name /* 定義函數(shù)名 */ ( parameter_n
47、ame AS type_schema_name. parameter_data_type /* 定義形參 */ = default /* 定義默認值 */ ,...n ) RETURNS return_data_type /* 定義函數(shù)返回數(shù)據(jù)類型 */ WITH ,...n /* 定義函數(shù)選項 */ AS BEGIN function_body /* 定義函數(shù)主體 */ RETURN scalar_expression /* 定義函數(shù)返回值 */ END,80,7、函數(shù),二、函數(shù)的調用,調用函數(shù)的格式: 函數(shù)名(參數(shù)表) 說明: 參數(shù): 0多個。當有多個參
48、數(shù)時,各參數(shù)之間要用逗號隔開。 圓括號不能省略,即使沒有參數(shù)也是如此。 調用位置:可在語句中,也可在表達式中。,81,7、函數(shù),三、內置函數(shù)的分類,(1)行集函數(shù):返回的結果是一個虛擬表對象,該對象可在Transact-SQL語句中用作表來引用。 例如,使用OPENQUERY函數(shù)執(zhí)行一個分布式查詢,以便從服務器OracleSvr中提取表student中的記錄。 SELECT * FROM OPENQUERY(OracleSvr, SELECT name, id FROM student) (2)聚合函數(shù):對一組值進行統(tǒng)計計算并返回一個單一的值。 例如,設當前數(shù)據(jù)庫擁有一個員工工資表emplo
49、yee,其中有一個工資列salary,要統(tǒng)計所有員工的工資總和: SELECT SUM(salary) FROM employee (3)標量函數(shù):用于對傳遞給它的一個或者多個參數(shù)值進行處理和計算,并返回一個單一的值。,82,7、函數(shù),四、常用聚合函數(shù)舉例,聚合函數(shù)用于對數(shù)據(jù)庫表中的一列或幾列數(shù)據(jù)進行統(tǒng)計匯總,常用于查詢語句中。,83,7、函數(shù),四、常用聚合函數(shù)舉例,【例4-13】設某學生數(shù)據(jù)庫中有一個“學生成績”表,該表包含的列有:學號、姓名、數(shù)學成績、英語成績。其中,數(shù)學成績和英語成績列為smallint類型,使用聚合函數(shù)實現(xiàn)以下各功能。 (1)求所有學生的數(shù)學平均成績和英語平均成績。
50、(2)統(tǒng)計數(shù)學成績大于80分的學生人數(shù)。 (3)統(tǒng)計學生總人數(shù) (4)求最高數(shù)學成績,最低數(shù)學成績 (5)求所有學生的數(shù)學總成績和英語總成績。,84,7、函數(shù),四、常用聚合函數(shù)舉例,實現(xiàn)以上各功能的查詢語句分別如下: (1)SELECT AVG(數(shù)學成績),AVG(英語成績) FROM 學生成績 (2)SELECT COUNT(數(shù)學成績) FROM 學生成績 WHERE 數(shù)學成績80 (3)SELECT COUNT(*) FROM 學生成績 (4)SELECT MAX(數(shù)學成績),MIN(數(shù)學成績) FROM 學生成績 (5)SELECT SUM(數(shù)學成績),SUM(英語成績)
51、 FROM 學生成績,85,7、函數(shù),五、常用標量函數(shù)舉例,1、數(shù)學函數(shù),2、字符串函數(shù),3、日期和時間函數(shù),4、轉換函數(shù),86,7、函數(shù),六、常用轉換函數(shù)舉例,1、轉換函數(shù)的作用,一般情況下,SQL Server會自動處理某些數(shù)據(jù)類型的轉換。例如,如果比較smallint和int表達式、或不同長度的char表達式,SQL Server可以將它們自動轉換成相同的類型,這種轉換稱為隱性轉換。 無法由SQL Server自動轉換的或者是SQL Server自動轉換的結果不符合預期結果的,就需要使用轉換函數(shù)做顯式轉換。SQL Server的提供了兩個轉換函數(shù):CAST和CONVERT。,87,7、函數(shù),六、常用轉換函數(shù)舉例,2、常用轉換函數(shù),1. CAST函數(shù) 用于將某種數(shù)據(jù)類型的表達式顯式轉換為另一種數(shù)據(jù)類型。 格式: CAST(表達式 AS 數(shù)據(jù)類型) 2. CONVERT函數(shù) 用于將某種數(shù)據(jù)類型的表達式顯式轉換為另一種數(shù)據(jù)類型,在將日期時間類型的數(shù)據(jù)轉換為字符類型的數(shù)據(jù)時,可以指定轉換后的字符樣式。 格式: CONVERT(數(shù)據(jù)類型(長度),表達式,樣式),88,本章完,
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。