Ch8-1補充 09101數(shù)據(jù)庫系統(tǒng)原理及應用-語法與流程控制_第1頁
Ch8-1補充 09101數(shù)據(jù)庫系統(tǒng)原理及應用-語法與流程控制_第2頁
Ch8-1補充 09101數(shù)據(jù)庫系統(tǒng)原理及應用-語法與流程控制_第3頁
Ch8-1補充 09101數(shù)據(jù)庫系統(tǒng)原理及應用-語法與流程控制_第4頁
Ch8-1補充 09101數(shù)據(jù)庫系統(tǒng)原理及應用-語法與流程控制_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、SQLServer2005編程語法與流程控制Transact-SQL語言的特點 Transact-SQL語言是微軟對SQL語言的擴展。 Transact-SQL語言是一種交互式查詢語言,具有功能強大、簡單易學的特點。 Transact-SQL語言有4個特點:一是一體化的特點,集數(shù)據(jù)定義語言、數(shù)據(jù)操縱語言、數(shù)據(jù)控制語言和附加語言元素為一體。二是兩種使用方式,交互式和嵌入到高級語言的使用方式。前者適合于非數(shù)據(jù)庫專業(yè)人員使用,后者適合于數(shù)據(jù)庫專業(yè)開發(fā)人員使用。三是非過程化語言,只需要提出“干什么”,不需要指出“如何干”,語句的操作過程由系統(tǒng)自動完成。四是,類似于人的思維習慣,容易理解和掌握。Tran

2、sact-SQL語言的組成元素 數(shù)據(jù)控制語言語句 數(shù)據(jù)定義語言語句 數(shù)據(jù)操縱語言語句 附加的語言元素 數(shù)據(jù)控制語言語句安全性管理是分布式數(shù)據(jù)庫系統(tǒng)的重要特征。安全性管理就是確保數(shù)據(jù)庫中的數(shù)據(jù)和操作不能被未授權的用戶使用和執(zhí)行。數(shù)據(jù)控制語言語句就是用來進行安全性管理,它可以確定哪些用戶可以查看或修改數(shù)據(jù)、或執(zhí)行數(shù)據(jù)庫中的操作等,這些語句主要包括GRANT、DENY、REVOKE等語句。 語句功能說明GRANT授予權限可把語句許可或?qū)ο笤S可的權限授予其他用戶和角色REVOKE收回權限與GRANT的功能相反,但不影響該用戶或角色從其他角色中作為成員繼承許可權限D(zhuǎn)ENY收回權限,并禁止從其他角色繼承許

3、可權限功能與REVOKE相似,不同之處:除收回權限外,還禁止從其他角色繼承許可權限數(shù)據(jù)定義語言語句數(shù)據(jù)定義語言語句用來執(zhí)行數(shù)據(jù)庫的任務、創(chuàng)建數(shù)據(jù)庫以及數(shù)據(jù)庫中的各種對象,這些語句包括CREATE、ALTER、DROP等語句。在Microsoft SQL Server 2000系統(tǒng)中,數(shù)據(jù)庫及其對象包括數(shù)據(jù)庫、表、缺省、規(guī)則、視圖、觸發(fā)器、存儲過程等。這些對象的創(chuàng)建、修改和刪除等管理都可以通過使用CREATE、ALTER、DROP等語句來完成。語句功能說明CREATE創(chuàng)建數(shù)據(jù)庫或數(shù)據(jù)庫對象不同數(shù)據(jù)庫對象,其CREATE語句的語法形式不同ALTER對數(shù)據(jù)庫或數(shù)據(jù)庫對象進行修改不同數(shù)據(jù)庫對象,其AL

4、TER語句的語法形式不同DROP刪除數(shù)據(jù)庫或數(shù)據(jù)庫對象不同數(shù)據(jù)庫對象,其DROP語句的語法形式不同數(shù)據(jù)操縱語言語句數(shù)據(jù)操縱語言語句,用來在數(shù)據(jù)庫中操縱各種對象,檢索和修改數(shù)據(jù),這些語句包括SELECT、INSERT、UPDATE、DELETE等。這些語句都是操縱數(shù)據(jù)庫的最常用到的語句。語句功能說明SELECT從表或視圖中檢索數(shù)據(jù)是使用最頻繁的SQL語句之一INSERT將數(shù)據(jù)插入到表或視圖中UPDATE修改表或視圖中的數(shù)據(jù)既可修改表或視圖的一行數(shù)據(jù),也可修改一組或全部數(shù)據(jù)DELETE從表或視圖中刪除數(shù)據(jù)可根據(jù)條件刪除指定的數(shù)據(jù)附加的語言元素附加的語言元素不是ISO SQL-3的標準內(nèi)容,而是Tr

5、ansact-SQL語言為了編程而增加的語言元素。這些語言元素包括變量、運算符、函數(shù)、流程控制語言和注釋等等。下面就要介紹這些Transact-SQL語法的要素一、批處理命令批處理是多條Transact-SQL語句構成的集合。SQL Server將批處理語句進行編譯形成一個可執(zhí)行單元,稱為執(zhí)行計劃。執(zhí)行計劃中的語句一次執(zhí)行每一條語句,如果在編譯過程中出現(xiàn)語法錯誤,那么批處理中所有的語句均無法正常執(zhí)行。如果在運行階段出現(xiàn)錯誤時,一般都會中斷當前以及其后語句的執(zhí)行,只有在少數(shù)情況下,如違反約束時,僅中斷當前出錯的語句而繼續(xù)執(zhí)行其他語句。在建立批處理時,應該遵循以下規(guī)則:不能在批處理中引用其他批處理

6、中所定義的變量。CREATE DEFAULT、CREATE PROCEDURE、CREATE RULE、CREATE TRIGGER 和 CREATE VIEW 語句不能在批處理中與其它語句組合使用。不允許在一個批處理中更改表結(jié)構、并引用新的字段。如果 EXECUTE 語句是批處理中的第一句,則不需要 EXECUTE 關鍵字。如果 EXECUTE 語句不是批處理中的第一條語句,則需要 EXECUTE 關鍵字。EXECUTE /EXEC用于執(zhí)行用戶定義的函數(shù)、系統(tǒng)存儲過程、用戶自定義存儲過程或一個擴展的存儲過程。在一個 Transact-SQL 批處理內(nèi)部,EXEC 能控制一個字符串的運行一個完

7、整的批處理需要使用GO語句作為結(jié)束標記。GO實際上并不是 Transact-SQL 語句,向 SQL Server 描述由 Transact-SQL 語句組成的批處理二、注釋 注釋是程序代碼中不執(zhí)行的文本字符串。在SQL Server中,可以使用兩種類型的注釋字符:一種是ANSI標準的注釋符“-”,它用于單行注釋;另一種是與C語言相同的注釋符號,即“/* */”。 注釋語句嵌于行內(nèi)的注釋語句塊注釋語句SELECT productname, (unitsinstock - unitsonorder) - 計算存貨, supplierIDFROM productsGO/* 這部分代碼檢索產(chǎn)品表的所

8、有行并且顯示單價,增加了10%的單價和產(chǎn)品名稱。 */USE northwindSELECT unitprice, (unitprice * 1.1), productname FROM productsGO示例 2示例 1三、標識符標準標識符:第一個字符必須是字母(az 或 AZ),第一個字符后可以是數(shù)字、字母或各種符號特殊標識符:當標識符的第一個字符是符號時,代表它有特殊用處以開頭的標識符代表局部變量或參數(shù) 以開頭的標識符代表全局變量或參數(shù)以#開頭的標識符代表臨時表或存儲過程以#開頭的標識符代表一個全局臨時對象限定標識符當對象名稱包含空格時當保留關鍵字被用作對象名或?qū)ο蟛糠值拿謺r限定標識

9、符限定標識符可以用中括號表示的括號標識符( ) 用雙引號表示的引用標識符(“ ”)SELECT * FROM 含空格的表名SELECT * FROM “含空格的表名”標識符的命名原則使用短的名字盡量使用有意義的名字使用簡單明了的命名約定使用能夠區(qū)分出對象類型的標識符視圖存儲過程保持對象名和用戶名的一致性sales 表和 sales 角色四、數(shù)據(jù)類型數(shù)字型:包括各種整數(shù)如 int、tinyint、smallint 和 bigint日期型:包括 datetime 和 smalldatetime字符型:包括 char、nchar、varchar 和 nvarchar二進制型:在存儲與結(jié)構上與字符型數(shù)

10、據(jù)相似,包括 binary 和varbinary惟一標識符(GUID):代表一個全局的特殊標識符,是一個16 位16 進制的值 SQL 變量:代表 SQL Server 所支持的各種數(shù)據(jù)類型圖像和文本:屬于大型二進制對象結(jié)構(BLOB),代表定長或變長的數(shù)據(jù)類型表:代表一個表結(jié)構,在 SQL Server 2000 中,可以把表保存在字段中游標:用于存儲過程的編程中,也會和低層客戶接口同時使用。游標從不用于數(shù)據(jù)定義語言(DDL)語句中用戶自定義數(shù)據(jù)類型:基于系統(tǒng)數(shù)據(jù)類型,由數(shù)據(jù)庫管理員生成五、常量常量,也稱為字面值或標量值,是表示一個特定數(shù)據(jù)值的符號,在運行過程中其值不會變的量。常量的格式取決

11、于它所表示的值的數(shù)據(jù)類型。包括:字符型常量,整型常量, 實型常量,日期常量等。Example: This is 12 12.3 2002-09-09六、變量 變量對于一種語言來說是必不可少的組成部分。變量有兩種形式,局部變量:用戶自己使用DECLARE語句定義,名字前要有一個標記符“”。 全局變量:系統(tǒng)提供的,引用全局變量時,名字前要有兩個標記符“”。 局部變量局部變量只具有局部作用范圍 只能在定義它的語句、批處理或過程中使用用 DECLARE 語句定義局部變量用 SET 或 SELECT 語句給局部變量賦值【例】創(chuàng)建局部變量var1、var2,并賦值,然后輸出變量的值。DECLARE var

12、1 varchar(20),var2 varchar(40)SET var1=中國 /*一個SET語句只能給一個變量賦值*/SET var2=var1+是一個偉大的國家select var1,var2go 【例】創(chuàng)建一個名為sex的局部變量,并在 SELECT 語句中使用該局部變量查找表student中所有女同學的學號、姓名。DECLARE sex char(2)SET sex=女SELECT SNO,SNAME FROM student WHERE SSEX=sexGO【例】使用查詢給變量賦值。DECLARE student char(8)SET student=(SELECT SNAME

13、FROM student WHERE SNO=200215121)SELECT studentGO 用SELECT語句賦值語法格式:SELECT local_variable=expression ,n全局變量全局變量:用兩個 標識,由 SQL Server 提供,用戶不能創(chuàng)建全局變量設置變量提供 SQL Server 當前各種特性和參數(shù)的設置信息統(tǒng)計變量提供 SQL Server 自啟動后的運行信息系統(tǒng)變量提供最近對表操作的信息一些常用的全局變量:CONNECTIONS:返回自上次啟動SQL Server以來連接或試圖連接的次數(shù)。MAX_CONNECTIONS:返回SQL Server上允許

14、的同時用戶連接的最大數(shù)。ERROR:返回最后執(zhí)行的 T-SQL 語句的錯誤代碼。TRANCOUNT:返回當前連接的活動事務數(shù)。VERSION:返回 SQL Server 當前安裝的日期、版本和處理器類型。SERVERNAME:返回運行 SQL Server 的本地服務器名稱。SERVICENAME:返回 SQL Server 正在其下運行的注冊表鍵名。若當前實例為默認實例,則 返回MSSQLServer;若當前實例是命名實例,則該函數(shù)返回實例名。SPID:返回當前用戶進程的服務器進程標識符 (ID)。ROWCOUNT:返回受上一語句影響的行數(shù)。NESTLEVEL:返回當前存儲過程執(zhí)行的嵌套層次

15、(初始值為0)。LANGUAGE:返回當前使用的語言名。OPTIONS:返回當前 SET 選項的信息。CPU_BUSY:返回自上次啟動 SQL Server 以來 CPU 的工作時間,單位為毫秒(基于系統(tǒng)計時器的分辨率)。IDLE:返回 SQL Server 自上次啟動后閑置的時間,單位為毫秒(基于系統(tǒng)計時器的分辨率)。IDENTITY:返回最后插入的標識值。INSERT INTO jobs (job_desc,min_lvl,max_lvl) VALUES (Accountant,12,125) SELECT IDENTITY AS Identity 使用全局變量時應該注意以下幾點:全局變量

16、不是由用戶的程序定義的,它們是在服務器級定義的。用戶只能使用預先定義的全局變量。引用全局變量時,必須以“”開頭。局部變量的名稱不能與全局變量的名稱相同,否則會在應用程序中出現(xiàn)不可預測的結(jié)果。 七、函數(shù)在Transact-SQL語言中,函數(shù)被用來執(zhí)行一些特殊的運算以支持SQL Server的標準命令。Transact-SQL 編程語言提供了三種函數(shù): 行集函數(shù):行集函數(shù)可以在Transact-SQL語句中當作表引用。 聚合函數(shù):聚合函數(shù)用于對一組值執(zhí)行計算并返回一個單一的值。 標量函數(shù):標量函數(shù)用于對傳遞給它的一個或者多個參數(shù)值進行處理和計算,并返回一個單一的值。 系統(tǒng)函數(shù)聚集函數(shù)標量函數(shù)行集函

17、數(shù)SELECT * FROM OPENQUERY (OracleSvr, SELECT name, id FROM owner.titles) USE northwindSELECT AVG (unitprice) AS AvgPrice FROM productsGOUSE northwindSELECT DB_NAME() AS databaseGOSQL Server中最常用的幾種函數(shù) 字符串函數(shù)日期和時間函數(shù)數(shù)學函數(shù)轉(zhuǎn)換函數(shù)系統(tǒng)函數(shù)聚合函數(shù)用戶自定義函數(shù) 1 字符串函數(shù)字符串函數(shù)可以對二進制數(shù)據(jù)、字符串和表達式執(zhí)行不同的運算,大多數(shù)字符串函數(shù)只能用于char和varchar數(shù)據(jù)類型以及

18、明確轉(zhuǎn)換成char和varchar的數(shù)據(jù)類型,少數(shù)幾個字符串函數(shù)也可以用于binary和varbinary數(shù)據(jù)類型。此外,某些字符串函數(shù)還能夠處理text、ntext、image數(shù)據(jù)類型的數(shù)據(jù)。 字符串函數(shù)的分類:基本字符串函數(shù):UPPER、LOWER、SPACE、REPLICATE、STUFF、REVERSE、LTRIM、RTRIM。字符串查找函數(shù):CHARINDEX、PATINDEX。長度和分析函數(shù):DATALENGTH、 RIGHT 、SUBSTRING。轉(zhuǎn)換函數(shù):ASCH、CHAR、STR、SOUNDEX 、 DIFFERENCE。 1.Upper功能:返回將小寫字符數(shù)據(jù)轉(zhuǎn)換為大寫的字

19、符表達式。 語法: UPPER(character_expression)其中, character_expression 由字符數(shù)據(jù)組成的表達式??梢允浅A?、變量,也可以 是字符或二進制數(shù)據(jù)的列,它的返回類型為varchar。2.Lower功能:將大寫字符數(shù)據(jù)轉(zhuǎn)換為小寫的字符表達式。 語法:LOWER(character_expression)其中, character_expression是字符或二進制數(shù)據(jù)表達式。character_expression 可以是常量、變量或列。Upper()和Lower()函數(shù)舉例USE pubsGOSELECT lower(SubString(title

20、,1,20) AS 書名小寫, upper(Substring(title, 1, 20) AS 書名大寫, LOWER(UPPER(SUBSTRING(title, 1, 20) As LowerUpperFROM titlesWHERE price between 11.00 and 20.00USE pubs GO SELECT RTRIM(au_lname) + , + SPACE(5) + LTRIM(au_fname) FROM authors ORDER BY au_lname, au_fname GO 3.Space功能:返回由重復的空格組成的字符串。 語法 :SPACE (i

21、nteger_expression ) integer_expression是表示空格個數(shù)的正整數(shù)。如果 integer_expression 為負,則返回空字符串。舉例:DECLARE string_to_trim varchar(60)SET string_to_trim = 前面有五個空格SELECT 現(xiàn)在沒有空格: + LTRIM(string_to_trim) GO4.Ltrim()功能:刪除起始空格后返回字符表達式。 語法 :LTrim(character_expression ) character_expression是字符或二進制數(shù)據(jù)表達式。 舉例:DECLARE strin

22、g_to_trim varchar(60)SET string_to_trim = 后面有四個空格 SELECT 現(xiàn)在沒有空格: + CHAR(13) + RTRIM(string_to_trim)GO 5.RTrim功能:截斷所有尾隨空格后返回一個字符串。 語法 :RTrim (character_expression ) character_expression是字符或二進制數(shù)據(jù)表達式。SELECT STUFF(abcdef, 2, 3, ijklmn) GO6. STUFF功能:刪除指定長度的字符并在指定的起始點插入另一組字符。 語法 :STUFF ( character_express

23、ion , start , length , character_expression ) character_expression 由字符數(shù)據(jù)組成的表達式 Start 是一個整型值,指定刪除和插入的開始位置。 Length 是一個整數(shù),指定要刪除的字符數(shù)。7.REVERSE功能:返回字符表達式的反轉(zhuǎn)。 語法 :REVERSE ( character_expression ) 舉例:select Reverse(abcd)舉例:USE pubs GO SELECT length = DATALENGTH(pub_name), pub_name FROM publishers ORDER BY

24、pub_name GO select datalength(abcd )8.DATALENGTH功能:返回任何表達式所占字節(jié)數(shù)。語法 :DATALENGTH(expression) expression是任何類型的表達式 。9.SubString功能:返回字符、binary、text 或 image 表達式的一部分。 語法 :SUBSTRING ( expression , start , length ) expression是字符串、二進制字符串、text、image列或包含列的表達式。不要使用包含聚合函數(shù)的表達式。Start 是一個整數(shù),指定子串的開始位置。Length 是一個整數(shù),指定

25、子串的長度(要返回的字符數(shù)或字節(jié)數(shù))。舉例:(1)在字符串上使用 SUBSTRING USE pubs SELECT au_lname, SUBSTRING(au_fname, 1, 1) FROM authors ORDER BY au_lname (2)在text、ntext和image數(shù)據(jù)上使用SUBSTRING USE pubs SELECT pub_id, SUBSTRING(logo, 1, 10) AS logo, SUBSTRING(pr_info, 1, 10) AS pr_info FROM pub_info WHERE pub_id = 1756 SELECT SUBST

26、RING(abcdefgh, 1, 5) 10.STR功能:由數(shù)字數(shù)據(jù)轉(zhuǎn)換來的字符數(shù)據(jù)。 語法: STR(float_expression,length,decimal)float_expression 是帶小數(shù)點的近似數(shù)字 (float) 數(shù)據(jù)類型的表達式。不要在 STR 函數(shù)中將函數(shù)或子查詢用作 float_expression。 Length 是總長度,包括小數(shù)點、符號、數(shù)字或空格。默認值為 10。Decimal 是小數(shù)點右邊的位數(shù)。舉例:(1). SELECT STR(123.45, 6, 1) (2). SELECT STR(123.45, 2, 2) 注意:當表達式超出指定長度時返

27、回*11. LEFT功能:返回從字符串左邊開始指定個數(shù)的字符 。 語法 :LEFT ( charexpression ,intexpression ) 。Charexpression字符或二進制數(shù)據(jù)表達式, 可以是常量、變量或列。intexpression是正整數(shù),如果為負,則返回空字符串。舉例:(1) select left(abc123,5)(2) USE pubs GO SELECT LEFT(title, 5) FROM titles ORDER BY title_id GO2 日期和時間函數(shù)日期和時間函數(shù)用于對日期和時間數(shù)據(jù)進行各種不同的處理和運算,并返回一個字符串、數(shù)字值或日期和時

28、間值。在SQL Server2000中,日期和時間函數(shù)的類型如表所示。表日期和時間函數(shù)的類型函數(shù)參數(shù)DATEADD( datepart , number, date )DATEDIFF( datepart , date1 , date2 )DATENAME( datepart , date )DATEPART( datepart , date )DAY( date )GETDATE()MONTH( date )YEAR( date )1. GetDate()功能:返回當前系統(tǒng)日期和時間 。 語法 :GETDATE ( ) 舉例: select GetDate() as 當前日期和時間2. Da

29、y()功能:返回代表指定日期的天的日期部分的整數(shù) 。 語法 :DAY ( date ) 舉例: select day(GetDate() as 當前日 select day(2004/09/28)注意:常量字符串加 3. Month()功能:返回代表指定日期月份的整數(shù) 。 語法 : Month( date ) 舉例: select Month(GetDate() as 當前月 select Month(2004/09/28)注意:常量字符串加 4. Year()功能:返回代表指定日期年份的整數(shù) 。語法 : Year( date ) 舉例: select Year(GetDate() as 當前

30、年份 select Year(2004/09/28)5. Dateadd()功能:返回一個日期加上一個指定時間間隔數(shù)后時間SELECT dateadd(year,1,getdate() 6.Datediff()功能:返回兩個指定日期間時間間隔 Select datediff(y,2006-1-1,getdate()7.datename()功能:返回指定日期的指定部分的字符串形式表示Select datename(year,getdate()8.datepart()功能:返回指定日期的指定部分的整數(shù)形式表示3 數(shù)學函數(shù)數(shù)學函數(shù)用于對數(shù)字表達式進行數(shù)學運算并返回運算結(jié)果。數(shù)學函數(shù)可以對SQL Se

31、rver提供的數(shù)字數(shù)據(jù)(decimal、integer、float、real、money、smallmoney、smallint 和 tinyint)進行處理。 1.Floor()功能:返回小于或等于所給數(shù)字表達式的最大整數(shù) 。 語法 : FLOOR (numeric_expression) 舉例: SELECT FLOOR(123.45), FLOOR(-123.45), FLOOR($123.45)2. Round()功能:返回數(shù)字表達式并四舍五入為指定的長度或精度 。 語法: ROUND(numeric_expression,length,function ) 舉例: SELECT RO

32、UND(123.9994, 3), ROUND(123.9995, 3) 3.power()功能:返回給定表達式乘指定次方的值。語法 : POWER ( numeric_expression , y ) 舉例: select power(3,2)4. rand()功能:返回 0 到1 之間的隨機float 值。語法 : rand (seed) 舉例: select rand( )4 轉(zhuǎn)換函數(shù) 一般情況下,SQL Server會自動處理某些數(shù)據(jù)類型的轉(zhuǎn)換。例如,如果比較 char 和 datetime 表達式、smallint 和 int 表達式、或不同長度的 char 表達式,SQL Serv

33、er 可以將它們自動轉(zhuǎn)換,這種轉(zhuǎn)換被稱為隱性轉(zhuǎn)換。但是,無法由SQL Server自動轉(zhuǎn)換的或者是SQL Server自動轉(zhuǎn)換的結(jié)果不符合預期結(jié)果的,就需要使用轉(zhuǎn)換函數(shù)做顯示轉(zhuǎn)換。轉(zhuǎn)換函數(shù)有兩個:CONVERT和CAST。CONVERT和CAST函數(shù)將某種數(shù)據(jù)類型的表達式顯式轉(zhuǎn)換為另一種數(shù)據(jù)類型。CAST和CONVERT提供相似的功能。語法CAST(expression AS data_type) CONVERT(data_type(length),expression)舉例USE pubsSELECT title, ytd_salesFROM titlesWHERE CAST(ytd_sal

34、es AS char(20) LIKE 15% AND type = trad_cookUSE pubs GOSELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales FROM titles WHERE CONVERT(char(20), ytd_sales) LIKE 3% GO 5 聚合函數(shù)主要包括AVG,COUNT,MAX,MIN,SUM等。聚合函數(shù)對一組值執(zhí)行計算并返回單一的值。除COUNT函數(shù)之外,聚合函數(shù)忽略空值。聚合函數(shù)經(jīng)常與SELECT語句的GROUP BY子句一同使用。舉例USE pubs GO - Aggregate functi

35、ons SELECT type, SUM(price), SUM(advance) FROM titles WHERE type LIKE %cook GROUP BY type ORDER BY type GO 6 用戶自定義函數(shù)內(nèi)置函數(shù)。用戶自定義函數(shù)的可帶參數(shù),也可不帶,但數(shù)據(jù)類型不能是時間戳(timestamp)、游標(cursor)和表(table)。1.函數(shù)定義利用create function語句創(chuàng)建函數(shù)。2.函數(shù)調(diào)用函數(shù)調(diào)用形式:所有者名.函數(shù)名(實參1,實參n)3.用戶函數(shù)的刪除利用drop function語句進行函數(shù)的刪除。八、運算符運算符類別 所包含運算符 賦值運算符

36、=(賦值) 算術運算符 +(加)、-(減)、*(乖)、/(除)、%(取模)按位運算符 &(位與)、|(位或)、(位異或)字符串串聯(lián)運算符 (連接)比較運算符 =(等于)、(大于)、=(大于等于)、(小于)、=(小于等于)、( 或!=不等于)、!(不大于)邏輯運算符all(所有)、and(與)、any(任意一個)、between(兩者之間)、exists(存在)、in(在范圍內(nèi))、like(匹配)、not(非)、or(或)、some(任意一個)一元運算符、+(正)、-(負)、(取反)九、表達式各種符號和運算符的組合對單個數(shù)據(jù)進行操作表達式結(jié)果的數(shù)據(jù)類型由表達式中的成員決定USE northwin

37、dSELECT OrderID, ProductID ,(UnitPrice * Quantity) as ExtendedAmount FROM Order Details WHERE (UnitPrice * Quantity) 10000GO 示例十、流控制的語言元素語句級:流程控制語句是指那些用來控制程序執(zhí)行和流程分支的命令,在SQL Server 2000中,流程控制語句主要用來控制SQL語句、語句塊或者存儲過程的執(zhí)行流程。 go、print、executeBEGIN END塊IF ELSE 無條件轉(zhuǎn)移GOTOWHILE 、break、continueReturnWaitforTry

38、。catch行級CASE 語句Go語句:是批處理的結(jié)束語句。批處理是一起提交并作為一個組執(zhí)行的若干sql語句Print語句:向客戶端返回用戶定義的消息 print getdate()Execute:用于執(zhí)行transact-sql批中的命令字符串、字符串或執(zhí)行下列模塊之一:系統(tǒng)存儲過程、用戶定義存儲過程、標量值用戶定義函數(shù)或擴展存儲過程。Sqlserver2005擴展了execute語句,以使其可用于向鏈接服務器發(fā)送傳遞命令Execute sp_helpIFELSE語句 IFELSE語句是條件判斷語句,其中,ELSE子句是可選的,最簡單的IF語句沒有ELSE子句部分。IFELSE語句用來判斷當

39、某一條件成立時執(zhí)行某段程序,條件不成立時執(zhí)行另一段程序。SQL Server允許嵌套使用IFELSE語句,而且嵌套層數(shù)沒有限制。 IFELSE語句的語法形式IF Boolean_expression sql_statement | statement_block ELSE sql_statement | statement_block 例:下面的示例顯示帶有語句塊的 IF 條件。如果書的平均價格不低于 $15,那么就顯示文本:平均價格超過$15.USE pubs GOIF (SELECT AVG(price) FROM titles WHERE type = mod_cook) $15 BEG

40、IN PRINT 以下是現(xiàn)代烹調(diào)類的書籍 : PRINT SELECT SUBSTRING(title, 1, 35) AS Title FROM titles WHERE type = mod_cook END ELSE PRINT 平均價格超過$15. IFELSE語句在實際程序中,IFELSE語句中不止包含一條語句,而是一組的SQL語句。為了可以一次執(zhí)行一組SQL語句,這時就需要使用BEGINEND語句將多條語句封閉起來。其語法格式為:BEGIN sql_statement| statement_block END GOTO語句 GOTO語句可以使程序直接跳到指定的標有標識符的位置處繼續(xù)

41、執(zhí)行,而位于GOTO語句和標識符之間的程序?qū)⒉粫粓?zhí)行。GOTO語句和標識符可以用在語句塊、批處理和存儲過程中,標識符可以為數(shù)字與字符的組合,但必須以“:”結(jié)尾。 GOTO語句的語法形式定義標簽:label : 改變執(zhí)行:GOTO label 無條件轉(zhuǎn)移(goto)-從sc表中取得sno為“200215121”記錄個數(shù)Declare maxcounter int,counter intSelect maxcounter=count(*),counter=1From scWhere sno=200215121Loop:If countermaxcounterBegin select counte

42、r set counter=counter+1 goto loopendWHILE.CONTINUE.BREAK語句 WHILECONTINUEBREAK語句用于設置重復執(zhí)行 SQL 語句或語句塊的條件。只要指定的條件為真,就重復執(zhí)行語句。其中,CONTINUE語句可以使程序跳過CONTINUE語句后面的語句,回到WHILE循環(huán)的第一行命令。BREAK語句則使程序完全跳出循環(huán),結(jié)束WHILE語句的執(zhí)行。 WHILE Boolean_expression sql_statement | statement_block BREAK sql_statement | statement_block C

43、ONTINUE 例:一個小循環(huán)程序DECLARE X intSET X=0WHILE x3 BEGIN SET x=X+1 PRINT x=+convert(char(1),x) -類型轉(zhuǎn)換函數(shù)convert ENDGO執(zhí)行結(jié)果:x=1x=2x=3【例】利用循環(huán)計算1+2+3+99+100的值。在查詢分析器中運行如下命令:DECLARE sum int , i intSET sum = 0SET i = 1WHILE i=20 and sj=14 and sj=12 and sj=10 and sj=0 and sj 0) BEGIN SELECT n AS Number,CASE WHEN

44、(n%2)=1 THEN ODD ELSE EVEN END AS Type SET n = n - 1 END ENDELSE PRINT NO ANALYSISGO CASE 的派生函數(shù)COALESCE 返回表達式列表中第一個非 NULL 表達式NULLIF 如果兩個表達式相等返回 NULL,否則返回第一個表達式ISNULL 如果第一個表達式為非 NULL,返回第一個表達式,否則返回第二個表達式COALECSE(表達式1,表達式2,表達式n)NULLIF(表達式1,表達式2)ISNULL(表達式1,表達式2)十一、游標的使用什么是游標游標是取用一組數(shù)據(jù)并能夠一次與一個單獨的記錄進行交互的方

45、法。SQL是面向集合的,行集是由SQL產(chǎn)生或處理的多條記錄的集合。有時,確實不能通過在整個行集中修改或者甚至選取數(shù)據(jù)來獲得所需要的結(jié)果,需要逐一處理這些行。游標的使用需要不止一個語句。主要的部分有:聲明;打開;使用或?qū)Ш?;關閉;釋放。聲明游標的基本語法如下所示:DECLARE CURSORFOR 游標名除了不需要“”前綴外,與任何其他變量名一樣,游標名必須服從SQL Server命名規(guī)范。SELECT語句可以是任何有效的返回結(jié)果集的SELECT語句。要注意,一些結(jié)果集是不可更新的。只聲明游標是不夠的,我們還必須打開它:OPEN 會執(zhí)行作為FOR子句對象的查詢,但是在我們能夠使用的地方,依然沒有

46、任何東西。必須進行如下的兩件事情:獲取(或FETCH)第一條記錄;有必要的話,循環(huán),獲取其余的記錄。發(fā)出第一個FETCH這是一個表明要檢索特定記錄的命令。另外,還必須說明想要把值放置在哪一個變量中。FETCH NEXT FROM 游標名稱 INTO 變量名1,變量名2,變量名3,.現(xiàn)在,有了第一條記錄,接下來,我們可以執(zhí)行游標集上的操作:WHILE FETCH_STATUS=0BEGINSQL語句執(zhí)行過程. .FETCH NEXT FROM 游標名稱 INTO 變量名1,變量名2,變量名3,.END每當提取一行時,就會更新FETCH_STATUS以告知我們提取進行得如何。其可能的值是:0 Fe

47、tch語句成功一切正常;-1 Fetch語句失敗找不到記錄(還沒有到達游標的末尾,但自打開游標以后,記錄已經(jīng)被刪除),很快將在本章后面做進一步的討論;-2 Fetch語句失敗這一次是由于已經(jīng)超出了游標中的最后一條(或者第一條)記錄,同樣,在本章的后面將更詳細地討論。根據(jù)這里的目的可知,一旦退出循環(huán),說明我們已經(jīng)完成了對游標的使用,因此,關閉游標:CLOSE 游標名稱然而,關閉游標并沒有釋放與游標相關聯(lián)的內(nèi)存。關閉游標只是釋放了與游標相關聯(lián)的鎖。為了確保完全釋放游標使用的所有資源,必須釋放游標:DEALLOCATE 游標名稱使用游標-游標一般格式:DECLARE 游標名稱CURSOR FOR S

48、ELECT 字段,字段,字段,. FROM 表名WHERE .OPEN 游標名稱FETCH NEXT FROM 游標名稱INTO 變量名,變量名,變量名,.WHILE FETCH_STATUS=0BEGINSQL語句執(zhí)行過程. .FETCH NEXT FROM 游標名稱INTO 變量名,變量名,變量名,.ENDCLOSE 游標名稱DEALLOCATE 游標名稱-使用游標打印輸出學生學號DECLARE XH VARCHAR(10)DECLARE STUCUR CURSOR FOR SELECT SNO FROM STUDENT OPEN STUCURFETCH NEXT FROM STUCUR INTO XHWHILE FETCH_STATUS=0 BEGIN PRINT XH FETCH NEXT FROM STUCUR INTO XHENDCLOSE STUCURDEALLOCATE STUCUR要求用游標實現(xiàn)功能:數(shù)據(jù)庫表格tbl_users數(shù)據(jù)deptid u

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論