SQLServer2005數(shù)據(jù)庫應(yīng)用與開發(fā)教程 ch03 T-SQL 語言基礎(chǔ)_第1頁
SQLServer2005數(shù)據(jù)庫應(yīng)用與開發(fā)教程 ch03 T-SQL 語言基礎(chǔ)_第2頁
SQLServer2005數(shù)據(jù)庫應(yīng)用與開發(fā)教程 ch03 T-SQL 語言基礎(chǔ)_第3頁
SQLServer2005數(shù)據(jù)庫應(yīng)用與開發(fā)教程 ch03 T-SQL 語言基礎(chǔ)_第4頁
SQLServer2005數(shù)據(jù)庫應(yīng)用與開發(fā)教程 ch03 T-SQL 語言基礎(chǔ)_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章T-SQL語言基礎(chǔ)SqlServer2005數(shù)據(jù)庫應(yīng)用與開發(fā)教程

清華大學(xué)出版社教學(xué)目標(biāo)教學(xué)重點教學(xué)過程1/13/20231教學(xué)目標(biāo)了解T-SQL的發(fā)展過程和分類了解用戶定義的數(shù)據(jù)類型創(chuàng)建、修改、刪除和調(diào)用掌握T-SQL的流程控制語句的語法和使用方法掌握SQL-Server的系統(tǒng)函數(shù)的分類,及常用函數(shù)的用法掌握用戶自定義函數(shù)的方法1/13/20232教學(xué)重點了解用戶定義的數(shù)據(jù)類型創(chuàng)建、修改、刪除和調(diào)用掌握T-SQL的流程控制語句的使用,系統(tǒng)函數(shù)的分類及常用函數(shù)的用法掌握用戶自定義函數(shù)的方法1/13/20233教學(xué)過程T-SQL語言概述數(shù)據(jù)類型、常量和變量運算符和表達式流程控制語句

函數(shù)1/13/202343.1T-SQL語言概述

3.1.1T-SQL語言發(fā)展過程和分類SQL(StructureQueryLanguage)中文譯為“結(jié)構(gòu)化查詢語言”,最初在1974年由Boyce和Chambedin提出,稱為“SEQUEL”,是StructureEnglishQUEryLanguage的縮寫。1976年,SanJoseReserchLaboratory在研制關(guān)系型數(shù)據(jù)庫管理系統(tǒng)SystemR時,對其進行修改,并稱為“SEQUEL2”即當(dāng)前使用的SQL語言。1982年ANSI(AmericanNationStandardsInstiute,美國國家標(biāo)準(zhǔn)協(xié)會)確認(rèn)SQL為數(shù)據(jù)庫系統(tǒng)的工業(yè)標(biāo)準(zhǔn),即SQL-86,此后SQL的標(biāo)準(zhǔn)幾經(jīng)修改和完善。目前最新的SQL標(biāo)準(zhǔn)是2003年制定的ISO/IEC9075:2003,即SQL:2003(SQL4)。1/13/20235目前,不同的數(shù)據(jù)庫產(chǎn)品廠商在各自的數(shù)據(jù)庫系統(tǒng)中都支持SQL語言,但又在此標(biāo)準(zhǔn)基礎(chǔ)上針對各自的產(chǎn)品對SQL進行了不同的修改和擴充。例如Oracle的P/LSQL、Sybase的SQLAnywhere等。而T-SQL則是Microsoft針對其自身的數(shù)據(jù)庫產(chǎn)品SQLServer設(shè)計開發(fā)的并遵循SQL標(biāo)準(zhǔn)的結(jié)構(gòu)化查詢語言.1/13/20236T-SQL語言要素?數(shù)據(jù)定義語言(DDL,DataDefinitionLanguage):基本關(guān)系表、視圖、索引和完整性約束的定義、修改和刪除。?數(shù)據(jù)操縱語言(DML,Data

ManipularionLanguage):是指對已創(chuàng)建的數(shù)據(jù)庫對象中的數(shù)據(jù)表數(shù)據(jù)的添加、修改和刪除。?數(shù)據(jù)控制語言(DCL,DataControlLanguage):用來設(shè)置或者更改數(shù)據(jù)庫用戶或者角色權(quán)限。?系統(tǒng)存儲過程(SystemStoredProcedure):指系統(tǒng)中自帶的程序。?一些附加的語言元素。這部分是Microsoft為了用戶編程的方便而增加的語言要素。1/13/202373.1.2T-SQL語法約定1.語法書寫約定UPPERCASE(大寫)Transact-SQL關(guān)鍵字。|(豎線)分隔括號或大括號中的語法項。只能選擇其中一項[](方括號)可選語法項。不要鍵入方括號。{}(大括號)必選語法項。不要鍵入大括號。[,...n]指示前面的項可以重復(fù)n次。每一項由逗號分隔。[...n]指示前面的項可以重復(fù)n次。每一項由空格分隔。1/13/20238

[;]可選的Transact-SQL語句終止符。不要鍵入方括號。<label>::=語法塊的名稱。此約定用于對可在語句中的多個位置使用的過長語法段或語法單元進行分組和標(biāo)記??墒褂玫恼Z法塊的每個位置由括在尖括號內(nèi)的標(biāo)簽指示:<label>。1/13/20239典型的ERP系統(tǒng)定義(5/6)2.多部分名稱除非另外指定,否則,所有對數(shù)據(jù)庫對象名的Transact-SQL引用可以是由四部分組成的名稱,格式如下:[server_name.[database_name].[schema_name].|database_name.[schema_name].|schema_name.]object_name。1/13/202310server_name

:指定鏈接的服務(wù)器名稱或遠(yuǎn)程服務(wù)器名稱。database_name

:如果對象駐留在SQLServer的本地實例中,則指定SQLServer數(shù)據(jù)庫的名稱。如果對象在鏈接服務(wù)器中,則database_name

將指定OLEDB目錄。schema_name

:如果對象在SQLServer數(shù)據(jù)庫中,則指定包含對象的架構(gòu)的名稱。如果對象在鏈接服務(wù)器中,則schema_name

將指定OLEDB架構(gòu)名稱。object_name

:對象的名稱。引用某個特定對象時,不必總是指定服務(wù)器、數(shù)據(jù)庫和架構(gòu)供SQLServer2005數(shù)據(jù)庫引擎標(biāo)識該對象。但是,如果找不到對象,就會返回錯誤消息1/13/2023113.2數(shù)據(jù)類型、常量和變量

3.2.1數(shù)據(jù)類型1.系統(tǒng)的數(shù)據(jù)類型系統(tǒng)的數(shù)據(jù)類型是T-SQL內(nèi)部支持的固有的數(shù)據(jù)類型,有關(guān)數(shù)據(jù)類型的分類和說明在第2章已有詳細(xì)說明。2.用戶定義數(shù)據(jù)類型

T-SQL支持用戶自定義數(shù)據(jù)類型,用戶定義數(shù)據(jù)是在系統(tǒng)數(shù)據(jù)類型基礎(chǔ)上的擴充或限定。當(dāng)對多表操作時,這些表中的某些列要存儲同樣的數(shù)據(jù)類型,且對該數(shù)據(jù)類型有完全相同的基本類型(系統(tǒng)數(shù)據(jù)類型)、長度和是否為空的規(guī)則,這時用戶可以定義數(shù)據(jù)類型,并在定義表中的這些列時使用該數(shù)據(jù)類型。用戶定義數(shù)據(jù)類型的創(chuàng)建和刪除可以采用兩種方法。一種是圖形化的方法,在SQLServerManagementStudio中實現(xiàn)。另外一種是執(zhí)行命令的方法,即調(diào)用系統(tǒng)存儲過程實現(xiàn)。1/13/2023121.圖形化的方法創(chuàng)建和刪除用戶定義數(shù)據(jù)類型步驟如下(1)啟動SQLServerManagementStudio,并連接到服務(wù)器。(2)在SQLServerManagementStudio的對象資源管理器視圖中的樹型視圖中依次展開以下節(jié)點:數(shù)據(jù)庫/實例數(shù)據(jù)庫/可編程性/類型/用戶定義數(shù)據(jù)類型,在該項上右擊,彈出菜單中選擇“新建用戶定義數(shù)據(jù)類型”。(3)單擊“新建用戶定義數(shù)據(jù)類型”菜單,打開“新建用戶定義數(shù)據(jù)類型”窗口。在該窗口中填寫相關(guān)各項。(4)單擊“新建用戶定義數(shù)據(jù)類型”窗口的“確定”按鈕,回到SQLServerManagementStudio可以在對象資源管理器的數(shù)型視圖中查看到剛剛定義的數(shù)據(jù)類型。(5)在這種方式下也很容易刪除已經(jīng)存在的用戶定義數(shù)據(jù)類型,所示的數(shù)據(jù)類型“xuehao”項上點擊右鍵,在彈出菜單中選擇刪除即可。1/13/2023132.調(diào)用系統(tǒng)的存儲過程創(chuàng)建和刪除用戶定義數(shù)據(jù)類型在SQL-Server中還可以通過調(diào)用系統(tǒng)定義的存儲過程實現(xiàn)用戶定義數(shù)據(jù)類型的創(chuàng)建和刪除。創(chuàng)建用戶定義數(shù)據(jù)類型的創(chuàng)建語法格式如下:sp_addtype[@typename=]type,[@phystype=]system_data_type

[,[@nulltype=]'null_type'];說明:?type:用戶定義的數(shù)據(jù)類型的名稱。該名稱在數(shù)據(jù)庫中必須是唯一的。?system_data_type:該參數(shù)是用戶定義的數(shù)據(jù)類型所基于的SQLServer提供的基本類型,例如int或者char型。?null_type:該參數(shù)指明用戶定義的數(shù)據(jù)類型處理空值的方式。該參數(shù)有三個取值:'null'、'notnull'或者'nonull'。其默認(rèn)值為'null'。1/13/202314例如,創(chuàng)建一個名為“kechenghao”的新的用戶定義數(shù)據(jù)類型,該類型的基類是varchar,長度是6,不可以為null,在SQLServerManagementStudio的查詢分析器中輸入以下程序,執(zhí)行即可。USE實例數(shù)據(jù)庫EXECsp_addtype'kechenghao','varchar(6)','notnull'GO1/13/202315如果要用命令刪除用戶定義數(shù)據(jù)類型,則要調(diào)用名為sp_droptype的存儲過程,該存儲過程的語法為:sp_droptype[@typename=]'type'其中的type即是用戶要刪除的數(shù)據(jù)類型的名稱,例如要刪除剛剛創(chuàng)建的“kechenghao”的數(shù)據(jù)類型,則執(zhí)行以下語句:USE實例數(shù)據(jù)庫EXECsp_droptype'kechenghao'GO1/13/2023163.應(yīng)用用戶定義數(shù)據(jù)類型定義字段創(chuàng)建用戶自定義數(shù)據(jù)類型后,可以在創(chuàng)建表的字段時使用用戶定義數(shù)據(jù)類型對某字段進行定義,可以在SQLServerManagementStudio環(huán)境中使用,也可以調(diào)用命令使用。例如在SQLServerManagementStudio環(huán)境創(chuàng)建表時,在選擇字段的數(shù)據(jù)類型時可以直接選擇已創(chuàng)建的用戶定義數(shù)據(jù)類型1/13/202317也可以用命令形式指定字段使用用戶定義數(shù)據(jù)類型,例如下面的程序段中,對“學(xué)號”字段的定義就是采用的用戶定義數(shù)據(jù)類型“xuehao”。USE實例數(shù)據(jù)庫CREATETABLE學(xué)生表

[學(xué)號]xuehao, [姓名][nchar](20)NOTNULL, [性別][char](2)NULL, [出生日期][smalldatetime]NULL, [入學(xué)日期][smalldatetime]NULL, [院系名稱][varchar](20)NULL, [備注][text]NULL,GO1/13/2023183.2.2常量1.字符串字符串常量代表特定的一串字符,在使用時用單引號括起來。例如:'Hello''計算機'如果字符串中要包含單引號,則使用兩個單引號表示,例如:'Hesay:''Hello!'''可以在字符串內(nèi)包含字母和數(shù)字字符(a~z、A~Z和0~9)以及特殊的字符,例如感嘆號(!)、at字符(@)和數(shù)據(jù)號(#)。2.Unicode字符串Uicode字符串也屬于字符串的一種表達形式,它的格式與普通的字符串類似,不同的是在使用時前面加上一個N標(biāo)識符(N必須為大寫),例如:N'Hello'N'計算機'1/13/2023193.整型常量根據(jù)整型的進制不同,整型又可以分為十進制常量、二進制常量和十六進制常量。其中十進制常量以普通的整數(shù)表示。二進制常量即數(shù)字0和1。十六進制常量在使用時加上前綴0x。例如:200/*十進制數(shù)-2958/*十進制數(shù)0/*十進制數(shù),也可以認(rèn)為是二進制數(shù),二者在數(shù)值上相等。0x60A2/*十六進制數(shù),代表十進制247380xE5f/*十六進制數(shù),代表十進制36791/13/2023204.實型常量實型常量是包含有小數(shù)點的數(shù)字,分為定點表示和浮點表示兩種。例如:32.50/*定點表示的實型常量25.8E4/*浮點表示的實型常量,其值為25.8×1043.2E-2/*浮點表示的實型常量,其值為3.2×10-2-2E6/*浮點表示的實型常量,其值為-2×1065.日期時間常量使用特定格式的日期值字符來表示日期和時間常量。在使用時用單引號引起來。在SQLServer中系統(tǒng)可以識別多種格式的日期時間常量。例如:'2007-01-01'/*數(shù)字日期格式'3/12/1995'/*數(shù)字日期格式'Febrary2,2000'/*字母日期格式'20050825'/*未分割的字符串日期格式'12:00:00'/*時間格式'05:30:PM'/*時間格式'2007-10-1008:40:30'/*日期時間格式1/13/2023216.貨幣常量貨幣常量代表貨幣的多少,通常采用整型或者實型常量加上'$'前綴構(gòu)成,例如:

$1234.56-$2007.唯一標(biāo)識常量唯一標(biāo)識常量用于表示全局唯一標(biāo)識符(GUID)的字符串??梢允褂米址蛘叨M制字符串指定。例如:'6A526F-88C635-DA94-0035C4100FC''0xfa35998cc44abe3e60028d5daf279ff'1/13/2023223.2.3變量變量是指在程序的執(zhí)行過程中可以改變的量,變量可以保存特定類型的值。變量包括變量名和數(shù)據(jù)類型兩個屬性。在SQLServer2005中,變量的作用域大多是局部的,也就是說,在某個批處理或者存儲過程中,變量的作用范圍從聲明開始,到該批處理或者存儲過程結(jié)束1/13/2023231.變量的命名規(guī)則變量的命名要符合標(biāo)識符的命名規(guī)則:?以ASCII字母、Unicode字母、下畫線、@或者#開頭,后續(xù)可以為一個或多個ASCII字母、Unicode字母、下畫線、@、?;蛘?,但整個標(biāo)識符不能全部是下畫線、@或者#。?標(biāo)識符不能是T-SQL的關(guān)鍵字。?標(biāo)識符中不能嵌入空格,或者其他的特殊字符。?如果要在標(biāo)識符中使用空格或者T-SQL的關(guān)鍵字以及特殊字符,則要使用雙引號或者方括號將該標(biāo)識符括起來。1/13/2023242.局部變量的聲明和賦值用DECLARE語句聲明T-SQL的變量,聲明的同時可以指定變量的名字(必須以@開頭)、數(shù)據(jù)類型和長度,并同時將該變量的值設(shè)置為NULL。如果要為變量賦值,則使用SET語句直接賦值,或者使用SELECT語句將列表中當(dāng)前所引用的值為變量賦值。下面通過幾個具體的例子說明局部變量的聲明和賦值?!纠?-1】下面的語句創(chuàng)建了int類型的局部變量,其名字為@var,由于沒有為該變量賦值,則該變量的初始值為NULL。DECLARE@var

int可以用DECLARE語句依次聲明多個變量,各個變量之間用逗號“,”隔開。1/13/202325【例3-2】下面的語句創(chuàng)建了三個局部變量,名稱分別為@var1,@var2,@var3,并用SET語句分別為三個變量賦值。DECLARE@var1nvarchar(10),@var2nchar(5),@var3intSET@var1='red'SET@var2='yellow'SET@var3=10為變量賦值后,可以用SELECT語句查看變量的值?!纠?-3】下面的語句創(chuàng)建變量并賦值,然后用SELECT語句返回該變量的值。DECLARE@xuehao

intSET@xuehao=5SELECT@xuehao在查詢分析器中執(zhí)行以上語句后,在結(jié)果窗口會顯示出變量“@xuehao”的值:“5”。1/13/202326在語句中,還可以使用SELECT語句將數(shù)據(jù)表中的內(nèi)容賦值給定義的變量?!纠?-4】該例中,將選課表中學(xué)號為'20050201'的學(xué)生的分?jǐn)?shù)賦值給變量@fenshu,并將該變量的值顯示在結(jié)果窗口中。DECLARE@fenshu

intSELECT@fenshu=分?jǐn)?shù)FROM選課表WHERE學(xué)號='20050201'SELECT@fenshuAS分?jǐn)?shù)1/13/2023273.全局變量全局變量是SQLServer系統(tǒng)內(nèi)部使用的變量,其作用范圍并不局限于某個程序,而是任何程序任何時間都可以調(diào)用。全局變量通常用于存儲一些SQLServer的配置設(shè)定值和效能統(tǒng)計數(shù)據(jù)。可以利用全局變量來測試系統(tǒng)的設(shè)定值或者T-SQL的命令執(zhí)行后的狀態(tài)值。例如@@CONNECTIONS:返回自最近一次啟動SQLServer以來連接或試圖連接的次數(shù)。@@DATEFIRST:返回SETDATEFIRST參數(shù)的當(dāng)前值,SETDATEFIRST參數(shù)用于指定每周的第一天是周幾。例如1對應(yīng)周一,7對應(yīng)周日。1/13/202328【例3-5】@@CONNECTIONS的使用。返回連接次數(shù)。SELECT@@CONNECTIONSAS'連接次數(shù)'【例3-6】@@DATEFIRST的使用。將星期五設(shè)為每周的第一天,假設(shè)今天是星期三,則今天是該周的第6天SETDATEFIRST5SELECT@@DATEFIRSTAS'第一天',DATEPART(dw,GETDATE())AS'今天'1/13/2023293.3運算符和表達式運算符是一種符號,用來指定要在一個或者多個表達式中執(zhí)行的操作。在SQLServer2005中所使用的運算符包括算術(shù)運算符、賦值運算符、按位運算符、字符串連接運算符、比較運算符、邏輯運算符和一元運算符。表達式是標(biāo)識符、值和運算符的組合,它可以是常量、函數(shù)、列名、變量、子查詢等實體,也可以用運算符對這些實體進行組合而成。1/13/2023301.算術(shù)運算符算術(shù)運算符可以用于任何計算,包括:加(+)、減(-)、乘(*)、除(/)、求余(mod)。如果一個表達式中包括多個運算符,計算時要有先后順序。如果表達式中的所以的運算符都具有相同的優(yōu)先級,則執(zhí)行順序為從左到右;如果各個運算符的優(yōu)先級不同,則先乘、除和求余,然后再加、減?!纠?-7】將“選課表”中各個成績乘以0.8后輸出。SELECT學(xué)號,課程號,分?jǐn)?shù)*0.8FROM選課表2.賦值運算符等號(=)是T-SQL唯一的賦值運算符。可以將變量和常量賦值給變量,在賦值的過程中要主要賦值符號兩邊的量的數(shù)據(jù)類型要一致或者可以相互轉(zhuǎn)換。1/13/2023313.按位運算符按位運算符包括&(位與)、~(位非)、|(位或)、^(位異或),主要用于int、smallint和tinyint類型數(shù)據(jù)的運算,其中~(位非)還可以用于bit數(shù)據(jù)。所有的按位運算符都可以在對T-SQL語句中轉(zhuǎn)換成二元表達式的整數(shù)值進行運算?!纠?-8】創(chuàng)建兩個變量,對其賦值,并輸出兩個變量的&(位與)、|(位或)和^(位異或)的結(jié)果。DECLARE@var1int,@var2intSET@var1=22SET@var2=147select@var1&@var2,@var1|@var2,@var1^@var24.字符串連接運算符字符串連接運算符為加號(+),可以將兩個或者多個字符串連接成一個字符串。例如:SELECT'123'+'456'語句的結(jié)果是’123456’。1/13/2023325.比較運算符比較運算符用于測試兩個表達式的值是否相同。比較的結(jié)果為邏輯值,可以取以下三個值其中的一個:TRUE、FALSE和UNKNOWN。比較運算符包括等于(=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、不等于(<>或者!=)、不小于(!<)和不大于(!>)。由比較運算符連接的表達式多用于條件語句(如IF語句)的判斷表達式中已經(jīng)在檢索時的WHERE子句中。【例3-9】將“實例數(shù)據(jù)庫”中“學(xué)生表”的出生日期在1985年9月1號后的學(xué)生顯示出來。USE實例數(shù)據(jù)庫SELECT學(xué)號,姓名,出生日期FROM學(xué)生表WHERE出生日期>'1985-09-01'GO1/13/2023336.邏輯運算符邏輯運算符的運算結(jié)果為TRUE或者FALSE。AND:如果兩個操作數(shù)的值為TRUE,則結(jié)果為TRUE。OR:如果兩個操作數(shù)其中一個為TRUE,則結(jié)果為TRUE。NOT:如果操作數(shù)的值為TRUE,則結(jié)果為FALSE。如果操作數(shù)的值是FALSE,則結(jié)果為TRUE。ALL:如果每個操作數(shù)的值都是TRUE,則結(jié)果為TRUE。ANY:任意一個操作數(shù)的值為TRUE,則結(jié)果為TRUE。BETWEEN:如果操作數(shù)在指定的范圍內(nèi),則結(jié)果為TRUE。EXISTS:如果子查詢的結(jié)果包含一些行,則結(jié)果為TRUE。IN:如果操作數(shù)在一系列數(shù)中,則結(jié)果為TRUE。LIKE:如果操作數(shù)在某些字符串中,則結(jié)果為TRUE。SOME:如果操作數(shù)在某些值中,則結(jié)果為TRUE。在SQLServer2005中邏輯運算符最經(jīng)常和SELECT語句的WHERE子句配合使用,查詢符合條件的記錄。1/13/2023347.一元運算符。一元運算符只對一個操作數(shù)或者表達式進行操作,該操作數(shù)或者表達式的結(jié)果可以是數(shù)字?jǐn)?shù)據(jù)類型中的任意一種。一元運算符包括三個:+(表示該數(shù)值為正值),-(表示該數(shù)值為負(fù)),~(返回數(shù)值的補數(shù))。1/13/2023353.4流程控制語句T-SQL中提供流程控制語句的要素,流程控制語句是指那些用來控制程序執(zhí)行和流程分支的語句。T-SQL中的主要的流程控制語句如下所述。IF…ELSE:條件選擇語句。CASE表達式:多分支選擇語句。GOTO:無條件轉(zhuǎn)移語句。WHILE:循環(huán)語句。BREAK:循環(huán)跳出語句。CONTINUE:重新開始下一次循環(huán)。WAITFOR:設(shè)置語句執(zhí)行的延遲時間。RETURN:無條件返回。BEGIN…END:定義語句塊。1/13/2023363.4.1IF…ELSE語句【例3-10】IF語句的使用。DECLARE@pingyuchar(10)IF(SELECTMIN(分?jǐn)?shù))FROM選課表)>=60SELECT@pingyu='全部及格'ELSESELECT@pingyu='存在不及格'PRINT@pingyu1/13/2023373.4.2CASE語句CASE語句計算條件列表并返回多個可能結(jié)果表達式之一,其語法格式有兩種。1.簡單的CASE語句【例3-11】簡單的CASE語句的使用。DECLARE@var1varchar(1)SET@var1='B'DECLARE@var2varchar(10)SET@var2=CASE@var1WHEN'R'THEN'紅色'WHEN'B'THEN'藍(lán)色'WHEN'G'THEN'綠色'ELSE'錯誤'ENDPRINT@var21/13/2023382.搜索類型的CASE語句【例3.12】DECLARE@chengji

float,@pingyuvarchar(40)SET@chengji=80SET@pingyu=CASEWHEN@chengji>100or@chengji<0then'您輸入的成績超出~的范圍'WHEN@chengji>=60or@chengji<70then'及格'WHEN@chengji>=70or@chengji<85then'良好'WHEN@chengji>=85or@chengji<=100then'優(yōu)秀'ELSE'不及格'ENDPRINT'該生的成績評語是:'+@pingyu1/13/2023393.4.3GOTO語句GOTO語句將執(zhí)行語句無條件跳轉(zhuǎn)到標(biāo)簽處,并從標(biāo)簽位置繼續(xù)執(zhí)行。GOTO語句和標(biāo)簽可以在過程、批處理或語句塊中的任何位置使用?!纠?-13】利用GOTO語句計算0~100之間所有數(shù)的和。DECLARE@xint,@sum

intSET@x=0SET@sum=0xh:SET@x=@x+1SET@sum=@sum+@xif@x<100GOTOxhPRINT'1~100所有數(shù)的和是:'+ltrim(str(@sum))1/13/2023403.4.4WHILE語句【例3-14】利用WHILE語句計算0~100之間所有數(shù)的和。DECLARE@xint,@sum

intSET@x=0SET@sum=0WHILE@x<100BEGINSET@x=@x+1SET@sum=@sum+@xENDPRINT'1~100所有數(shù)的和是:'+ltrim(str(@sum))1/13/2023413.4.5BREAK語句

BREAK語句一般都出現(xiàn)在WHILE語句的循環(huán)體內(nèi),作為WHILE語句的子句。在循環(huán)體內(nèi)使用BREAK語句,會使進程提前跳出循環(huán)?!纠?-15】求1~100之間的所有數(shù)之和,但是如果和大于1000,立刻跳出循環(huán),輸出結(jié)果。DECLARE@xint,@sum

intSET@x=0SET@sum=0WHILE@x<100BEGINSET@x=@x+1SET@sum=@sum+@xif@sum>1000BREAKENDPRINT'結(jié)果是:'+ltrim(str(@sum))1/13/2023423.4.6CONTINUE語句CONTINUE和BREAK語句一樣,一般都出現(xiàn)在WHILE語句的循環(huán)體內(nèi),作為WHILE語句的子句。在循環(huán)體內(nèi)使用CONTINUE語句,結(jié)束本次循環(huán),重新轉(zhuǎn)到下一次循環(huán)。【例3-16】計算1~100所有偶數(shù)之和,并輸出結(jié)果。

DECLARE@xint,@sum

intSET@x=0SET@sum=0WHILE@x<100BEGINSET@x=@x+1if@x%2=1CONTINUESET@sum=@sum+@xENDPRINT'1~100所有偶數(shù)之和是:'+ltrim(str(@sum))1/13/2023433.4.7WAITFOR語句WAITFOR語句稱為延遲語句,設(shè)定在達到指定時間或時間間隔之前,或者指定語句至少修改或者返回一行之前,阻止執(zhí)行批處理、存儲過程或者事務(wù)。其語法格式為:WAITFOR{DELAY'time_to_pass'|TIME'time_to_execute'}說明:?time_to_pass:要等待的時間段。?time_to_execute:要等到的時間點?!纠?-17】WAITFOR語句的使用。WAITFORDELAY'0:0:10'/*等待10秒WAITFORTIME'12:00:00'/*等到12點1/13/2023443.4.8RETURN語句

RETURN語句用于結(jié)束當(dāng)前程序的執(zhí)行,返回到上一個調(diào)用它的程序或其他程序。其語法格式為:RETURN[integer_expression]說明:integer_expression:要返回的整形值。RETURN語句通常在存儲過程中使用,且不能返回空值。在系統(tǒng)存儲過程中,一般情況下返回0值表示成功,返回非0值則表示失敗。1/13/2023453.4.9BEGIN…END語句在IF語句、WHILE語句的程序體內(nèi)使用BEGIN…END語句表示一次執(zhí)行一組SQL語句。即將一組語句用BEGIN…END語句封閉起來。BEGIN…END語句允許在使用的過程中嵌套。1/13/2023463.5函數(shù)SQLServer2005提供強大的函數(shù)功能,常用的系統(tǒng)函數(shù)有以下幾類:聚合函數(shù)、數(shù)學(xué)函數(shù)、字符串函數(shù)、數(shù)據(jù)類型轉(zhuǎn)換函數(shù)、日期時間函數(shù)等。限于篇幅,本節(jié)介紹常用系統(tǒng)函數(shù)的用法。用戶也可以創(chuàng)建自定義函數(shù),對SQLServer對象處理能力進行擴展。在SQLServer中用戶可以創(chuàng)建、修改和刪除自定義函數(shù),并在程序中使用自定義函數(shù)。1/13/2023473.5.1常用的系統(tǒng)函數(shù)1.聚合函數(shù)聚合函數(shù)對一組數(shù)據(jù)執(zhí)行某種計算并返回一個結(jié)果。聚合函數(shù)經(jīng)常在SELECT語句的GROUPBY子句中使用。下面分別對聚合函數(shù)進行簡要說明,并給出一些簡單的示例。AVG:返回一組值的平均值。BINARY_CHECKSUM:返回對表中的行或者表達式列表計算的二進制校驗位。CHECKSUM:返回在表中的行者表達式列表計算的校驗值,該函數(shù)用于生成哈希索引。CHECKSUM_AGG:返回一組值的校驗值。COUNT:返回一組值中項目的數(shù)量。(返回值為int類型)。COUNT_BIG:返回一組值中項目的數(shù)量。返回值為bigint類型)。GROUPING:產(chǎn)生一個附加的列,當(dāng)用CUBE或ROLLUP運算符添加行時,附加的列輸出為1,當(dāng)添加的行不是由CUBE或ROLLUP運算符產(chǎn)生時,附加的列輸出為0。MAX:返回表達式或者項目中的最大值。MIN:返回表達式或者項目中的最小值。SUM:返回表達式中所有項的和,或者只返回DISTINCT值。SUM只能用于數(shù)字列。STDEV:返回表達式中所有值的統(tǒng)計標(biāo)準(zhǔn)偏差。STDEVP:返回表達式中所有值的統(tǒng)計統(tǒng)計標(biāo)準(zhǔn)偏差。VAR:返回表達式中所有值的統(tǒng)計標(biāo)準(zhǔn)方差。VARP:返回表達式中所有值的統(tǒng)計統(tǒng)計標(biāo)準(zhǔn)方差。1/13/202348【例3-18】AVG函數(shù)的使用。以下語句統(tǒng)計所有學(xué)生成績的平均值。USE實例數(shù)據(jù)庫SELECTAVG(分?jǐn)?shù))as平均成績FROM選課表GO【例3-19】MAX函數(shù)的使用。以下語句返回選課表中學(xué)生成績的最高分?jǐn)?shù)。USE實例數(shù)據(jù)庫SELECTMAX(分?jǐn)?shù))as最高成績FROM選課表GO【例3-20】COUNT函數(shù)的使用。以下語句返回學(xué)生表中的記錄個數(shù)。USE實例數(shù)據(jù)庫SELECTCOUNT(學(xué)號)as總?cè)藬?shù)FROM選課表GO1/13/2023492.數(shù)學(xué)函數(shù)三角函數(shù)有以下幾個:SIN:正弦函數(shù)。COS:余弦函數(shù)。TAN:正切函數(shù)。COT:余切函數(shù)。反三角函數(shù)有以下幾個:ASIN:反正弦函數(shù)。ACOS:反余弦函數(shù)。ATAN:反正切函數(shù)。

ATN2:返回兩個值的反正切。角度弧度轉(zhuǎn)換函數(shù):DEGREES:返回弧度值相對應(yīng)的角度值。RADINANS:返回一個角度的弧度值。取近似值函數(shù):CEILING:返回大于或等于所給數(shù)字表達式的最大整數(shù)。冪函數(shù):EXP:指數(shù)函數(shù)。LOG:計算以2為底的自然對數(shù)。LOG10:計算以10為底的自然對數(shù)。POWER:冪運算。SQRT:平方根函數(shù)。SQUARE:平方函數(shù)。FLOOR:返回小于等于一個數(shù)的最大的整數(shù)。ROUND:對一個小數(shù)進行四舍五入運算,使其具備特定的精度。符號函數(shù):ABS:返回一個數(shù)的絕對值SIGN:根據(jù)參數(shù)是正還是負(fù),返回-1、+1和0。隨機函數(shù):RAND:返回float類型的隨機數(shù),該數(shù)的值在0~1之間。PI函數(shù):PI:返回以浮點數(shù)表示的圓周率。

1/13/202350【例3-21】ABS函數(shù)的使用。SELECTABS(-8.5)在查詢分析器內(nèi)執(zhí)行上條語句,返回的結(jié)果是8.5,即參數(shù)的絕對值?!纠?-22】CEILING函數(shù)的使用。SELECTCEILING(25.3),CEILING(-25.3),CEILING(0)返回結(jié)果是:26,-25,0。【例3-23】RAND函數(shù)的使用。SELECTFLOOR(RAND()*10),FLOOR(RAND(5)*10)RAND函數(shù)返回0~1之間的一個隨機數(shù),但是如果其參數(shù)(隨機數(shù)種子)相同的話產(chǎn)生的隨機數(shù)相同,如果參數(shù)不同則隨機數(shù)不同。上面的語句對產(chǎn)生的隨機數(shù)乘以10再取整,得到0~10之間的隨機整數(shù)。1/13/2023513.字符串函數(shù)字符串函數(shù)對字符串進行操作,以下列出SQLServer的字符串函數(shù)及簡要說明和示例。ASCII:返回字符串首字母的ASCII碼。CHAR:返回ASCII碼值對應(yīng)的字符。CHARINDEX:返回字符串中指定表達式的起始位置。DIFFERENCE:返回一個整數(shù),該整數(shù)是兩個字符表達式的SOUNDEX值的差。LEFT:返回字符串從左端起指定個數(shù)的字符串。LEN:返回字符串的長度。LOWER:將字符串中的所有的大寫字符轉(zhuǎn)換為小寫字符。LTRIM:將字符串左端的所有空格刪除后返回。NCHAR:根據(jù)Unicode標(biāo)準(zhǔn)的定義,返回整數(shù)值的Unicode字符。1/13/202352PATINDEX:返回表達式中某模式第一次出現(xiàn)的起始位置。QUOTENAME:返回帶有分隔符的的Unicode字符串。REPLACE:用第三個表達式替換第一個字符串表達式中出現(xiàn)的所有的第二個給定的字符串表達式。REPLICATE:以指定的次數(shù)重復(fù)字符表達式。REVERSE:返回字符表達式的反轉(zhuǎn)值。RIGHT:返回字符串從右端起指定個數(shù)的字符串。SOUNDEX:返回由四個字符組成的代碼以評估兩個字符串的相似性。SPACE:返回指定個數(shù)的空格字符串。STR:將數(shù)字類型的數(shù)據(jù)轉(zhuǎn)換成字符串。STUFF:刪除指定長度的字符并在指定的起始點插入另一串字符。SUBSTRING:返回表達式的一部分。UNICODE:依照Unicode標(biāo)準(zhǔn)的定義,返回輸入表達式的第一個字符的整數(shù)值。UPPER:將字符串轉(zhuǎn)換為大寫字母的表達式1/13/202353以下對常用的字符串函數(shù)舉例?!纠?-24】ASCII函數(shù)的用法。SELECTASCII('ABC')【例3-25】CHAR函數(shù)的用法。SELECTCHAR(65)【例3-26】LEFT函數(shù)的用法。SELECTLEFT('CHINA',2)【例3-27】REPLACE函數(shù)的用法。SELECTREPLACE('CHINA','A','ESE')【例3-28】REPLACATE函數(shù)的用法。SELECTREPLICATE('*',5)+'AA'+REPLICATE('*',5)1/13/2023544.日期和時間函數(shù)日期和時間函數(shù)對日期和時間輸入值執(zhí)行操作,并返回一個字符串、數(shù)字值或日期和時間值。以下列出SQLServer的日期和時間函數(shù)及簡要的說明。DATEADD:返回給指定日期加上一個時間間隔后的新datetime

值。DATEDIFF:返回跨兩個指定日期的日期邊界數(shù)和時間邊界數(shù)。DATENAME:返回表示指定日期的指定日期部分的字符串。DATEPART:返回表示指定日期的指定日期部分的整數(shù)。DAY:返回一個整數(shù),表示指定日期的天的部分。GETDATE:返回以datetime

值的SQLServer2005標(biāo)準(zhǔn)內(nèi)部格式返回當(dāng)前系統(tǒng)日期和時間。GETUTCDATE:返回表示當(dāng)前的UTC時間(通用協(xié)調(diào)時間或格林尼治標(biāo)準(zhǔn)時間)的datetime

值。當(dāng)前的UTC時間得自當(dāng)前的本地時間和運行MicrosoftSQLServer實例的計算機操作系統(tǒng)中的時區(qū)設(shè)置。MONTH:返回表示指定日期的“月”部分的整數(shù)。YEAR:返回表示指定日期的年份的整數(shù)。1/13/202355【例3-29】DATEADD函數(shù)的使用。USE實例數(shù)據(jù)庫SELECTDATEADD(DAY,30,入學(xué)日期)FROM學(xué)生表GO【例3-30】DATEDIFF函數(shù)的使用。計算“入學(xué)日期”和當(dāng)前日期之間經(jīng)過了多少天。USE實例數(shù)據(jù)庫;SELECTDATEDIFF(day,入學(xué)日期,GETDATE())AS入學(xué)天數(shù)FROM學(xué)生表GO【例3-31】GETDATE的用法。SELECTGETDATE();【例3-32】YEAR、MONTH和DAY函數(shù)的用法。SELECTSTR(YEAR('03/12/2007'))+'年'+STR(MONTH('03/12/2007'))+'月'+STR(DAY('03/12/2007'))+'日'1/13/2023563.5.2用戶自定義函數(shù)用戶在編寫程序的過程中除了可以調(diào)用系統(tǒng)函數(shù)外,還可以根據(jù)自己的需要自定義函數(shù)。自定義函數(shù)包括表值函數(shù)和標(biāo)量值函數(shù)兩類,其中表值函數(shù)又包括內(nèi)聯(lián)表值函數(shù)和多語句表值函數(shù)。內(nèi)聯(lián)表值函數(shù):返回值為可更新表。如果用戶自定義函數(shù)包含單個SELECT語句且該語句可以更新,則該函數(shù)返回的表也可以更新。多語句表值函數(shù):返回值為不可更新表。如果用戶自定義函數(shù)包含多個SELECT語句,則該函數(shù)返回的表不可更新。標(biāo)量函數(shù):返回值為標(biāo)量值。1/13/202357用戶自定義函數(shù)的創(chuàng)建有兩種方法,一種是直接在SQLServerManagementStudio中直接創(chuàng)建,另一種是利用代碼創(chuàng)建。1.在SQLServerManagementStudio環(huán)境下直接創(chuàng)建自定義函數(shù)。下面以創(chuàng)建“內(nèi)聯(lián)表值函數(shù)”為例列出創(chuàng)建的具體步驟。(1)進入SQLServerManagementStudio環(huán)境。(2)在“對象資源管理器”窗口中依次展開如下節(jié)點:數(shù)據(jù)庫/實例數(shù)據(jù)庫/可編程性/函數(shù)/表值函數(shù)。(3)在“表值函數(shù)”項上右擊,在彈出菜單中選擇“新建內(nèi)聯(lián)表值函數(shù)”。1/13/202358(4)用戶選擇“新建內(nèi)聯(lián)表值函數(shù)”后,系統(tǒng)自動打開新的查詢分析器并將創(chuàng)建內(nèi)聯(lián)表值函數(shù)的語法模板,顯示出來。(5)用戶在相關(guān)的參數(shù)處修改相關(guān)項即可。【例3-33】創(chuàng)建一個內(nèi)聯(lián)表值函數(shù)xscj,返回指定學(xué)生的成績。ALTERFUNCTION[dbo].[xscj](@xhvarchar(12))RETURNSTABLEASRETURN( SELECT選課表.學(xué)號,課程表.課程名,選課表.分?jǐn)?shù)

FROM選課表

INNERJOIN課程表ON(課程表.課程號=選課表.課程號) WHERE[學(xué)號]=@xh)其中TABLE是特殊的變量類型,指定表值函數(shù)的返回值為表。在內(nèi)聯(lián)表值函數(shù)中,通過單個SELECT語句定義TABLE返回值。內(nèi)聯(lián)函數(shù)沒有相關(guān)聯(lián)的返回變量。1/13/2023592.通過編寫代碼創(chuàng)建函數(shù)在查詢分析器內(nèi)直接輸入創(chuàng)建函數(shù)的代碼即可。下面簡要介紹三種函數(shù)的創(chuàng)建語法及示例?!纠?-34】創(chuàng)建一個標(biāo)量函數(shù),該函數(shù)返回兩個參數(shù)中的最大值。CREATEFUNCTIONmax2(@par1real,@par2real)RETURNSrealASBEGINDECLARE@parrealIF@par1>@par2SET@par=@par1ELSESET@par=@par2

RE

溫馨提示

  • 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

提交評論