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

下載本文檔

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

文檔簡介

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

SELECT

TOP3*

FROMExternalCandidate

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

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

*

FROMSC

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

FROMTitles

ORDERBYType

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

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

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

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

子查詢。列出滿足條件的書籍的書名,書類型和預付款項,要求的書籍,在其所屬類型里其預付值大于該類書籍的平均預付值。SELECT

Title,Type,AdvanceFROMtitlest1WHEREt1.Advance>(SELECT

AVG(t2.Advance)

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

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

SELECT

列名[,列名]

INTO

新表名

FROM

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

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

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

DATENAME(yyyy,pubdate)+‘年’+

DATENAME(mm,pubdate)+‘月’+

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

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

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

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

tempdb

tempdb是臨時數(shù)據(jù)庫,用來存放臨時數(shù)據(jù)。tempdb數(shù)據(jù)庫可以保持的臨時數(shù)據(jù)有:臨時表、臨時存儲過程、變量、游標、排序的中間結果表、查詢中間的結果等。

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

msdb

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

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

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

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

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

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

CREATERULErul_name

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

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

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

sp_bindrulerulage,’Student.sage’廣東海洋大學第四章SQLSERVER的使用共211頁,您現(xiàn)在瀏覽的是第38頁!例子:Newspaper表中的zipcode應為字符類型,并有如下的模式:[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9],不改變表結構,如何實現(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’廣東海洋大學第四章SQLSERVER的使用共211頁,您現(xiàn)在瀏覽的是第39頁!例子:取消Newspaper表的zipcode列上的規(guī)則

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

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

CREATEDEFAULTdefcountryAS‘China’例子:缺省值為‘計算機系’

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

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

取消綁定缺省

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

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

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

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

CREATEVIEWvwEmployeeCandidate

AS

SELECT

E.cCandidateCode,vFirstName,vLastName,cPhone,siTestScore

FROMEmployeeAS

E

JOINInternalCandidateAS

I

ON

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

UPDATEvwEmployeeCandidate

SETcPhone=‘(614)324-5634’

WHEREcCanidateCode=‘000018’UPDATEvwEmployeeCandidate

SETsiTestScore=75

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

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

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

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

sql_statement是任意SQL語句

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

WHILE語句語法解釋:

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

廣東海洋大學第四章SQLSERVER的使用共211頁,您現(xiàn)在瀏覽的是第66頁!例子:計算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)廣東海洋大學第四章SQLSERVER的使用共211頁,您現(xiàn)在瀏覽的是第67頁!DECLARE@markintSELECT@mark=gradeFROMSCWHERESno=‘95001’ANDCno=‘1000’IF@mark<60 PRINT‘學生95001的1000號課程不及格’ELSEBEGINIF@mark>=60and@mark<80 PRINT‘學生95001的1000號課程成績及格’ELSE PRINT‘學生95001的1000號課程成績良好’END廣東海洋大學第四章SQLSERVER的使用共211頁,您現(xiàn)在瀏覽的是第68頁!

CASE語句2.搜索的CASE語法:

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

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

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

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

重編譯存儲過程

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

1.執(zhí)行速度快效率高:因為SQLSERVER會事先將存儲過程編譯成二進制可執(zhí)行代碼,在運行時,SQLSERVER不需要再對存儲過程進行編譯,可以加快執(zhí)行速度。

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

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

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

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

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

CREATEPROC

prcRecruitmentAgencies

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

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

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

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

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

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

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

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

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

RETURN0 END ELSE BEGIN PRINT‘NoRecordsFoundforgivencity’

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

CREATEPROC

prcDisplay@citychar(15)

AS BEGIN

EXEC

prcContractRecruiter@city

EXEC

prcRecruitmentAgencies@city

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

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

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

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

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

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

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

CREATETriggertrgDeleteStudentONStudentAFTERdeleteASUPDATEClassSETQty=Qty-1WHEREClassNo=(SELECTClassNoFROMdeleted)StudentClass這是幻表廣東海洋大學第四章SQLSERVER的使用共211頁,您現(xiàn)在瀏覽的是第93頁!刪除表里存放的是更新前的記錄:對于Delete操作,刪除表放的是要刪除的記錄,對于Update操作,刪除表存放的是更新前的數(shù)據(jù)值。幻表(續(xù))插入表里存放的是更新后的記錄:對于Insert操作,插入表放的是要插入的數(shù)據(jù),對于Update操作,插入表存放的是更新后的數(shù)據(jù)值。廣東海洋大學第四章SQLSERVER的使用共211頁,您現(xiàn)在瀏覽的是第94頁!當‘1071’班的某個學生轉(zhuǎn)班到‘1072’班后,該如何保障班級表各班人數(shù)的正確性?當向?qū)W生表插入新的一個學生時,我們該采取什么措施保障數(shù)據(jù)的完整性?廣東海洋大學第四章SQLSERVER的使用共211頁,您現(xiàn)在瀏覽的是第95頁!設計DML觸發(fā)器的注意事項(續(xù))

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

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

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

trgInsertEmployeeONEmployeeAFTERINSERTASUPDATEPositionSETiCurrentStrength=iCurrentStrength+1WHEREcPositionCode=(SELECTcCurrentPosition

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

trgDeleteStudentONStudentFORDELETEAS IFEXISTS(SELECT*FROMSC

WHERESnoIN(SELECTSnoFROMdeleted)

ROLLBACKTRAN

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

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

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

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

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

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

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

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

UPDATEvwEmployeeCandidate

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

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

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

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

as‘雇傭薪金’FROMContractRecruiter廣東海洋大學第四章SQLSERVER的使用共211頁,您現(xiàn)在瀏覽的是第109頁!使用通配符給Recruitment雇員(Employee)表的cPhone列增加一個約束,要求該列的字符串格式為‘(***)***-****’,其中‘*’為數(shù)字字符。如(120)903-3989就是符合條件的一個例子。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]’)廣東海洋大學第四章SQLSERVER的使用共211頁,您現(xiàn)在瀏覽的是第110頁!顯示頂部幾行與SELECT語句一起使用的TOP子句限制了結果集合中返回的行數(shù)。語法:

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

FROM

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

GROUPBYALL

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

SELECTSno,AVG(Grade)

FROMSC

WHERESnoin(‘95001’,’95002’)

GROUPBY

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

SELECT

列名[,列名]

FROM

表名[WHERE

查詢條件][ORDERBY

列名[,列名]]

COMPUTE

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

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

*

FROMSC

ORDERBYSno

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

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

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

SELECT

vFirstName,vLastName,cName

FROM

ExternalCandidate

JOIN

RecruitmentAgencies

ON

ExternalCandidate.cAgencyCode= RecruitmentAgencies.cAgencyCode

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

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

SELECT

vFirstName,vLastName,cName

FROM

ExternalCandidateLEFTOUTERJOIN

RecruitmentAgencies

ON

ExternalCandidate.cAgencyCode= RecruitmentAgencies.cAgencyCode

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

自身連接。并列輸出價格為2.9900的一對書籍的書名。SELECT

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

AVG(Grade)

FROMSCY

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

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

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

其中SEED為初始值,INCREMENT為步長。

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

溫馨提示

  • 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

提交評論