數(shù)據(jù)庫之第八講:Transact-SQL語言基礎(chǔ).ppt
《數(shù)據(jù)庫之第八講:Transact-SQL語言基礎(chǔ).ppt》由會員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)庫之第八講:Transact-SQL語言基礎(chǔ).ppt(88頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、1,Transact-SQL語言基礎(chǔ) (對應(yīng)教材第6章) 電氣信息工程學(xué)院自動化教研室 主講教師:陳志武 Email:CHENYYJ163.COM,第六講,2,主要內(nèi)容,,基本數(shù)據(jù)類型,2,常量與變量,3,運(yùn)算符與表達(dá)式,4,流程控制語句,5,T-SQL語言簡介,1,3,主要內(nèi)容,,注釋,6,函數(shù),7,4,一、歷史,1、T-SQL語言簡介,1、T-SQL語言起源于SQL( Structured Query Language )語言,SQL語言的歷史: 70年代: 由IBM公司開發(fā)出來的;1976年開始在商品化關(guān)系數(shù)據(jù)庫系統(tǒng)中應(yīng)用; 1986:ANSI確認(rèn)SQL為關(guān)系數(shù)據(jù)庫語言的美國標(biāo)準(zhǔn),198
2、7年被ISO采納為國際標(biāo)準(zhǔn), 稱為SQL-86; 1989: ANSI發(fā)布了SQL-89標(biāo)準(zhǔn),后來被ISO采納為國際標(biāo)準(zhǔn); 1992: ANSI/ISO發(fā)布了SQL-92標(biāo)準(zhǔn),習(xí)慣稱為SQL 2;1999年: ANSI/ISO發(fā)布了SQL-99標(biāo)準(zhǔn),習(xí)慣稱為SQL 3; 2003: ANSI/ISO共同推出了SQL 2003標(biāo)準(zhǔn)。,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進(jìn)行了一系列的擴(kuò)展,增加了許多新特性,增強(qiáng)了可編程性和靈活性。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è)置或更改 數(shù)據(jù)庫用戶或角色的語句。,7,一、歷史,1、T-SQL語言簡介,1、T-SQL語言起源于SQL( Structured Query Language )語言,一些附加的語言元素 如變量、函數(shù)、流程控制語句等,這些不是SQL-92的標(biāo)準(zhǔn)內(nèi)容,8,二、標(biāo)識符,2、標(biāo)識符的分類: (1)常規(guī)標(biāo)識符 (2)分隔標(biāo)識符,1、標(biāo)識符的定義: 標(biāo)識符用于標(biāo)識服務(wù)器、數(shù)據(jù)庫、數(shù)據(jù)庫對象、變量等。,1、T-SQL語言簡介,9,二、標(biāo)識符,1、T-SQL語言簡介,1. 常規(guī)標(biāo)識符 指符合標(biāo)識符格式規(guī)則的標(biāo)識符。標(biāo)識符的
5、格式規(guī)則如下: 長度不超過128個字符。 開頭字母為a-z或A-Z、#、_ 或 以及來自其它語言的字母字符。 后續(xù)字符可以是a-z、A-Z、來自其它語言的字母字符、數(shù)字、#、$、_、。 不允許嵌入空格或其它特殊字符。 不允許與保留字同名。,10,二、標(biāo)識符,1、T-SQL語言簡介,2. 分隔標(biāo)識符 對于不符合格式規(guī)則的標(biāo)識符,當(dāng)用于Transact-SQL語句時,必須用雙引號或方括號括起來。 例如: SELECT * FROM My Table 等價于 SELECT * FROM My Table,11,二、標(biāo)識符,1、T-SQL語言簡介,對于常規(guī)標(biāo)識符,可以加上雙引號或方括號,也可以不
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 其中,語法塊進(jìn)一步定義如下: ::= * | 表名 | 視圖名 | 表別名.* |列名|表達(dá)式|IDENTITYCOL|ROWGUIDCOL AS 列別名 | 列別名 = 表達(dá)式 ,
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ù)類型,用戶還可以在此基礎(chǔ)上自己定義數(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ù)類型,二、定點(diǎn)數(shù)據(jù)數(shù)據(jù)類型,定點(diǎn)數(shù)據(jù)類型用于表示定點(diǎn)實(shí)數(shù),包括numeric和decimal類型。 Numeric等價于decimal。 格式: decimal(p, s) a numeric(p, s) b 說明: p: 表示精度,指定小數(shù)點(diǎn)左邊和右邊十進(jìn)制數(shù)字的最大位數(shù),取值在1到38之間,缺省值為18; s: 指定小數(shù)點(diǎn)右邊十進(jìn)數(shù)的最大位數(shù),取值在0到p之間,缺省值為0。 表示范圍: -1038+11038-1,17,2、數(shù)據(jù)類型,三、浮點(diǎn)數(shù)據(jù)類型,表示范圍: -1.79E+3081.7
9、9E+308,1. float類型 格式: float(n) 說明: n: 尾數(shù)的位數(shù),具體如下表:,18,2、數(shù)據(jù)類型,三、浮點(diǎn)數(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標(biāo)準(zhǔn)定義的任何字符,包含由不同字符集定義的所有字符。需要相當(dāng)于非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。 存儲大小: 輸入字符的實(shí)際長度。長度可為零,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í)際個數(shù)的兩倍。長度可以為零。,22,2、數(shù)據(jù)類型,四、字符型數(shù)據(jù),5. text類型 功
12、能: 用于存儲大塊的非Unicode字符,長度可變,字符最大長度 存儲空間等于輸入字符個數(shù) 6. ntext類型 功能:用于存儲大塊的Unicode字符,長度可變,字符最大長度 存儲空間等于輸入字符個數(shù)的兩倍,23,2、數(shù)據(jù)類型,五、日期與時間數(shù)據(jù)類型,日期和時間數(shù)據(jù)類型用于存儲日期和時間的結(jié)合體。包括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ù)類型用于存儲可變長度二進(jìn)制數(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ù)類型,九、 二進(jìn)制數(shù)據(jù)類型,二進(jìn)制數(shù)據(jù)類型又可以分為binary和varbinary類型。,1. binary類型 格式: binary(n) 功能: 定義固定長度的n個字節(jié)二進(jìn)制數(shù)據(jù),當(dāng)輸
15、入的二進(jìn)制數(shù)據(jù)長度小于n時,余下部分填充0。 說明: n: 18000,28,2、數(shù)據(jù)類型,九、 二進(jìn)制數(shù)據(jù)類型,2. varbinary類型 格式: varbinary(n) 功能: 定義n個字節(jié)可變長度二進(jìn)制數(shù)據(jù)。 說明: n: 18000 存儲大小: 為實(shí)際輸入數(shù)據(jù)長度加4個字節(jié),而不是n個字節(jié)。輸入的數(shù)據(jù)長度可能為0字節(jié)。 如果在數(shù)據(jù)定義或變量定義語句中使用時沒有指定n,則默認(rèn)長度n為1。如果在CAST函數(shù)中使用時沒有指定n,則默認(rèn)長度n為30。,29,2、數(shù)據(jù)類型,十、 其他數(shù)據(jù)類型,1. timestamp類型(時間戳數(shù)據(jù)類型) 存儲大小: 8個字節(jié)。 時間戳類型的數(shù)據(jù)用于提供
16、數(shù)據(jù)庫范圍內(nèi)的惟一值,反映數(shù)據(jù)庫中數(shù)據(jù)修改的相對順序,相當(dāng)于一個單調(diào)上升的計數(shù)器。當(dāng)表中的某列定義為timestamp類型時,在對表中某行進(jìn)行修改或添加行時,相應(yīng)timestamp類型列的值會自動被更新。,30,2、數(shù)據(jù)類型,十、 其他數(shù)據(jù)類型,2. uniqueidentifier類型 用于存儲一個16字節(jié)長的二進(jìn)制數(shù)據(jù),它是SQL Server根據(jù)計算機(jī)網(wǎng)絡(luò)適配器和CPU時鐘產(chǎn)生的全局惟一標(biāo)識符(Globally Unique Identifier,GUID),該數(shù)字可以通過調(diào)用SQL Server的NEWID函數(shù)獲得。 GUID是一個唯一的二進(jìn)制數(shù)字,世界上的任何兩臺計算機(jī)都不會生成
17、重復(fù)的GUID值。GUID主要用于在擁有多個節(jié)點(diǎn)、多臺計算機(jī)的網(wǎng)絡(luò)中,分配必須具有唯一性的標(biāo)識符。,31,2、數(shù)據(jù)類型,十、 其他數(shù)據(jù)類型,3. sql_variant類型 用于存儲除text、ntext、image、timestamp和sql_variant外的其它任何合法的數(shù)據(jù)。 4. table類型 用于存儲對表或者視圖處理后的結(jié)果集。這種新的數(shù)據(jù)類型使得用變量就可以存儲一個表,從而使函數(shù)或過程返回查詢結(jié)果更加方便、快捷。 5. cursor類型 cursor類型是變量或存儲過程 的OUTPUT 參數(shù)的一種數(shù)據(jù)類型,這些參數(shù)包含對游標(biāo)的引用。,32,2、數(shù)據(jù)類型,十一、 用戶自己定
18、義的數(shù)據(jù)類型,33,3、常量與變量,一、 常量,常量也稱為標(biāo)量值,是表示一個特定數(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標(biāo)識符,N前綴必須是大寫字母。例如: Michl是字符串常量 NMichl是Unicode字符常量 Unicode常量被解釋為Unicode數(shù)據(jù)。Unicode 數(shù)據(jù)中的每個字符都使用兩個字節(jié)進(jìn)行存儲,而普通字符數(shù)據(jù)中的每個字符則使用一個字節(jié)進(jìn)行存儲。,35,3、常量與變量,一、 常量,3. 二進(jìn)制數(shù)常量 二進(jìn)制常量使用0 x作為前輟,后面跟隨十六進(jìn)制數(shù)字字符串。例如: 0 xAE 0 x12Ef 0 x69048AEFDD010E 0 x(空二進(jìn)制常量),36,3、常量與變量,一、 常量,4. bit常量 bit常量使用數(shù)字0或1表示。如果使用一個大于1的數(shù)字,它將被轉(zhuǎn)
20、換為1。 5. datetime常量 datetime常量使用單引號括起來的特定格式的字符日期值表示。例如: April 15, 1998 15 April, 1998 980415 04/15/98 14:30:24 04:24 PM,37,3、常量與變量,一、 常量,6. 整型常量 由正、負(fù)號和數(shù)字09組成,正號可以省略。 例如: 1894 2 +145345234 -2147483648 7. decimal常量 由正、負(fù)號、小數(shù)點(diǎn)、數(shù)字09組成,正號可以省略。 例如: 1894.1204 2.0 +145345234.2234 -2147483648.
21、10,38,3、常量與變量,一、 常量,8. float和real常量 使用科學(xué)記數(shù)法表示。 例如: 101.5E5 0.5E-2 +123E-3 -12E5 9. money常量 以可選小數(shù)點(diǎn)和可選貨幣符號作為前綴的一串?dāng)?shù)字??梢詭д?、負(fù)號。 例如: $12 $542023.14 -$45.56 +$423456.99,39,3、常量與變量,二、變量,變量是可以保存特定類型的單個數(shù)據(jù)值的對象,SQL Server的變量分為兩種:用戶自己定義的局部變量和系統(tǒng)提供的全局變量。,1、局部變量 局部變量的作用范圍僅限制在程序的內(nèi)部。常用來保存臨時數(shù)據(jù)。例如,可以使用局部變量保
22、存表達(dá)式的計算結(jié)果,作為計數(shù)器保存循環(huán)執(zhí)行的次數(shù),或者用來保存由存儲過程返回的數(shù)據(jù)值。,40,3、常量與變量,二、變量,1. 局部變量的定義 格式: DECLARE 局部變量名 數(shù)據(jù)類型 ,n 說明: 局部變量名: 必須以開頭,符合標(biāo)識符的命名規(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 局部變量名 = 表達(dá)式 【例4-6】定義局部變量myvar,并為其賦值,最后顯示myvar的值。 DECLARE myvar char(20) SET myvar = This is a test --用SET賦值 PRINT myvar -
24、-用PRINT語句顯示,43,3、常量與變量,二、變量,(2)用SELECT語句給局部變量賦值: 格式: SELECT 局部變量名 = 表達(dá)式,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、帶的變量,特點(diǎn)如下: 全局變量不是由用戶的程序定義的,它們是SQL Server系統(tǒng)在服務(wù)器級定義的,作用范圍是一個服務(wù)器內(nèi)都有效。 全局變量通常用來存儲一些配置設(shè)定值和統(tǒng)計數(shù)據(jù)。用戶可以在程序中用全局變量來測試系統(tǒng)的設(shè)定值或者是Transact-SQL命令執(zhí)行后的狀態(tài)值。,45,3、常量與變量,二、變量,用戶只能使用預(yù)先定義的全局變量,不能自己定義全局變量。 全局變量,必須以標(biāo)記符“”開頭。 局部變量的名稱不能與全局變量的名稱相同,否則會出現(xiàn)不可預(yù)測的結(jié)果。 任何程序均可以隨時引用全局變量。,例如: VERSION用于返回SQL Server當(dāng)前安裝的日期、版本和處理器類型;CONNECTI
26、ONS用于返回自上次啟動SQL Server以來連接或試圖連接的次數(shù);LANGUAGE用于返回當(dāng)前使用的語言名,46,4、運(yùn)算符與表達(dá)式,一、運(yùn)算符,SQL Server運(yùn)算符有以下幾類: 算術(shù)運(yùn)算符 字符串串聯(lián)運(yùn)算符 賦值運(yùn)算符 關(guān)系運(yùn)算符 邏輯運(yùn)算符 位運(yùn)算符 一元運(yùn)算符,運(yùn)算符:對常量或變量進(jìn)行某種運(yùn)算的符號;由運(yùn)算符與變量常量構(gòu)成的式子稱為表達(dá)式,47,4、運(yùn)算符與表達(dá)式,一、運(yùn)算符,1、算術(shù)運(yùn)算符: +、、*、/、%(取余) %: 用于返回一個整數(shù)除以另一個整數(shù)的余數(shù)。 例如: 13 % 5 = 3,48,4、運(yùn)算符與表達(dá)式,一、運(yùn)算符,2、字符串串聯(lián)運(yùn)算符: + 作用: 將兩個字
27、符串串聯(lián)起來,構(gòu)成字符串表達(dá)式。 例如: abc + def 結(jié)果為 abcdef 123 + 456 結(jié)果為 123456,49,4、運(yùn)算符與表達(dá)式,一、運(yùn)算符,3、賦值運(yùn)算符: = 例如: DECLARE MyCounter int SET MyCounter = 1,50,4、運(yùn)算符與表達(dá)式,一、運(yùn)算符,4、關(guān)系運(yùn)算符: = = != ! 作用: 比較兩個表達(dá)式的大小。 比較結(jié)果: 布爾值TRUE、FALSE、UNKNOWN TRUE:表示表達(dá)式的結(jié)果為真 FALSE:表示表達(dá)式的結(jié)果為假 UNKNOWN: 當(dāng)SET ANSI_NULLS為ON時,帶有一個或兩個NULL
28、表達(dá)式的比較運(yùn)算返回UNKNOWN。 當(dāng)SET ANSI_NULLS為OFF時,上述規(guī)則同樣適用,但當(dāng)兩個表達(dá)式都為NULL時,返回結(jié)果為TRUE。例如,NULL = NULL返回TRUE。,51,4、運(yùn)算符與表達(dá)式,一、運(yùn)算符,5、邏輯運(yùn)算符: NOT AND OR 作用:對具有布爾值的表達(dá)式進(jìn)行運(yùn)算。 運(yùn)算結(jié)果: TRUE、FALSE。 NOT: 一元運(yùn)算符,對布爾表達(dá)式的值取反 AND: 只有兩個布爾表達(dá)式的值都為TRUE,運(yùn)算結(jié)果才為TRUE,否則結(jié)果為FALSE。 OR: 如果兩個布爾表達(dá)式中的一個為TRUE,那么運(yùn)算結(jié)果為TRUE。只有兩個布爾表達(dá)式都為FALSE,運(yùn)算結(jié)果才為FA
29、LSE。,52,4、運(yùn)算符與表達(dá)式,一、運(yùn)算符,例: NOT (3 8) 結(jié)果為TRUE (3 8) AND (5 8) Or (5 < 6) 結(jié)果為TRUE,53,4、運(yùn)算符與表達(dá)式,一、運(yùn)算符,6、位運(yùn)算符: & | 作用: 在兩個整型表達(dá)式之間執(zhí)行按位操作 【例4-8】判斷以下各打印語句的打印結(jié)果。 (1)PRINT 2 & 3 10 & 11,結(jié)果為二進(jìn)制10,即打印2。 (2)PRINT 13 | 24 01101 | 11000,結(jié)果為二進(jìn)制11101,即打印29。 (3)PRINT 13 24 01101 11000,結(jié)果為二進(jìn)制10101,結(jié)果為21。,5
30、4,4、運(yùn)算符與表達(dá)式,一、運(yùn)算符,7一元運(yùn)算符: + - (按位邏輯非) 作用: 只對一個表達(dá)式執(zhí)行操作,55,4、運(yùn)算符與表達(dá)式,二、運(yùn)算符的優(yōu)先順序,1. +(正)、(負(fù))、(按位NOT邏輯非) 2. *(乘)、/(除)、%(模) 3. +(加)、(+ 串聯(lián))、(減) 4. =, , =, , !=, !, !<( 關(guān)系運(yùn)算符) 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 布爾表達(dá)式 sql語句1 | 語句塊1 ELSE sql語句2 | 語句塊2 布爾表達(dá)式: 返回TRUE或FALSE的表達(dá)式; sql語句: 一條Transact-SQL語句; 語句塊: 用BEGIN和END定義的語句組。 功能: 當(dāng)布爾表達(dá)式的值為TRUE時,執(zhí)行sql語句1或語句塊1;當(dāng)布爾表達(dá)式的值為FALSE時,執(zhí)行sql語句2或語句塊2。如果省略ELSE部分,則表示當(dāng)布爾表達(dá)式的值為FALSE時不執(zhí)行任何操作。,59,5、流程控制語句,二、 IFELSE語句,【例4-15】已知pubs數(shù)據(jù)庫的圖書信息表titles中,表示書價的列為price,表
33、示圖書種類的列為type,表示書名的列為title。 編程序?qū)崿F(xiàn):如果mod_cook類圖書的平均價格大于$15,就顯示文本: Average title price is more than $15;否則給出提示“The following titles are excellent mod_cook books:”并列出相應(yīng)的書名。,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 輸入表達(dá)式 WHEN when_表達(dá)式 THEN 結(jié)果表達(dá)式 ...n ELSE 結(jié)果表達(dá)式 END 功能: 計算輸入表達(dá)式的值,依次與每個WHEN子句中的when_表達(dá)式進(jìn)行比較,直到發(fā)現(xiàn)第一個與輸入表達(dá)式相
35、等的表達(dá)式時,便返回該WHEN子句的THEN后面所指定的結(jié)果表達(dá)式。如果不存在與輸入表達(dá)式相等的when_表達(dá)式,則當(dāng)指定ELSE子句時將返回ELSE字句指定的結(jié)果表達(dá)式,若沒有指定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 布爾表達(dá)式 THEN 結(jié)果表達(dá)式 ...n ELSE 結(jié)果表達(dá)式 END 功能: 依次計算每個WHEN子句中的布爾表達(dá)式,返回第一個值為TRUE的布爾表達(dá)式之后對應(yīng)的的結(jié)
37、果表達(dá)式值。如果每一個WHEN子句之后的布爾表達(dá)式為都不為TRUE,則當(dāng)指定ELSE子句時,返回ELSE子句中的結(jié)果表達(dá)式的值,若沒有指定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 布爾表達(dá)式 sql語句 | 語句塊 ,功能:從WHILE語句開始,計算布爾表達(dá)式的值,當(dāng)布爾表達(dá)式的值為TRUE時,執(zhí)行循環(huán)體,然后返回WHILE語句,再計算布爾表達(dá)式的值,如果仍為TRUE,則再執(zhí)行循環(huán)體,,直到某次布爾表達(dá)式的值為FALSE時,則不執(zhí)行循環(huán)體,而直接執(zhí)行WHILE循環(huán)之后的其他語句。,66,5、流程控制語句,四、 WHILE語句,在循環(huán)體中可以包含語句: BREAK語句 執(zhí)行BREAK語句將完全跳出循環(huán),結(jié)束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 標(biāo)號 標(biāo)號: 功能:用于改變程序的執(zhí)行流程,使程序直接跳到標(biāo)有標(biāo)號的位置處繼續(xù)執(zhí)行,而位于GOTO語句和標(biāo)號之間的語句將不會被執(zhí)行。 說明: 標(biāo)號必須是一個合法的標(biāo)識符。,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í)行,直到所設(shè)定的時間已過或者所設(shè)定的時間已到才繼續(xù)執(zhí)行。 說明: DELAY:
42、 使用該關(guān)鍵字表示其后的時間應(yīng)為時間間隔,該時間間隔最長可達(dá)24小時. TIME: 使用該關(guān)鍵字表示其后的時間用于指示要等待到的時間點(diǎn),格式為: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ù)表達(dá)式 功能: 用于無條件
43、地終止一個查詢、存儲過程或者批處理,當(dāng)執(zhí)行RETURN語句時,位于RETURN語句之后的程序?qū)⒉粫粓?zhí)行。 說明: RETURN: 在存儲過程中可以在RETURN后面使用一個具有整數(shù)值的表達(dá)式,用于向調(diào)用過程或應(yīng)用程序返回整型值。,74,5、流程控制語句,七 RETURN語句,例子: BEGIN WAITFOR DELAY 00:00:30 RETURN PRINT HELLO END,75,6、注釋,一 注釋的作用,注釋用于對代碼行或代碼段進(jìn)行說明,或暫時禁用某些代碼行。注釋是程序代碼中不執(zhí)行的文本字符串。使用注釋對代碼進(jìn)行說明,可以使程序代碼更易于理解和維護(hù)。注釋通常用于說明代碼的功能,描
44、述復(fù)雜計算或解釋編程方法,記錄程序名稱、作者姓名、主要代碼更改的日期等。 向代碼中添加注釋時,需要用一定的字符進(jìn)行標(biāo)識。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í)行代碼內(nèi)。從/*到*/之間的全部內(nèi)容均為注釋部分。對于多行注釋,必須使用/*開始注釋,使用*/結(jié)束注釋。注釋行上不應(yīng)出現(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語句中直接使用(調(diào)用)。SQL Server 2000支持兩種類型的函數(shù): (1)內(nèi)置函數(shù):SQL Server內(nèi)部已經(jīng)定義好的函數(shù),用戶只能按照內(nèi)置函數(shù)定義好的方式進(jìn)行使用,而不能對內(nèi)置函數(shù)進(jìn)行修改。 (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 /* 定義默認(rèn)值 */ ,...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ù)的調(diào)用,調(diào)用函數(shù)的格式: 函數(shù)名(參數(shù)表) 說明: 參數(shù): 0多個。當(dāng)有多個參
48、數(shù)時,各參數(shù)之間要用逗號隔開。 圓括號不能省略,即使沒有參數(shù)也是如此。 調(diào)用位置:可在語句中,也可在表達(dá)式中。,81,7、函數(shù),三、內(nèi)置函數(shù)的分類,(1)行集函數(shù):返回的結(jié)果是一個虛擬表對象,該對象可在Transact-SQL語句中用作表來引用。 例如,使用OPENQUERY函數(shù)執(zhí)行一個分布式查詢,以便從服務(wù)器OracleSvr中提取表student中的記錄。 SELECT * FROM OPENQUERY(OracleSvr, SELECT name, id FROM student) (2)聚合函數(shù):對一組值進(jìn)行統(tǒng)計計算并返回一個單一的值。 例如,設(shè)當(dāng)前數(shù)據(jù)庫擁有一個員工工資表emplo
49、yee,其中有一個工資列salary,要統(tǒng)計所有員工的工資總和: SELECT SUM(salary) FROM employee (3)標(biāo)量函數(shù):用于對傳遞給它的一個或者多個參數(shù)值進(jìn)行處理和計算,并返回一個單一的值。,82,7、函數(shù),四、常用聚合函數(shù)舉例,聚合函數(shù)用于對數(shù)據(jù)庫表中的一列或幾列數(shù)據(jù)進(jìn)行統(tǒng)計匯總,常用于查詢語句中。,83,7、函數(shù),四、常用聚合函數(shù)舉例,【例4-13】設(shè)某學(xué)生數(shù)據(jù)庫中有一個“學(xué)生成績”表,該表包含的列有:學(xué)號、姓名、數(shù)學(xué)成績、英語成績。其中,數(shù)學(xué)成績和英語成績列為smallint類型,使用聚合函數(shù)實(shí)現(xiàn)以下各功能。 (1)求所有學(xué)生的數(shù)學(xué)平均成績和英語平均成績。
50、(2)統(tǒng)計數(shù)學(xué)成績大于80分的學(xué)生人數(shù)。 (3)統(tǒng)計學(xué)生總?cè)藬?shù) (4)求最高數(shù)學(xué)成績,最低數(shù)學(xué)成績 (5)求所有學(xué)生的數(shù)學(xué)總成績和英語總成績。,84,7、函數(shù),四、常用聚合函數(shù)舉例,實(shí)現(xiàn)以上各功能的查詢語句分別如下: (1)SELECT AVG(數(shù)學(xué)成績),AVG(英語成績) FROM 學(xué)生成績 (2)SELECT COUNT(數(shù)學(xué)成績) FROM 學(xué)生成績 WHERE 數(shù)學(xué)成績80 (3)SELECT COUNT(*) FROM 學(xué)生成績 (4)SELECT MAX(數(shù)學(xué)成績),MIN(數(shù)學(xué)成績) FROM 學(xué)生成績 (5)SELECT SUM(數(shù)學(xué)成績),SUM(英語成績)
51、 FROM 學(xué)生成績,85,7、函數(shù),五、常用標(biāo)量函數(shù)舉例,1、數(shù)學(xué)函數(shù),2、字符串函數(shù),3、日期和時間函數(shù),4、轉(zhuǎn)換函數(shù),86,7、函數(shù),六、常用轉(zhuǎn)換函數(shù)舉例,1、轉(zhuǎn)換函數(shù)的作用,一般情況下,SQL Server會自動處理某些數(shù)據(jù)類型的轉(zhuǎn)換。例如,如果比較smallint和int表達(dá)式、或不同長度的char表達(dá)式,SQL Server可以將它們自動轉(zhuǎn)換成相同的類型,這種轉(zhuǎn)換稱為隱性轉(zhuǎn)換。 無法由SQL Server自動轉(zhuǎn)換的或者是SQL Server自動轉(zhuǎn)換的結(jié)果不符合預(yù)期結(jié)果的,就需要使用轉(zhuǎn)換函數(shù)做顯式轉(zhuǎn)換。SQL Server的提供了兩個轉(zhuǎn)換函數(shù):CAST和CONVERT。,87,7、函數(shù),六、常用轉(zhuǎn)換函數(shù)舉例,2、常用轉(zhuǎn)換函數(shù),1. CAST函數(shù) 用于將某種數(shù)據(jù)類型的表達(dá)式顯式轉(zhuǎn)換為另一種數(shù)據(jù)類型。 格式: CAST(表達(dá)式 AS 數(shù)據(jù)類型) 2. CONVERT函數(shù) 用于將某種數(shù)據(jù)類型的表達(dá)式顯式轉(zhuǎn)換為另一種數(shù)據(jù)類型,在將日期時間類型的數(shù)據(jù)轉(zhuǎn)換為字符類型的數(shù)據(jù)時,可以指定轉(zhuǎn)換后的字符樣式。 格式: CONVERT(數(shù)據(jù)類型(長度),表達(dá)式,樣式),88,本章完,
- 溫馨提示:
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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《朱德的扁擔(dān)》名師課件(第二課時)
- 《曹沖稱象》【優(yōu)秀課件推薦】
- 國際財務(wù)管理第8章課件
- 水文地質(zhì)學(xué)基礎(chǔ)課程實(shí)驗(yàn)
- 腦出血病人的護(hù)理
- 三年級下冊幾百幾十?dāng)?shù)和幾十幾除以一位數(shù)的口算人教版
- 快樂工作-創(chuàng)造雙贏的人際溝通課件
- 心肺腦復(fù)蘇最新進(jìn)展及新思路-課件
- 制藥用水課件
- 一汽大眾沖壓件認(rèn)可過程課件
- 一次成功就夠了(哈蘭·山德士)課件
- 一次函數(shù)與一元一次方程及不等式課件
- 感恩節(jié)母親的圖片ppt
- 地中海氣候溫帶季風(fēng)氣候課件
- 亞低溫治療的護(hù)理和展望