廣東海洋大學(xué)第四章SQLSERVER的使用_第1頁(yè)
廣東海洋大學(xué)第四章SQLSERVER的使用_第2頁(yè)
廣東海洋大學(xué)第四章SQLSERVER的使用_第3頁(yè)
廣東海洋大學(xué)第四章SQLSERVER的使用_第4頁(yè)
廣東海洋大學(xué)第四章SQLSERVER的使用_第5頁(yè)
已閱讀5頁(yè),還剩206頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第四章SQLSERVER的使用廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第1頁(yè)!本章內(nèi)容:介紹SQLSERVER的主要功能操作示例1:Recruitment示例2:GlobalToyz廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第2頁(yè)!查詢數(shù)據(jù)庫(kù)關(guān)于招收新人的材料存儲(chǔ)在本地SQLServer的RECRUITMENT數(shù)據(jù)庫(kù)中。這些表格包括關(guān)于候選人、他們的資格和聯(lián)系材料、可提供的空缺等方面的數(shù)據(jù),及招收新人代理需要的其它信息。查詢所有外部候選者的名字,城市,和電話號(hào)碼的信息。SELECTvFirstName,vLastName,cCity,cPhoneFROMExternalCandidate廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第3頁(yè)!顯示Recruitment數(shù)據(jù)庫(kù)中各種職位和當(dāng)前人數(shù)。SELECTcPositionCode,vDescription, iCurrentLengthFROMPosition廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第4頁(yè)!查詢合同招聘人員的名字和他們的雇傭費(fèi)用。要求查詢結(jié)果的列標(biāo)題作出改變,顯示格式如下:招聘人員名字雇傭薪金廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第5頁(yè)!方法2:SELECT‘招聘人員名字’=cName,‘雇傭薪金’=siPercentageChargeFROMContractRecruiter廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第6頁(yè)!根據(jù)測(cè)試的成績(jī),成績(jī)最高的三位外部候選人將獲得面試的機(jī)會(huì)。測(cè)試的時(shí)間是2001年3月份進(jìn)行的。先需要列出滿足條件的外部候選人的左右信息。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第7頁(yè)!根據(jù)測(cè)試的成績(jī),成績(jī)最高的三位外部候選人將獲得面試的機(jī)會(huì)。測(cè)試的時(shí)間是2001年3月份進(jìn)行的。先需要列出滿足條件的外部候選人的左右信息。查詢語(yǔ)句如下:語(yǔ)法:

SELECT

TOP3*

FROMExternalCandidate

WHEREdTestDate>=‘2001-3-1’ANDdTestDate<=‘3/31/2001’

ORDERBYsiTestScoreDESC廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第8頁(yè)!使用COMPUTE和COMPUTEBY子句使用帶SELECT語(yǔ)句的COMPUTE子句,在查詢結(jié)果中使用聚合函數(shù)產(chǎn)生匯總行。COMPUTE子句用于對(duì)于整個(gè)查詢結(jié)果產(chǎn)生總計(jì)值,COMPUTEBY子句對(duì)于每個(gè)組產(chǎn)生小計(jì)值。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第9頁(yè)!打印出所有的選修記錄,并在查詢結(jié)果的底部打印匯總所有學(xué)生的平均成績(jī),總成績(jī)。 SELECT

*

FROMSC

COMPUTEAVG(Grade),SUM(Grade)廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第10頁(yè)!對(duì)于pubs數(shù)據(jù)庫(kù),打印每類(lèi)書(shū)籍的類(lèi)型名稱和預(yù)付款項(xiàng),在每種類(lèi)型書(shū)籍記錄的尾部匯總每類(lèi)書(shū)籍的預(yù)付款總額 SELECTTyte,Advance

FROMTitles

ORDERBYType

COMPUTESUM(Advance)BYType廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第11頁(yè)!針對(duì)上述規(guī)則中的第三條和第四條當(dāng)對(duì)Titles表查詢時(shí)使用如下的ORDERBY子句時(shí):ORDERBYType,Price,Advance下面的COMPUTEBY子句,對(duì)于上面的ORDERBY子句來(lái)說(shuō)是有效的COMPUTEAVG(Advance),AVG(Price)BYType,Price,AdvanceCOMPUTEAVG(Advance),AVG(Price)BYType,PriceCOMPUTEAVG(Advance),AVG(Price)BYType廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第12頁(yè)!思考:查詢外部候選人和他們看招聘廣告查詢的報(bào)紙。要求的信息包括外部候選人的姓名和報(bào)紙的名稱。SELECTvFirstName,vLastName,cNewspaperNameFROMExternalCandidateJOINNewsAdONExternalCandidate.cNewsAdNo=NewsAd.cNewsAdNoJOINNewspaperONNewsAd.cNewspaperCode=Newspaper.cNewspaperCode廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第13頁(yè)!

交叉連接。實(shí)現(xiàn)兩個(gè)表的笛卡爾乘積的連接。SELECT

*FROMStudent,SC另一種形式的交叉連接:SELECT

*FROMStudentCROSSJOINSC廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第14頁(yè)!

子查詢。列出滿足條件的書(shū)籍的書(shū)名,書(shū)類(lèi)型和預(yù)付款項(xiàng),要求的書(shū)籍,在其所屬類(lèi)型里其預(yù)付值大于該類(lèi)書(shū)籍的平均預(yù)付值。SELECT

Title,Type,AdvanceFROMtitlest1WHEREt1.Advance>(SELECT

AVG(t2.Advance)

FROMtitlest2 WHEREt1.Type=t2.Type)廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第15頁(yè)!

抽取數(shù)據(jù)到另一個(gè)表中。需要2001年5月申請(qǐng)招聘的外部候選人的材料,抽取這些人的材料到一個(gè)新表中。語(yǔ)法:

SELECT

列名[,列名]

INTO

新表名

FROM

表名[WHERE查詢條件]廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第16頁(yè)!思考:創(chuàng)建一個(gè)全局臨時(shí)表abc,其中包括4個(gè)屬性(編號(hào)、姓名、性別、年齡),其中編號(hào)為整數(shù)類(lèi)型,且為自動(dòng)編號(hào)類(lèi)型,初始編號(hào)值為100,以后每一個(gè)增1。其余屬性自定類(lèi)型。CREATETABLE##abc( itemNoint

IDENTITY(100,1), itemNamevarchar(50), itemgendernchar(1), itemageint)廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第17頁(yè)!SQLSERVER的函數(shù)-串函數(shù)函數(shù)名例子描述ASCIISELECTASCII(‘ABC’)返回65,是最左邊字母‘A’的ASCII碼。CHARSELECTCHAR(65)返回字符‘A’,與該ASCII碼對(duì)應(yīng)的字符。CHARINDEXSELECTCHARINDEX(‘E’,‘HELLO’)返回2,表達(dá)式中指定模式的開(kāi)始位置。DIFFERENCESELECTDIFFERENCE(‘HELLO’,‘hell’)返回4。函數(shù)DIFFERENCE對(duì)兩個(gè)字符串進(jìn)行比較,求值它們之間的相似性(0~4),值4是最佳匹配值。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第18頁(yè)!函數(shù)名例子描述REVERSESELECTREVERSE(‘ACTION’)返回‘NOITCA’,它是指定的字符串的倒置字符串。RIGHTSELECTRIGHT(‘RICHARD’,4’)返回‘HARD’,從指定字符串右部截取長(zhǎng)度為4的子串。RTRIMSELECTRTRIM(‘RICHARD’)返回‘RICHARD’,抹去字符串中的后導(dǎo)空格。SPACESELECTSPACE(2)返回長(zhǎng)度為2的空格字符串STRSELECTSTR(123.45,6,2)返回‘123.45’。該函數(shù)把數(shù)值轉(zhuǎn)換為字符串。第二個(gè)參數(shù)指定轉(zhuǎn)換后的總長(zhǎng)度,包括小數(shù)點(diǎn)、正負(fù)號(hào)。第三個(gè)參數(shù)指定小數(shù)點(diǎn)后的位數(shù)。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第19頁(yè)!思考:查詢報(bào)紙的名稱、聯(lián)系人、電話號(hào)碼,要求報(bào)紙的名稱以大寫(xiě)形式顯示。SELECT

UPPER(cNewspaperName)as‘NewspaperName’,vContactPerson,cPhoneFROMNewspaper廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第20頁(yè)!SQLSERVER函數(shù)-日期時(shí)間函數(shù)函數(shù)名參數(shù)描述DATEADD(datepart,number,date)把datepart的number加入到dateDATEDIFF(datepart,date1,date2)計(jì)算兩個(gè)日期之差,單位由datepart指定。DATENAME(datepart,date)以字符值返回指定日期的datepartDATEPART(datepart,date)以整數(shù)值返回指定日期的datepartGETDATE()返回當(dāng)期日期和時(shí)間注:datepart為日期部件,具體取值見(jiàn)后續(xù)。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第21頁(yè)!思考:校園招聘的建議截止日期是招聘過(guò)程開(kāi)始后的第10天。需要顯示一份包含公司正在訪問(wèn)的所有學(xué)院的學(xué)院代碼、招聘起始日期、招聘的建議截止日期的報(bào)表。SELECTcCollegeCode,dRecruitmentStartDate,‘DeadLine’=DATEADD(dd,10,dRecruitmentStartDate)FROMCampusRecruitment廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第22頁(yè)!思考:對(duì)于pubs數(shù)據(jù)庫(kù)的titles表,打印每本書(shū)的書(shū)名和出版日期。要求打印格式如:‘書(shū)籍《NetEtiquette》的出版日期是2008年8月6日?!疭ELECT‘書(shū)籍《’+title+‘》的出版日期是’+

DATENAME(yyyy,pubdate)+‘年’+

DATENAME(mm,pubdate)+‘月’+

DATENAME(dd,pubdate)+‘日’FROMtitles廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第23頁(yè)!思考:查詢外部候選人‘HelenWhite’的測(cè)試成績(jī)。要求成績(jī)被舍入到最接近的整數(shù)。要求輸出的信息包括她的姓名、電話號(hào)碼和按要求顯示的測(cè)試成績(jī)。SELECTvFirstName,vLastName,cPhone,

ROUND(siTestScore,0)FROMexternalCandidate廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第24頁(yè)!函數(shù)定義USER_ID(‘[name_in_db]’)返回與用戶名對(duì)應(yīng)的數(shù)據(jù)庫(kù)標(biāo)示號(hào)USER_NAME(user_id)返回與數(shù)據(jù)庫(kù)標(biāo)識(shí)號(hào)對(duì)應(yīng)的用戶名DB_ID(‘db_name’)返回?cái)?shù)據(jù)庫(kù)的ID號(hào)。DB_NAME([SID])返回?cái)?shù)據(jù)庫(kù)名。OBJECT_ID(‘objname’)返回?cái)?shù)據(jù)庫(kù)對(duì)象ID號(hào)。OBJECT_NAME(‘obj_id’)返回?cái)?shù)據(jù)庫(kù)對(duì)象名。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第25頁(yè)!例子:將Titles表的Ytd_Sales字段的數(shù)據(jù)轉(zhuǎn)換成字符數(shù)據(jù)類(lèi)型輸出。SELECTYtd_sales=CONVERT(CHAR(10),Ytd_sales)FROMTitlesSELECTYtd_sales=CAST(Ytd_salesASchar(10))FROMTitles廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第26頁(yè)!日期時(shí)間數(shù)據(jù)轉(zhuǎn)換為字符數(shù)據(jù)類(lèi)型的例子。SELECTTitle,CONVERT(char(10),pubdate,2)FROMTitles本例,pubdate由日期轉(zhuǎn)換為字符類(lèi)型,且日期以YY.MM.DD格式顯示,這是因?yàn)樵诤瘮?shù)中指定的style的值為2。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第27頁(yè)!SQLSERVER-管理數(shù)據(jù)庫(kù)系統(tǒng)數(shù)據(jù)庫(kù)

SQLSERVER有以下系統(tǒng)數(shù)據(jù)庫(kù):

mastertempdbmodelmsdb廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第28頁(yè)!

tempdb

tempdb是臨時(shí)數(shù)據(jù)庫(kù),用來(lái)存放臨時(shí)數(shù)據(jù)。tempdb數(shù)據(jù)庫(kù)可以保持的臨時(shí)數(shù)據(jù)有:臨時(shí)表、臨時(shí)存儲(chǔ)過(guò)程、變量、游標(biāo)、排序的中間結(jié)果表、查詢中間的結(jié)果等。

tempdb數(shù)據(jù)庫(kù)的大小會(huì)隨著操作的多少而變化,操作越多,臨時(shí)數(shù)據(jù)庫(kù)就越大。在SQLSERVER重啟時(shí),會(huì)自動(dòng)重建tempdb數(shù)據(jù)庫(kù),使得系統(tǒng)在啟動(dòng)時(shí)自動(dòng)會(huì)有一個(gè)干凈的tempdb數(shù)據(jù)庫(kù)。tempdb沒(méi)有必要備份。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第29頁(yè)!

msdb

msdb也是SQLSERVER系統(tǒng)使用的數(shù)據(jù)庫(kù),通常由SQLSERVER代理用來(lái)計(jì)劃警報(bào)和作業(yè)。另外有關(guān)數(shù)據(jù)庫(kù)備份和還原的記錄,也會(huì)寫(xiě)在該數(shù)據(jù)庫(kù)里面。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第30頁(yè)!數(shù)據(jù)庫(kù)文件和文件組每個(gè)SQLSERVER的數(shù)據(jù)庫(kù)至少要包含兩個(gè)文件:一個(gè)數(shù)據(jù)文件和一個(gè)日志文件。數(shù)據(jù)文件里包含的是數(shù)據(jù)庫(kù)的數(shù)據(jù)和對(duì)象,如表、視圖、索引等;日志文件里包含的是用來(lái)恢復(fù)數(shù)據(jù)庫(kù)所需的信息。SQLSERVER的文件類(lèi)型:主數(shù)據(jù)文件mdf

輔助數(shù)據(jù)文件ndf

事務(wù)日志文件ldf廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第31頁(yè)!創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)test2,其中包括1個(gè)主文件,兩個(gè)輔助文件和兩個(gè)日志文件。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第32頁(yè)!SQLSERVER-用戶自定義的數(shù)據(jù)類(lèi)型用戶定義的數(shù)據(jù)類(lèi)型是由用戶創(chuàng)建的,它基于系統(tǒng)數(shù)據(jù)類(lèi)型。如果要在多個(gè)表中存儲(chǔ)一種特定的數(shù)據(jù)類(lèi)型,那你可以創(chuàng)建用戶定義數(shù)據(jù)類(lèi)型,可以保證在它出現(xiàn)的所有表中相應(yīng)的列都有相同的數(shù)據(jù)類(lèi)型、長(zhǎng)度和空值性。

創(chuàng)建用戶定義的數(shù)據(jù)類(lèi)型必須提供如下參數(shù):數(shù)據(jù)類(lèi)型的名新數(shù)據(jù)類(lèi)型所基于的系統(tǒng)數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型的空值性廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第33頁(yè)!自定義數(shù)據(jù)類(lèi)型的例子。sp_addtypetypmydate,datetime,’NOTNULL’sp_addtypetypmychar,’char(10)’注:如果NULL或NOTNULL條件已經(jīng)在CREATETABLE語(yǔ)句中指出,那么忽略null類(lèi)型。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第34頁(yè)!SQLSERVER-規(guī)則

規(guī)則為實(shí)施列或用戶自定義數(shù)據(jù)類(lèi)型的域完整性提供一種類(lèi)似約束(CONSTRAINT)的檢查機(jī)制。即規(guī)則對(duì)列或用戶定義數(shù)據(jù)類(lèi)型的值上設(shè)置了限制。

規(guī)則可以在不改變表的結(jié)構(gòu)的情況下實(shí)現(xiàn)檢查約束。(規(guī)則不同于約束,其不屬于表結(jié)構(gòu)的一部分。)廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第35頁(yè)!規(guī)則的創(chuàng)建語(yǔ)法

CREATERULErul_name

ASconditional_expressionrul_name指定新規(guī)則的名字,它作為該規(guī)則的標(biāo)示符

conditional_expression指定用于定義規(guī)則的條件。這些條件可以是任何能在WHERE子句中使用的有效表達(dá)式,這些表達(dá)式可以包含算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、IN、LIKE、BETWEEN。條件表達(dá)式中的變量必須以@符號(hào)作為前綴。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第36頁(yè)!

規(guī)則綁定當(dāng)規(guī)則被創(chuàng)建后,它必須綁定到列或用戶定義的數(shù)據(jù)類(lèi)型使用規(guī)則的限制一次只能使一個(gè)規(guī)則綁定一個(gè)列或用戶定義數(shù)據(jù)類(lèi)型如果一個(gè)規(guī)則綁定用戶定義的數(shù)據(jù)類(lèi)型,它不可代替綁定到數(shù)據(jù)類(lèi)型的列的規(guī)則;如果對(duì)一個(gè)已經(jīng)綁定了另一個(gè)規(guī)則的列或數(shù)據(jù)類(lèi)型綁定以新的規(guī)則的話,新規(guī)則將替代老規(guī)則;規(guī)則不能應(yīng)用于已插入到表中的數(shù)據(jù)。表中現(xiàn)有值不必滿足規(guī)則指定的準(zhǔn)則;廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第37頁(yè)!例子:將rulage綁定到學(xué)生表的年齡列,因?yàn)閷W(xué)生年齡需要一個(gè)這樣的規(guī)則。

sp_bindrulerulage,’Student.sage’廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第38頁(yè)!例子:Newspaper表中的zipcode應(yīng)為字符類(lèi)型,并有如下的模式:[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9],不改變表結(jié)構(gòu),如何實(shí)現(xiàn)該要求?CREATERULErulxAS@xLIKE‘[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]’sp_bindrulerulx,‘Newspaper.cZip’廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第39頁(yè)!例子:取消Newspaper表的zipcode列上的規(guī)則

sp_unbindrule‘Newspaper.cZip’例子:用戶自定義數(shù)據(jù)類(lèi)型‘myint’已經(jīng)綁定了規(guī)則rulex,現(xiàn)取消該綁定,但是當(dāng)前使用myint類(lèi)型的表列仍然保留該規(guī)則

sp_unbindrule‘myint’,FUTUREONLY廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第40頁(yè)!例子:缺省值為‘China’

CREATEDEFAULTdefcountryAS‘China’例子:缺省值為‘計(jì)算機(jī)系’

CREATEDEFAULTdefdeptAS‘計(jì)算機(jī)系’廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第41頁(yè)!例子:將defdept綁定到學(xué)生表的院系列,這樣學(xué)生院系值為‘計(jì)算機(jī)系’是無(wú)需輸入,可節(jié)省時(shí)間。

sp_bindefaultdefdept,’Student.sDept’廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第42頁(yè)!

取消綁定缺省

語(yǔ)法:使用系統(tǒng)存儲(chǔ)過(guò)程sp_unbindefaultsp_unbindefaultobject_name[,FUTUREONLY]object_name指出要取消綁定缺省的列或者用戶自定義數(shù)據(jù)類(lèi)型;

FUTUREONLY只能用于取消用戶定義數(shù)據(jù)類(lèi)型中的缺省。它避免了用戶定義數(shù)據(jù)類(lèi)型的現(xiàn)有列中的缺省被取消。缺省將不再應(yīng)用于用戶自定義數(shù)據(jù)類(lèi)型的新列。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第43頁(yè)!SQLSERVER-索引

索引是SQLSERVER使用的一種內(nèi)部表結(jié)構(gòu),它基于表中一個(gè)或多個(gè)列的值,提供對(duì)表中行的快速存取。SQLSERVER中的索引類(lèi)似于書(shū)本后的速印,它能幫助你定位內(nèi)容。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第44頁(yè)!使用索引的缺點(diǎn)-如果設(shè)計(jì)合理、索引可以提高查詢的性能。但是,為表中的每一列創(chuàng)建索引是不明智的。在創(chuàng)建索引時(shí),需要考慮的因素:創(chuàng)建索引需要花費(fèi)時(shí)間;每個(gè)創(chuàng)建的索引連同原先的數(shù)據(jù)源都需要空間存儲(chǔ)數(shù)據(jù);

每次修改表中的數(shù)據(jù)都需要更新索引;廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第45頁(yè)!簇索引(聚集索引)數(shù)據(jù)被物理地排序。在設(shè)置聚集索引時(shí),數(shù)據(jù)表中的數(shù)據(jù)也會(huì)按照索引的順序來(lái)存放。例如在一個(gè)數(shù)據(jù)表中,將‘編號(hào)’設(shè)置為聚集索引,此時(shí)在該數(shù)據(jù)表中的數(shù)據(jù)將會(huì)按‘編號(hào)’字段的內(nèi)容來(lái)自動(dòng)排序與存儲(chǔ)。加入要插入編號(hào)為‘123’的記錄,那么數(shù)據(jù)庫(kù)會(huì)將其放在‘122’和‘124’的記錄之間。每個(gè)表可允許創(chuàng)建一個(gè)簇索引廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第46頁(yè)!Page603EidPagePtrE001601E005602Page601EidPagePtrE001201E003202Page602EidPagePtrE005203E007204RootPagePage201EidNameCity…E001JohnLA…E002BobHouton…Page202EidNameCity…E003MaryHouston…E004KellyBoston…Page203EidNameCity…E005MarkLA…E006WillLA…Page204EidNameCity…E007CharlesDallas…E008LisaNewYork…Data(Leaf)Pages查找Eid為E005的行廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第47頁(yè)!簇索引是如何工作的——SQLSERVER缺省情況下創(chuàng)建非簇索引。數(shù)據(jù)存儲(chǔ)以隨機(jī)順序出現(xiàn),擔(dān)邏輯順序按其索引給出。非簇索引樹(shù)包含按排列順序出現(xiàn)的索引鍵,其索引的葉子層包含數(shù)據(jù)頁(yè)的指針和數(shù)據(jù)頁(yè)中行號(hào)。當(dāng)SQLSERVER使用費(fèi)簇索引查找值時(shí),它執(zhí)行以下步驟:廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第48頁(yè)!Page603EidPagePtrE001601E005602Page601EidPagePtrE001201E003202Page602EidPagePtrE005203E007204RootPagePage301EidNameCity…E005JohnLA…E008BobHouton…Page302EidNameCity…E006MaryHouston…E007KellyBoston…Page303EidNameCity…E001MarkLA…E003WillLA…Page304EidNameCity…E004CharlesDallas…E002LisaNewYork…DataPagesPage201E001303E002304Page202E003303E004304Page203E005301E006302Page204E007302E008301查找Eid為E006的行廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第49頁(yè)!索引的特性索引加速了連接表的查詢、執(zhí)行排序和分組;索引可用來(lái)實(shí)施行的唯一性;索引對(duì)數(shù)據(jù)大多數(shù)是唯一的列很有用。索引對(duì)具有大量重復(fù)數(shù)據(jù)的列沒(méi)有多大用處;當(dāng)修改索引列的數(shù)據(jù)時(shí),相關(guān)索引會(huì)被自動(dòng)更新;需要時(shí)間和資源維護(hù)索引,不應(yīng)創(chuàng)建不被經(jīng)常使用的索引簇索引應(yīng)在非簇索引之前創(chuàng)建。一般情況下,非簇索引在外鍵上創(chuàng)建;廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第50頁(yè)!例子:在表test1上,要求索引表中的值按照itemno列的值的降序排列原則,創(chuàng)建一個(gè)聚集索引。 CREATECLUSTEREDINDEXidxitemnoONtest1(itemnoDESC)廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第51頁(yè)!索引的刪除語(yǔ)法DROPINDEXtable_name.idxname廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第52頁(yè)!執(zhí)行下列查詢,分析Department表中索引的使用情況: SELECTRequisition.cRequisitionCode,Position.vDescription,vDepartmentName FROMPosition JOINRequisition ONRequisition.cPositionCode=Position.cPositionCode JOINDepartment ONRequisition.cDepartmentCode=Department.cDepartmentCode廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第53頁(yè)!索引ENHANCEMENTSFillFactor(填充因子)填充因子是指在創(chuàng)建索引頁(yè)時(shí),每個(gè)葉子節(jié)點(diǎn)的填入數(shù)據(jù)的填滿率。例如,填充因子設(shè)為80,則在創(chuàng)建索引時(shí),每個(gè)葉子節(jié)點(diǎn)索引頁(yè)中只使用80%的空間用來(lái)存放索引數(shù)據(jù),剩下的20%的空間用于以后新增加的索引數(shù)據(jù)。該項(xiàng)的默認(rèn)值為0,表示將葉子節(jié)點(diǎn)索引頁(yè)填滿,等于100%。通常來(lái)說(shuō),如果數(shù)據(jù)表中的數(shù)據(jù)很少變動(dòng),則將填充因子設(shè)得大一點(diǎn);反之,則可以將填充因子設(shè)得低一點(diǎn)。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第54頁(yè)!例:有如下視圖

CREATEVIEWvwEmployeeCandidate

AS

SELECT

E.cCandidateCode,vFirstName,vLastName,cPhone,siTestScore

FROMEmployeeAS

E

JOINInternalCandidateAS

I

ON

E.cCandidateCode=I.cCandidateCode廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第55頁(yè)!續(xù)上例,對(duì)連接視圖的更新語(yǔ)句轉(zhuǎn)化為一次只更新一個(gè)基本表,則前面的更新語(yǔ)句轉(zhuǎn)換為下面兩個(gè)語(yǔ)句:

UPDATEvwEmployeeCandidate

SETcPhone=‘(614)324-5634’

WHEREcCanidateCode=‘000018’UPDATEvwEmployeeCandidate

SETsiTestScore=75

WHEREcCanidateCode=‘000018’廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第56頁(yè)!批量——批量是一起提交SQLSERVER執(zhí)行的一組SQL語(yǔ)句。

批量被分析、優(yōu)化、編譯和執(zhí)行。SQLSERVER把批量語(yǔ)句編譯成稱為執(zhí)行計(jì)劃的單個(gè)可執(zhí)行單位,然后一次執(zhí)行計(jì)劃中的一個(gè)語(yǔ)句。如果批量中有語(yǔ)法錯(cuò)誤,那么批量中沒(méi)有語(yǔ)句被執(zhí)行。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第57頁(yè)!例子:聲明變量并賦值①DECLARE@xintSET@x=100②DECLARE@chargeintSELECT@charge=MAX(siPercentageCharge)FROMContractRecruiter③DECLARE@chargefloatSELECT@charge=siPercentageChargeFROMContractRecruiter廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第58頁(yè)!變量名返回@@version當(dāng)前版本的日期、版本及其他信息@@servernameSQLSERVER服務(wù)器的名@@spid當(dāng)前進(jìn)程的服務(wù)器進(jìn)程ID號(hào)@@error如果最后事務(wù)成功返回0,否則返回最后錯(cuò)誤號(hào)@@rowcount受最后查詢影響的行數(shù),如果沒(méi)有行受影響為0@@trancount某用戶當(dāng)前活動(dòng)的事務(wù)個(gè)數(shù)@@connections服務(wù)啟動(dòng)以來(lái)連接的和企圖連接的數(shù)的總和常用的全局變量廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第59頁(yè)!例子:打印消息①DECLARE@mynamechar(50)SET@myname=‘HelenWhite’PRINT@myname②SELECT‘Thenumberofrowsis’+CONVERT(varchar,@@rowcount)③DECLARE@varintSET@var=2SELECT@varPRINT@var廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第60頁(yè)!控制流語(yǔ)句控制流語(yǔ)句控制批量、存儲(chǔ)過(guò)程、觸發(fā)器和事務(wù)中SQL語(yǔ)句的執(zhí)行流程。當(dāng)語(yǔ)句需要轉(zhuǎn)折或重復(fù)時(shí),就要使用控制流語(yǔ)句??刂屏髡Z(yǔ)句使得標(biāo)準(zhǔn)SQL具備了編程語(yǔ)言的能力。控制流語(yǔ)句有:

IF…ELSECASEWHILE廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第61頁(yè)!

IF…ELSE語(yǔ)句對(duì)于選擇性的執(zhí)行條件,可以使用IF…ELSE語(yǔ)句。語(yǔ)法:IFboolean_expression{sql_statement|statement_block}[ELSEboolean_expression]{sql_statement|statement_block}boolean_expression是一個(gè)求值TRUE或FALSE的表達(dá)式

sql_statement是任意SQL語(yǔ)句

statement_block是一組SQL語(yǔ)句廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第62頁(yè)!例子:如果Employee表中存在一個(gè)vFirstname為‘Angela’的雇員,則打印‘Thedetailoftheemployee:’,并且輸出該雇員的詳細(xì)信息。否則,打印消息‘Employeenotfound!’廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第63頁(yè)!例子:如果合同招聘人員的平均費(fèi)用(siPercentageCharge)低于20,那么所有合同招聘人員的siPercentageCharge增加5,否則只增加3。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第64頁(yè)!例子:內(nèi)部候選人被召集參加面試的最低測(cè)試成績(jī)?yōu)?0分。編寫(xiě)一個(gè)批量,對(duì)于職工號(hào)為000008的員工,如果他的測(cè)試成績(jī)高于80分,則打印消息‘Calledforinterview’和測(cè)試成績(jī),否則,打印消息‘Rejected-Notcalledforinterview’。DECLARE@scoreintSELECT@score=siTestScoreFROMInternalCandidateWHEREcEmployeeCode=‘000008’IF@score<80 PRINT‘Rejected-Notcalledforinterview’ELSEBEGIN PRINT‘Calledforinterview’ PRINT‘TestScore=’+convert(char(2),@score)END廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第65頁(yè)!

WHILE語(yǔ)句語(yǔ)法解釋:

當(dāng)boolean_expression為true時(shí),循環(huán)執(zhí)行while語(yǔ)句塊的代碼,直到boolean_expression為false為止。如果要在中途停止循環(huán)的話,可以使用break或continue語(yǔ)句。break語(yǔ)句是跳出目前所執(zhí)行的循環(huán),continue種植執(zhí)行代碼,跳回到while的判斷語(yǔ)句重新進(jìn)行條件判斷,再根據(jù)判斷結(jié)果決定是否進(jìn)入循環(huán)。

廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第66頁(yè)!例子:計(jì)算1到100的累加和。DECLARE@countintDECLARE@sumintSET@count=1SET@sum=0WHILE@count<=100BEGIN SELECT@sum=@sum+@count SELECT@count=@count+1ENDPRINT‘1到100的累加和=’+CONVERT(CHAR(4),@sum)廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第67頁(yè)!DECLARE@markintSELECT@mark=gradeFROMSCWHERESno=‘95001’ANDCno=‘1000’IF@mark<60 PRINT‘學(xué)生95001的1000號(hào)課程不及格’ELSEBEGINIF@mark>=60and@mark<80 PRINT‘學(xué)生95001的1000號(hào)課程成績(jī)及格’ELSE PRINT‘學(xué)生95001的1000號(hào)課程成績(jī)良好’END廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第68頁(yè)!

CASE語(yǔ)句2.搜索的CASE語(yǔ)法:

CASE WHENboolean_expressionTHENresult_expression […n] [ ELSEelse_result_expression ] END廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第69頁(yè)!declare@ssexvarchar(20)declare@outputvarchar(20)select@ssex=sgenderfromstudentwheresname='張三'select@output=

case@ssex when'男'then'boy' when'女'then'girl' else'notknown'

endprint'張三是個(gè)'+@output簡(jiǎn)單case語(yǔ)法例程廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第70頁(yè)!例子:對(duì)于學(xué)生選修課程表成績(jī)分析,如果成績(jī)?cè)?0分以上,對(duì)應(yīng)的分析結(jié)果為‘優(yōu)秀’,成績(jī)?cè)?0~90分,分析結(jié)果為‘良好’,成績(jī)?cè)?0~80分,分析結(jié)果為‘中等’,成績(jī)?cè)?0~70分,分析結(jié)果為‘及格’,成績(jī)?cè)?0分以下,分析結(jié)果為‘不及格’。打印格式示例如圖:廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第71頁(yè)!SQLSERVER-存儲(chǔ)過(guò)程創(chuàng)建存儲(chǔ)過(guò)程執(zhí)行存儲(chǔ)過(guò)程

向存儲(chǔ)過(guò)程傳遞參數(shù)修改存儲(chǔ)過(guò)程從存儲(chǔ)過(guò)程返回值從存儲(chǔ)過(guò)程返回多個(gè)值存儲(chǔ)過(guò)程調(diào)用另一個(gè)存儲(chǔ)過(guò)程

重編譯存儲(chǔ)過(guò)程

刪除存儲(chǔ)過(guò)程廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第72頁(yè)!存儲(chǔ)過(guò)程的優(yōu)點(diǎn)

1.執(zhí)行速度快效率高:因?yàn)镾QLSERVER會(huì)事先將存儲(chǔ)過(guò)程編譯成二進(jìn)制可執(zhí)行代碼,在運(yùn)行時(shí),SQLSERVER不需要再對(duì)存儲(chǔ)過(guò)程進(jìn)行編譯,可以加快執(zhí)行速度。

2.減少網(wǎng)絡(luò)流量:由于存儲(chǔ)過(guò)程是存在數(shù)據(jù)庫(kù)服務(wù)器上的一組SQL語(yǔ)句,在客戶端調(diào)用時(shí),只需要使用一個(gè)存儲(chǔ)過(guò)程名及參數(shù)即可,那么在網(wǎng)絡(luò)上傳送的流量比傳送這一組完整的SQL程序(代碼)要小得多,所以可以減少網(wǎng)絡(luò)流量,提高運(yùn)行速度。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第73頁(yè)!存儲(chǔ)過(guò)程的類(lèi)型

1.系統(tǒng)存儲(chǔ)過(guò)程:系統(tǒng)存儲(chǔ)過(guò)程一般以“sp_”為前綴,是由SQLSERVER自己創(chuàng)建、管理和使用的一種特殊存儲(chǔ)過(guò)程,不需對(duì)其修改和刪除。

2.擴(kuò)展存儲(chǔ)過(guò)程:通常以“xp_”為前綴。擴(kuò)展存儲(chǔ)過(guò)程允許以其他語(yǔ)言(如C#)創(chuàng)建自己的外部存儲(chǔ)過(guò)程,其內(nèi)容并不存在SQLSERVER中,而是以DLL形式單獨(dú)存在。

3.用戶自定義存儲(chǔ)過(guò)程:用戶自行創(chuàng)建的存儲(chǔ)過(guò)程,可以輸入?yún)?shù)、向客戶端返回表格或結(jié)果、消息等,也可以返回輸出參數(shù)。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第74頁(yè)!

雖然在設(shè)計(jì)存儲(chǔ)過(guò)程時(shí),可以包含任意數(shù)據(jù)和類(lèi)型的SQL語(yǔ)句,但是下表列出的語(yǔ)句在設(shè)計(jì)存儲(chǔ)過(guò)程時(shí)不能使用。CREATEPROCALTERPROCCREATEDEFAULTCREATERULECREATEFUNCTIONALTERFUNCTIONCREATETRIGGERALTERTRIGGERCREATEVIEWALTERVIEW……廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第75頁(yè)!上例存儲(chǔ)過(guò)程的語(yǔ)句:

CREATEPROC

prcRecruitmentAgencies

AS BEGIN PRINT‘ListofRecruitmentAgencies:’ SELECTcName,vAddress,cCity,cZip,cPhone,cFax FROMRecruitmentAgencies

END廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第76頁(yè)!帶輸入?yún)?shù)的存儲(chǔ)過(guò)程系統(tǒng)中經(jīng)常查詢合同招聘人員的信息。所屬的城市信息會(huì)隨時(shí)間變化。創(chuàng)建一個(gè)存儲(chǔ)過(guò)程,可以根據(jù)指定的城市輸出合同招聘人員的信息。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第77頁(yè)!例1:(不帶參數(shù)的加法)

CREATEPROCprcSum1AS PRINT‘2+5的和是’+convert(char(2),(2+5))例2:(帶參數(shù)的加法)

CREATEPROCprcSum2@xint,@yintASPRINT‘x+y的和是’+convert(char(2),(@x+@y))

廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第78頁(yè)!接下來(lái)的步驟:1.先檢查存儲(chǔ)過(guò)程sp_helptextprcContractRecruiter2.用存在于ContractRecruiter表中的城市‘Alexandira’測(cè)試 execprcContractRecruiter‘Alexandria’3.用不存在于ContractRecruiter表中的城市‘Boston’測(cè)試 execprcContractRecruiter‘Boston’廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第79頁(yè)!例:CREATEPROCEDUREprcMultiply(@num1int,@num2int=5)AS PRINT@num1*@num2測(cè)試參數(shù)

prcMultiply5,6prcMultiply10prcMultiply參數(shù)2的默認(rèn)值為5廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第80頁(yè)!修改存儲(chǔ)過(guò)程prcRecruitmentAgencies,將城市名作為參數(shù)傳入,且參數(shù)給定一個(gè)缺省值NULL。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第81頁(yè)!RETURN關(guān)鍵字

從查詢或過(guò)程中無(wú)條件退出。RETURN即時(shí)并且完全,可在任何時(shí)候用于從過(guò)程、批處理或過(guò)程中退出。不執(zhí)行位于RETURN之后的語(yǔ)句。語(yǔ)法:RETURN

[integer_expression]參數(shù)integer_expression是返回的整型值。存儲(chǔ)過(guò)程可以給調(diào)用過(guò)程或應(yīng)用程序返回整型值。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第82頁(yè)!ALTERPROC

prcRecruitmentAgencies@citychar(15)ASBEGIN IFEXISTS(SELECT*FROMRecruitmentAgenciesWHEREcCity=@city) BEGIN SELECTcName,vAddress,cZip,cPhone FROMRecruitmentAgenciesWHEREcCity=@city

RETURN0 END ELSE BEGIN PRINT‘NoRecordsFoundforgivencity’

RETURN1 ENDENDRETURN例子廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第83頁(yè)!存儲(chǔ)過(guò)程調(diào)用其他存儲(chǔ)過(guò)程現(xiàn)需要招聘代理和合同招聘人員的材料,創(chuàng)建一個(gè)單獨(dú)的存儲(chǔ)過(guò)程來(lái)實(shí)現(xiàn)要求。城市名作為參數(shù)傳入。

CREATEPROC

prcDisplay@citychar(15)

AS BEGIN

EXEC

prcContractRecruiter@city

EXEC

prcRecruitmentAgencies@city

END必不可少?gòu)V東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第84頁(yè)!要求的打印效果格式如下:TheStatusforthePosition:MarketingManagerBudgetedStrength:100CurrentStrength:83cRequisitionCodevRegionsiNoOfVacany000002Texas11廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第85頁(yè)!OUTPUT參數(shù)(續(xù))OUTPUT選項(xiàng)允許存儲(chǔ)過(guò)程把數(shù)據(jù)值傳回給調(diào)用過(guò)程。如果不使用OUTPUT關(guān)鍵字,那么這個(gè)參數(shù)將被當(dāng)作輸入?yún)?shù)來(lái)處理。

OUTPUT選項(xiàng)必須在CREATEPROC和EXECUTE語(yǔ)句中指明。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第86頁(yè)!CREATEPROC

prcDisplayPositionStatus@pCodechar(4),@scriptvarchar(30)OUTPUT,@budgetintOUTPUT,@currentintOUTPUTASBEGIN DECLARE@descriptionchar(30)DECLARE@budgetintDECLARE@currentint DECLARE@retint EXEC@ret=prcGetPositionDetail@pCode,@descriptionOUTPUT,@budgetOUTPUT,@currentOUTPUT廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第87頁(yè)!刪除存儲(chǔ)過(guò)程刪除存儲(chǔ)過(guò)程語(yǔ)法: DROPPROCEDUREproc_name不能刪除一個(gè)被另一個(gè)過(guò)程調(diào)用的過(guò)程。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第88頁(yè)!回顧數(shù)據(jù)完整性數(shù)據(jù)的完整性指的是數(shù)據(jù)的正確性和相容性。數(shù)據(jù)庫(kù)的完整性要求就是防止數(shù)據(jù)庫(kù)中存在不符合語(yǔ)義的數(shù)據(jù),也就是防止數(shù)據(jù)庫(kù)中存在不正確的數(shù)據(jù)。數(shù)據(jù)的完整性必須由數(shù)據(jù)庫(kù)產(chǎn)品(DBMS)自動(dòng)支持。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第89頁(yè)!引出觸發(fā)器觸發(fā)器是由用戶定義在關(guān)系表上的一類(lèi)由事件驅(qū)動(dòng)的特殊過(guò)程。一旦定義,任何用戶對(duì)于表的增、刪、改操作均由DBMS自動(dòng)觸發(fā)相應(yīng)的觸發(fā)器,實(shí)現(xiàn)對(duì)數(shù)據(jù)完整性的保障。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第90頁(yè)!觸發(fā)器介紹觸發(fā)器——觸發(fā)器實(shí)質(zhì)是一類(lèi)特殊類(lèi)型的存儲(chǔ)過(guò)程,其特殊性表現(xiàn)在:它是在執(zhí)行某些特定的T-SQL語(yǔ)句時(shí)自動(dòng)執(zhí)行的。(不能顯式的調(diào)用)

SQLSERVER中,可以用兩種方法來(lái)保證數(shù)據(jù)的有效性和完整性:約束和觸發(fā)器(TRIGGER)。約束是直接設(shè)置于數(shù)據(jù)表內(nèi),只能實(shí)現(xiàn)一些比較簡(jiǎn)單的功能操作。觸發(fā)器是針對(duì)數(shù)據(jù)表的特殊存儲(chǔ)過(guò)程,自動(dòng)激活執(zhí)行,處理各種復(fù)雜的操作。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第91頁(yè)!

DML觸發(fā)器的種類(lèi):

After(for)觸發(fā)器:這類(lèi)觸發(fā)器是在更新操作成功完成之后,才會(huì)被激活執(zhí)行,它主要用于記錄變更后的處理檢查。

Insteadof觸發(fā)器:這類(lèi)觸發(fā)器一般用來(lái)取代原本的操作,在記錄變更之前發(fā)生,它不去執(zhí)行原來(lái)的SQL語(yǔ)句的操作,而去執(zhí)行觸發(fā)器定義的操作。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第92頁(yè)!實(shí)現(xiàn)本例的觸發(fā)器:

CREATETriggertrgDeleteStudentONStudentAFTERdeleteASUPDATEClassSETQty=Qty-1WHEREClassNo=(SELECTClassNoFROMdeleted)StudentClass這是幻表廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第93頁(yè)!刪除表里存放的是更新前的記錄:對(duì)于Delete操作,刪除表放的是要?jiǎng)h除的記錄,對(duì)于Update操作,刪除表存放的是更新前的數(shù)據(jù)值?;帽恚ɡm(xù))插入表里存放的是更新后的記錄:對(duì)于Insert操作,插入表放的是要插入的數(shù)據(jù),對(duì)于Update操作,插入表存放的是更新后的數(shù)據(jù)值。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第94頁(yè)!當(dāng)‘1071’班的某個(gè)學(xué)生轉(zhuǎn)班到‘1072’班后,該如何保障班級(jí)表各班人數(shù)的正確性?當(dāng)向?qū)W生表插入新的一個(gè)學(xué)生時(shí),我們?cè)摬扇∈裁创胧┍U蠑?shù)據(jù)的完整性?廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第95頁(yè)!設(shè)計(jì)DML觸發(fā)器的注意事項(xiàng)(續(xù))

TruncateTable語(yǔ)句雖然類(lèi)似于delete語(yǔ)句可以刪除記錄,但是它不能激活delete觸發(fā)器。不同的SQL語(yǔ)句,可以觸發(fā)同一個(gè)觸發(fā)器,如Insert和Update語(yǔ)句都可以激活同一個(gè)觸發(fā)器。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第96頁(yè)!CREATETRIGGER

trgInsertRequisitionONRequisitionFORINSERTASDECLARE@ReportedintDECLARE@ActualintSELECT@Actual=iBudgetedStrength-iCurrentStrengthFROMPositionWHEREcPositionCode=(SELECTcPositionCodeFROMInserted)SELECT@ReportedFROMInsertedIF@Reported>@ActualBEGINPRINT‘Actualvacanciesarelessthanthereported,cannotinert’

ROLLBACKTRANSACTIONENDROLLBACKTRANSACTION語(yǔ)句用來(lái)回滾事務(wù)。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第97頁(yè)!CREATETRIGGER

trgInsertEmployeeONEmployeeAFTERINSERTASUPDATEPositionSETiCurrentStrength=iCurrentStrength+1WHEREcPositionCode=(SELECTcCurrentPosition

FROMInserted)廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第98頁(yè)!當(dāng)修改ContractRecruiter表的siPercentageCharge值時(shí),創(chuàng)建一個(gè)觸發(fā)器使的ContractRecruiter表的該列值的平均值應(yīng)該不大于11。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第99頁(yè)!通過(guò)觸發(fā)器實(shí)現(xiàn)主鍵外鍵約束的能力當(dāng)對(duì)SC表進(jìn)行插入數(shù)據(jù)和修改數(shù)據(jù)時(shí),要保證學(xué)號(hào)和課程號(hào)與它們所對(duì)應(yīng)的主鍵表的對(duì)應(yīng)關(guān)系。即插入或者修改后的‘學(xué)號(hào)’要來(lái)自于學(xué)生表的學(xué)號(hào),課程號(hào)要來(lái)自于課程表。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第100頁(yè)!當(dāng)刪除Student表中的學(xué)生記錄時(shí),如果被刪除的學(xué)生在SC表中存在選課記錄,則不允許刪除。CREATETRIGGER

trgDeleteStudentONStudentFORDELETEAS IFEXISTS(SELECT*FROMSC

WHERESnoIN(SELECTSnoFROMdeleted)

ROLLBACKTRAN

廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第101頁(yè)!設(shè)置AFTER觸發(fā)器的激活順序

同一操作定義的觸發(fā)器越來(lái)越多的時(shí)候,觸發(fā)器被激活的次序就會(huì)變得越來(lái)越重要了。在SQLSERVER里,使用系統(tǒng)存儲(chǔ)過(guò)程sp_settriggerorder可以為每一個(gè)操作各指定一個(gè)最先執(zhí)行的AFTER觸發(fā)器和最后執(zhí)行的AFTER觸發(fā)器。語(yǔ)法如下:

sp_settriggerorder<觸發(fā)器名>,<激活次序>,<激活動(dòng)作>觸發(fā)器名用單引號(hào),因其為一個(gè)字符串激活次序FIRST,LAST,NONE

激活觸發(fā)器的動(dòng)作:Insert,Update,Delete廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第102頁(yè)!

設(shè)置AFTER觸發(fā)器激活順序時(shí),幾點(diǎn)注意事項(xiàng):每個(gè)操作最多只能設(shè)一個(gè)FIRST和一個(gè)LAST觸發(fā)器;要取消已經(jīng)設(shè)好的FIRST或LAST觸發(fā)器,只要把它們?cè)O(shè)為NONE觸發(fā)器;如果用ALTER命令修改過(guò)觸發(fā)器內(nèi)容后,該觸發(fā)器自動(dòng)變?yōu)镹ONE觸發(fā)器,所以用ALTER也可以取消設(shè)置好的FIRST和LAST

之后AFTER觸發(fā)器可以設(shè)置激活次序,Insteadof觸發(fā)器不可以設(shè)置激活次序。激活觸發(fā)器的動(dòng)作必須和觸發(fā)器內(nèi)部的激活動(dòng)作一致。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第103頁(yè)!觸發(fā)器的遞歸

觸發(fā)器的遞歸,是指一個(gè)觸發(fā)器從其內(nèi)部又一次激活該觸發(fā)器。例如一個(gè)Insert觸發(fā)器內(nèi)部還有一條對(duì)本數(shù)據(jù)表插入記錄的SQL語(yǔ)句,那么這個(gè)插入語(yǔ)句就有可能再一次激活這個(gè)觸發(fā)器本身。這種為直接遞歸。還有一種間接遞歸。舉例說(shuō)明:當(dāng)向A表中插入一條記錄時(shí),激活了A表的Insert觸發(fā)器,A表的Insert觸發(fā)器里有一個(gè)對(duì)B表進(jìn)行Insert操作的,而在B表的Insert觸發(fā)器里有一個(gè)對(duì)A表進(jìn)行Insert操作的。這樣會(huì)引起觸發(fā)器的間接遞歸。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第104頁(yè)!

Insteadof觸發(fā)器的使用范圍:數(shù)據(jù)庫(kù)的數(shù)據(jù)禁止修改;可能要回滾修改的SQL語(yǔ)句;在視圖中使用觸發(fā)器;用自己的方式去修改數(shù)據(jù);廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第105頁(yè)!續(xù)上例,對(duì)該視圖進(jìn)行更新,更新候選人代碼為‘000018’的測(cè)試成績(jī)和電話號(hào)碼,寫(xiě)出如下的更新語(yǔ)句:

UPDATEvwEmployeeCandidate

SETcPhone=‘(614)324-5634’,siTestScore=75

WHEREcCanidateCode=‘000018’該語(yǔ)句執(zhí)行時(shí)會(huì)產(chǎn)生一個(gè)錯(cuò)誤!原因是:視圖只允許一次更新一個(gè)基表。注:現(xiàn)在我們希望該語(yǔ)句執(zhí)行時(shí)不產(chǎn)生錯(cuò)誤,怎么辦???廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第106頁(yè)!禁用和啟用DML觸發(fā)器

禁用觸發(fā)器與刪除觸發(fā)器不同,禁用觸發(fā)器時(shí),觸發(fā)器仍然存在于數(shù)據(jù)表之上,只是在執(zhí)行Insert,Update和Deleted語(yǔ)句時(shí),除非重新啟用觸發(fā)器,否則不會(huì)執(zhí)行觸發(fā)器中的操作。語(yǔ)法:

ALTERTABLE數(shù)據(jù)表名<DISABLE|ENABLE>TRIGGER觸發(fā)器名或ALL廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第107頁(yè)!顯示帶用戶自定義標(biāo)題的列當(dāng)查詢結(jié)果對(duì)照SELECT語(yǔ)句顯示時(shí),結(jié)果集的列名與表中的列名是一樣的。當(dāng)任何一種表達(dá)式作用在列上時(shí),SQLSERVER隱藏列標(biāo)題。用戶自定義的列標(biāo)題可以代替缺省列標(biāo)題。包括兩種方法:一種列標(biāo)題在列名之前,一種列標(biāo)題在列名之后。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第108頁(yè)!方法1:(其中as可以省略)SELECTcNameas‘招聘人員名字’,siPercentageCharge

as‘雇傭薪金’FROMContractRecruiter廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第109頁(yè)!使用通配符給Recruitment雇員(Employee)表的cPhone列增加一個(gè)約束,要求該列的字符串格式為‘(***)***-****’,其中‘*’為數(shù)字字符。如(120)903-3989就是符合條件的一個(gè)例子。ALTER

TABLEEmployeeADDCONSTRAINTCK_Employee_cPhoneCHECK(cPhonelike‘([0-9][0-9][0-9])[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]’)廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第110頁(yè)!顯示頂部幾行與SELECT語(yǔ)句一起使用的TOP子句限制了結(jié)果集合中返回的行數(shù)。語(yǔ)法:

SELECT[TOPn[PERCENT]]列名[,列名]

FROM

表名[WHERE查詢條件][ORDERBY列名[,列名]]廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第111頁(yè)!

GROUPBYALL

GROUPBY子句中的關(guān)鍵字ALL用于顯示所有的組,包括那些被WHERE子句排除的組。例子:

SELECTSno,AVG(Grade)

FROMSC

WHERESnoin(‘95001’,’95002’)

GROUPBY

ALLSno廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第112頁(yè)!語(yǔ)法:

SELECT

列名[,列名]

FROM

表名[WHERE

查詢條件][ORDERBY

列名[,列名]]

COMPUTE

聚合函數(shù)(列名)[,聚合函數(shù)(列名)…][BY

列名[,列名]]廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第113頁(yè)!打印出每個(gè)學(xué)生的選修記錄,并在每個(gè)學(xué)生查詢結(jié)果的尾部打印匯總每個(gè)學(xué)生的平均成績(jī),總成績(jī)。 SELECT

*

FROMSC

ORDERBYSno

COMPUTEAVG(Grade),SUM(Grade)BYSno廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第114頁(yè)!COMPUTE和COMPUTEBY子句的使用規(guī)則

COMPUTE子句所用到的所有列必須出現(xiàn)在SELECT列表中使用COMPUTEBY子句,必須同時(shí)使用ORDERBY子句在COMPUTEBY子句列出的列,必須與ORDERBY子句使用的列匹配在COMPUTEBY子句中,不同聚合函數(shù)可以用于一個(gè)以上的列廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第115頁(yè)!

內(nèi)連接查詢。查詢外部候選人的名字以及他們的招聘代理的名稱。

SELECT

vFirstName,vLastName,cName

FROM

ExternalCandidate

JOIN

RecruitmentAgencies

ON

ExternalCandidate.cAgencyCode= RecruitmentAgencies.cAgencyCode

廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第116頁(yè)!

外連接查詢。列出所有外部候選人的名字,由招聘代理方式來(lái)的候選人顯示他們的招聘代理的名字。

SELECT

vFirstName,vLastName,cName

FROM

ExternalCandidateLEFTOUTERJOIN

RecruitmentAgencies

ON

ExternalCandidate.cAgencyCode= RecruitmentAgencies.cAgencyCode

廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第117頁(yè)!

自身連接。并列輸出價(jià)格為2.9900的一對(duì)書(shū)籍的書(shū)名。SELECT

*FROMtitlest1JOINtitlest2ONt1.price=t2.priceWHEREt1.price=2.99ANDt1.title<t2.title廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第118頁(yè)!思考:列出學(xué)生選課記錄,只列出那些高于自己平均分的那些記錄的學(xué)號(hào)、課程號(hào)、成績(jī)。SELECTSno,Cno,GradeFROMSCXWHEREX.Grade>(SELECT

AVG(Grade)

FROMSCY

WHEREX.Sno=Y.Sno)廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第119頁(yè)!SELECT

*INTO#tempExternalCandidateFROMExternalCandidateWHEREdDateOfApplication<=‘2001-5-31’AND dDateOfApplication>=‘2001-5-1’注:在SQLSERVER中,對(duì)象前加上符號(hào)‘#’表示該對(duì)象為臨時(shí)對(duì)象,臨時(shí)對(duì)象存儲(chǔ)在數(shù)據(jù)庫(kù)tempdb中。一個(gè)‘#’表示為局部臨時(shí)表,兩個(gè)‘##’表示全局臨時(shí)表。廣東海洋大學(xué)第四章SQLSERVER的使用共211頁(yè),您現(xiàn)在瀏覽的是第120頁(yè)!

IDENTITY:IDENTITY用于那些需要自動(dòng)產(chǎn)生唯一系統(tǒng)值的列,該特性可用于產(chǎn)生有序列。具體用法: IDENTITY(SEED,INCREMENT)

其中SEED為初始值,INCREMENT為步長(zhǎng)。

補(bǔ)充:timestamp數(shù)據(jù)類(lèi)型,這種數(shù)據(jù)類(lèi)型表現(xiàn)自動(dòng)生成的二進(jìn)制數(shù),確保這些數(shù)在數(shù)據(jù)庫(kù)中是唯一的。timestamp一般用作給表行加版本戳的機(jī)制。存儲(chǔ)大小為8字節(jié)。

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論