T-SQL程序設(shè)計_第1頁
T-SQL程序設(shè)計_第2頁
T-SQL程序設(shè)計_第3頁
T-SQL程序設(shè)計_第4頁
T-SQL程序設(shè)計_第5頁
已閱讀5頁,還剩35頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Version 3.0T-SQL程序設(shè)計程序設(shè)計數(shù)據(jù)庫設(shè)計的概念數(shù)據(jù)庫設(shè)計的概念數(shù)據(jù)模型數(shù)據(jù)模型實體關(guān)系模型實體關(guān)系模型數(shù)據(jù)規(guī)范化數(shù)據(jù)規(guī)范化理解批和批處理的概念理解批和批處理的概念編寫編寫 SQL 邏輯控制語句來表示應(yīng)用邏輯邏輯控制語句來表示應(yīng)用邏輯變量的定義與賦值變量的定義與賦值使用使用 SQL Server 基本函數(shù)編寫基本函數(shù)編寫 SQL 語句語句在查詢語句中使用基本函數(shù)在查詢語句中使用基本函數(shù)批處理批處理單個單個 SQL 命令命令組成一批組成一批作為單個作為單個執(zhí)行計劃執(zhí)行計劃進行編譯進行編譯輸出結(jié)果輸出結(jié)果 以一次執(zhí)行一批命令中的一條命以一次執(zhí)行一批命令中的一條命令的方式處理一組命令

2、的過程被令的方式處理一組命令的過程被稱為稱為 批處理批處理Use Pubs Select * from authors Update authors set phone= 890 451-7366 where au_lname= White Go 標(biāo)志著批處理的結(jié)束標(biāo)志著批處理的結(jié)束注釋常用來記錄程序名稱、作者名稱以及注釋常用來記錄程序名稱、作者名稱以及對代碼進行重要修改的日期。對代碼進行重要修改的日期。注釋可以用于建立代碼文檔,或者暫時禁注釋可以用于建立代碼文檔,或者暫時禁用正在診斷的部分用正在診斷的部分 T-SQL 語句和批處理。語句和批處理。注釋可以用來描述復(fù)雜的計算或用來解釋注釋可以用

3、來描述復(fù)雜的計算或用來解釋程序設(shè)計的方法。程序設(shè)計的方法。SQL Server 支持下列兩種類型的注釋方式支持下列兩種類型的注釋方式:1)-(雙連字符)雙連字符) 例如:例如: USE Northwind GO - 單行注釋單行注釋2)/* . */(正斜線(正斜線 - - 星號字符對)星號字符對) 例如:例如: SELECT * FROM Employees /* 這是注釋這是注釋 */ /* */ 多行注釋不能跨批處理。完整的注釋必多行注釋不能跨批處理。完整的注釋必須包含在一個批處理中。須包含在一個批處理中。例如,在例如,在 SQL 查詢分析器中,查詢分析器中,GO 命令標(biāo)志命令標(biāo)志著批處

4、理的結(jié)束。當(dāng)實用工具在一行的前著批處理的結(jié)束。當(dāng)實用工具在一行的前兩個字節(jié)中讀取到字符兩個字節(jié)中讀取到字符 GO 時,就會將從上時,就會將從上一個一個 GO 命令至該行前的所有代碼作為一個命令至該行前的所有代碼作為一個批處理發(fā)送到服務(wù)器批處理發(fā)送到服務(wù)器。 順序執(zhí)行順序執(zhí)行程序程序控制語句控制語句順序執(zhí)行順序執(zhí)行流程改變流程改變程序程序控制關(guān)鍵字控制關(guān)鍵字目的目的BEGINEND創(chuàng)建語句塊。創(chuàng)建語句塊。GOTO label將流程轉(zhuǎn)到指定標(biāo)簽。將流程轉(zhuǎn)到指定標(biāo)簽。IFELSE根據(jù)指定條件執(zhí)行不同的幾組語句。根據(jù)指定條件執(zhí)行不同的幾組語句。WHILE當(dāng)指定條件為當(dāng)指定條件為 TRUE TRUE 時

5、重復(fù)執(zhí)行語句。時重復(fù)執(zhí)行語句。BREAK中止執(zhí)行流并跳出當(dāng)前的中止執(zhí)行流并跳出當(dāng)前的 WHILE WHILE 循環(huán)。循環(huán)。CONTINUE重新執(zhí)行重新執(zhí)行 WHILE WHILE 循環(huán)。循環(huán)。WAITFOR設(shè)置語句執(zhí)行延遲的時間。設(shè)置語句執(zhí)行延遲的時間。RETURN無條件退出。無條件退出。 BEGIN.END:一組要執(zhí)行的一組要執(zhí)行的 T-SQL 語句可以包含在語句可以包含在 BEGIN.END 中。中。 語法:語法: 其中其中,statement 為語句,為語句,statement_block 為語為語句塊。句塊。BEGIN statement | statement_block END I

6、F.ELSE:可以根據(jù)指定的條件來執(zhí)行不同的可以根據(jù)指定的條件來執(zhí)行不同的 SQL 語句。語句。 語法:語法:其中其中,Boolean_expression 為布爾表達(dá)式,為布爾表達(dá)式,sql_statement 為為 SQL 語句,語句, statement_block 為語為語句塊。句塊。IF Boolean_expression sql_statement|statement_block ELSE sql_statement|statement_block IF SELECT COUNT(ORDERID) FROM ORDERS)1 BEGIN GOTO X END ELSE BEGIN

7、 SELECT * FROM CUSTOMERS ENDSELECT * FROM ORDERSX:SELECT * FROM SHIPPERS WHILE:可以根據(jù)某些條件來執(zhí)行一條可以根據(jù)某些條件來執(zhí)行一條 SQL 語語句或一組語句。只要指定的條件為真,則重復(fù)句或一組語句。只要指定的條件為真,則重復(fù)執(zhí)行該語句。執(zhí)行該語句。 語法:語法:其中,其中,Boolean_expression 為布爾表達(dá)式,為布爾表達(dá)式, statement 為語句,為語句,statement_block 為語句塊。為語句塊。WHILE Boolean_expression statement | statemen

8、t_block BREAK statement | statement_block CONTINUE 可以在可以在 While 循環(huán)中使用循環(huán)中使用 CONTINUE 和和 BREAK 關(guān)鍵字來控制語句的執(zhí)行。關(guān)鍵字來控制語句的執(zhí)行。USE pubs GO WHILE (SELECT AVG(price) FROM titles) $50 BREAK ELSE CONTINUE END PRINT 價格太高,市場無法承受價格太高,市場無法承受GOTO:可以將執(zhí)行流程改變到由標(biāo)簽指定的位置。可以將執(zhí)行流程改變到由標(biāo)簽指定的位置。系統(tǒng)跳過系統(tǒng)跳過 GOTO 關(guān)鍵字之后的語句,并在關(guān)鍵字之后的語句,

9、并在 GOTO 語語句中指定的標(biāo)簽處繼續(xù)執(zhí)行操作。句中指定的標(biāo)簽處繼續(xù)執(zhí)行操作。語法:語法:其中其中 label 是標(biāo)簽是標(biāo)簽GOTO labelRETURN:可以在任意位置使用可以在任意位置使用 RETURN 從語句塊或從語句塊或過程中退出。系統(tǒng)將不會執(zhí)行過程中退出。系統(tǒng)將不會執(zhí)行 RETURN 語句之后的語句之后的語句。語句。語法:語法:RETURN integer_expression其中其中 integer_expression 是值為整數(shù)的表達(dá)式。是值為整數(shù)的表達(dá)式。 如果平均價格少于如果平均價格少于 $30 $30,將價格加倍,然后,將價格加倍,然后選擇最高價。如果最高價少于或等于

10、選擇最高價。如果最高價少于或等于 $50 $50,再次將價格加倍。該循環(huán)不斷地將價格加再次將價格加倍。該循環(huán)不斷地將價格加倍直到最高價格超過倍直到最高價格超過 $50 $50,然后退出。,然后退出。 (價格(價格priceprice,表名表名titlestitles) WHILE (SELECT AVG(price) FROM titles) $30BEGIN WHILE (SELECT AVG(price) FROM titles) $50 BREAK IF (SELECT MAX(price) FROM titles) $50 BREAK ELSE ELSE CONTINUECONTINU

11、E ENDEND CASE:使用使用 CASE 關(guān)鍵字可以根據(jù)表達(dá)式是否為真關(guān)鍵字可以根據(jù)表達(dá)式是否為真來返回一個值。該關(guān)鍵字可用于允許使用表達(dá)式的來返回一個值。該關(guān)鍵字可用于允許使用表達(dá)式的任何地方。任何地方。語法:語法:CASE expressionWHEN expression1 THEN expression1WHEN expression2 THEN expression2 ELSE expression END其中其中 expression 為表達(dá)式。為表達(dá)式。SELECT au_fname, au_lname, CASE state WHEN OR THEN Oregon END

12、 AS StateName FROM authors 示例:示例: 下面示例在查詢結(jié)果集內(nèi)顯示每個作者所居住州下面示例在查詢結(jié)果集內(nèi)顯示每個作者所居住州的全名:的全名: SELECT au_fname, au_lname,SELECT au_fname, au_lname, CASE state CASE state WHEN CA THEN California WHEN CA THEN California WHEN TN THEN Tennessee WHEN TN THEN Tennessee WHEN OR THEN Oregon WHEN OR THEN Oregon END AS

13、 StateName END AS StateName FROM authors FROM authors ORDER BY au_lname ORDER BY au_lname UPDATE publishers SET state = CASE WHEN country USA THEN - ELSE state END, city = CASE WHEN pub_id = 9999 THEN LYON ELSE city END WHERE country USA OR pub_id = 9999 以這種方式以這種方式可以用一個可以用一個命令更新兩命令更新兩個或多個列個或多個列 例例4-

14、10 調(diào)整員工工資工作級別為調(diào)整員工工資工作級別為1 的上調(diào)的上調(diào)8% 工作工作級別為級別為2 的上調(diào)的上調(diào)7% 工作級別為工作級別為3 的上調(diào)的上調(diào)6% 其它上調(diào)其它上調(diào)5% use pangu update employee set e_wage = case when job_level = 1 then e_wage*1.08 when job_level = 2 then e_wage*1.07 when job_level = 3 then e_wage*1.06 else e_wage*1.05end 已知學(xué)生成績表:已知學(xué)生成績表: 姓名姓名 數(shù)學(xué)數(shù)學(xué) 英語英語 語文語文 張三

15、張三 50 80 70 李四李四 80 68 82 黃六黃六 85 78 90 需要得出結(jié)果集:需要得出結(jié)果集: 姓名姓名 最大分?jǐn)?shù)最大分?jǐn)?shù) 最小分?jǐn)?shù)最小分?jǐn)?shù) 平均分?jǐn)?shù)平均分?jǐn)?shù) 張三張三 80(英語)(英語) 50(數(shù)學(xué))(數(shù)學(xué))66.67 李四李四 82 68 76.67 黃六黃六 90 78 84.33Select姓名姓名, 最大分?jǐn)?shù)最大分?jǐn)?shù)= case when 數(shù)學(xué)數(shù)學(xué)英語英語 and 數(shù)學(xué)數(shù)學(xué)語文語文 then cast(數(shù)學(xué)數(shù)學(xué) as varchar)+(數(shù)學(xué)數(shù)學(xué))when 英語英語數(shù)學(xué)數(shù)學(xué) and 英語英語語文語文 then cast(英語英語 as varchar)+(英語英語

16、)else cast(語文語文 as varchar)+(語文語文) end, 最小分?jǐn)?shù)最小分?jǐn)?shù)=case when 數(shù)學(xué)數(shù)學(xué)英語英語 and 數(shù)學(xué)數(shù)學(xué)語文語文 then cast(數(shù)學(xué)數(shù)學(xué) as varchar)+(數(shù)學(xué)數(shù)學(xué)) when 英語英語數(shù)學(xué)數(shù)學(xué) and 英語英語語文語文 then cast(英語英語 as varchar)+(英語英語) else cast(語文語文 as varchar)+(語文語文) end, 平均分?jǐn)?shù)平均分?jǐn)?shù)=cast(數(shù)學(xué)數(shù)學(xué)+英語英語+語文語文)/3.0 as numeric(10,2)From 學(xué)生成績表學(xué)生成績表SQL Server 在在 T-SQL

17、中支持下列兩種類中支持下列兩種類型的變量型的變量 全局變量全局變量局部變量局部變量SQL Server 中的全局變量都用兩個中的全局變量都用兩個 標(biāo)記作標(biāo)記作為前綴。可以使用簡單的為前綴。可以使用簡單的 SELECT 查詢語句檢查詢語句檢索任意全局變量的值。索任意全局變量的值。SELECT VERSIONAS SQL_SERVER_VERSION_DETAILS變量變量含義含義connections自服務(wù)器上次啟動以來,已創(chuàng)建的自服務(wù)器上次啟動以來,已創(chuàng)建的連接數(shù)。連接數(shù)。CPU_BUSY自自 SQL Server SQL Server 啟動至今,系統(tǒng)持啟動至今,系統(tǒng)持續(xù)運行的毫秒數(shù)。續(xù)運行的

18、毫秒數(shù)。CURSOR_ROWS最近打開的游標(biāo)中的行數(shù)最近打開的游標(biāo)中的行數(shù)DATEFIRSTSET DATEFIRST SET DATEFIRST 參數(shù)的當(dāng)前值,該參數(shù)的當(dāng)前值,該參數(shù)用于設(shè)置一個星期的第一天為參數(shù)用于設(shè)置一個星期的第一天為哪一天。哪一天。ERROR最后一個最后一個 T-SQL T-SQL 錯誤的錯誤號錯誤的錯誤號FETCH_STATUS如果最后一次提取的狀態(tài)為成功狀如果最后一次提取的狀態(tài)為成功狀態(tài),則為態(tài),則為 0 0。如果出錯,則為。如果出錯,則為 -1 -1變量變量含義含義IDENTITY最后一次插入的標(biāo)識值最后一次插入的標(biāo)識值LANGUAGE當(dāng)前使用的語言的名稱當(dāng)前使用

19、的語言的名稱MAX_CONNECTIONS可以創(chuàng)建的同時連接的最大數(shù)可以創(chuàng)建的同時連接的最大數(shù)ROWCOUNT受上一個受上一個 SQL 語句影響的行數(shù)語句影響的行數(shù)SERVERNAME本地服務(wù)器的名稱本地服務(wù)器的名稱SERVICENAME該計算機上的該計算機上的 SQL 服務(wù)的名稱服務(wù)的名稱TIMETICKS當(dāng)前計算機上每指令周期的微秒數(shù)當(dāng)前計算機上每指令周期的微秒數(shù)TRANSCOUNT當(dāng)前連接打開的事務(wù)數(shù)當(dāng)前連接打開的事務(wù)數(shù)VERSIONSQL Server 的版本信息的版本信息變量是可以存儲數(shù)據(jù)值的對象變量是可以存儲數(shù)據(jù)值的對象使用局部變量可以將數(shù)據(jù)傳遞到使用局部變量可以將數(shù)據(jù)傳遞到 SQ

20、L 語句語句局部變量名必須以局部變量名必須以 為前綴為前綴SET 或或 SELECT 語句用于給局部變量賦值語句用于給局部變量賦值例如:例如:DECLARE cust VARCHAR(20)SET cust= FRANKSET 語句或語句或 SELECT 語句用于給局部變量賦值。語句用于給局部變量賦值。語法:語法:SET local_variable name = value 或或SELECT local_variable name = value其中其中 local_variable name 為局部變量名為局部變量名例如,為先前聲明的變量賦值:例如,為先前聲明的變量賦值:SET CUST=

21、FRANKSELECT CUSTOMERID,COMPANYNAMEFROM CUSTOMERSWHERE CUSTOMERID = CUSTDECLARE CUST VARCHAR(5)SET CUST=FRANKSELECT CUSTOMERID,COMPANYNAMEFROM CUSTOMERSWHERE CUSTOMERID = CUSTT-SQL 有三種類型的函數(shù)有三種類型的函數(shù): : 行集函數(shù)行集函數(shù) 聚合函數(shù)聚合函數(shù) 標(biāo)量函數(shù)標(biāo)量函數(shù)轉(zhuǎn)換函數(shù)用于將一種數(shù)據(jù)類型的值轉(zhuǎn)換為另一種類型的值。轉(zhuǎn)換函數(shù)用于將一種數(shù)據(jù)類型的值轉(zhuǎn)換為另一種類型的值。 另外,該函數(shù)還可以用于獲得各種特殊的日期格

22、式。另外,該函數(shù)還可以用于獲得各種特殊的日期格式。 SQL Server 提供了一個轉(zhuǎn)換函數(shù),即提供了一個轉(zhuǎn)換函數(shù),即 CONVERT( )。語法:語法:CONVERT(datatype(length),expression,style)其中其中 datatype 為數(shù)據(jù)類型,為數(shù)據(jù)類型,length 為數(shù)據(jù)長度,為數(shù)據(jù)長度,expression 為表達(dá)式,為表達(dá)式,style 為樣式。為樣式。SELECT EMP ID: + CONVERT (CHAR(4), EMPLOYEEID FROM EMPLOYEES 示例:示例:日期部分日期部分縮寫縮寫值值星期星期wk1-53星期幾星期幾dw1-7月月mm1-12季度季度qq1-4年年yy1753-9999日期函數(shù)日期函數(shù)GETDATE() DATEADD(datepart,number,date)DATEDIFF(datepart,date1,date2)DATENAME(datepart,date)DATEPART(datepart,date)數(shù)學(xué)函數(shù)數(shù)學(xué)函數(shù)ABS(num_expr)CEILING(num_e

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論