ch2-關系數(shù)據(jù)庫基礎_第1頁
ch2-關系數(shù)據(jù)庫基礎_第2頁
ch2-關系數(shù)據(jù)庫基礎_第3頁
ch2-關系數(shù)據(jù)庫基礎_第4頁
ch2-關系數(shù)據(jù)庫基礎_第5頁
已閱讀5頁,還剩91頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第2章關系數(shù)據(jù)庫根底國家“十三五”重點出版規(guī)劃工程上海高校優(yōu)秀教材獎獲得者主編數(shù)據(jù)庫原理及應用與實踐

主編賈鐵軍谷偉副主編俞小怡王冠萬程編者戴春妮王堅上海市高校精品課程上海高校優(yōu)質(zhì)在線課程—基于SQLServer2016〔第3版立體化.新形態(tài)〕目錄2.1關系模型概述12.2關系模型的完整性2

2.3常用的關系運算3

*2.4關系演算與查詢優(yōu)化42.5

常量變量函數(shù)和表達式52.6實驗二常量變量函數(shù)及表達式應用62.7本章小結(jié)

7第2章關系數(shù)據(jù)庫根底教學目標●掌握關系模型及關系數(shù)據(jù)庫的根本概念●掌握關系模型的完整性規(guī)那么及用法●熟練掌握常用的關系運算及其應用●了解關系演算和查詢優(yōu)化根本過程●掌握常量變量函數(shù)及表達式應用重點重點重點2.1.1關系模型有關概念1970年,IBM研究員博士在刊物《CommunicationoftheACM》上發(fā)表了一篇論文中提出了關系模型的概念,奠定了關系模型的理論根底,這篇論文被普遍認為是數(shù)據(jù)庫系統(tǒng)歷史上具有劃時代意義的里程碑。關系模型有嚴格的數(shù)學根底,抽象級別比較高,而且簡單清晰,便于理解和使用。1974年ACM牽頭組織了一次研討會,會上開展了一場分別以Codd和Bachman為首的支持和反對關系數(shù)據(jù)庫兩派之間的辯論。這次著名的辯論推動了關系數(shù)據(jù)庫的開展,使其最終成為現(xiàn)代數(shù)據(jù)庫產(chǎn)品的主流。案例2-1復習2.1關系模型概述1.關系模型的常用概念關系模型是用二維表結(jié)構(gòu)形式表示實體及實體之間聯(lián)系的數(shù)據(jù)模型?!?〕屬性、記錄、分量和關系.在關系模型中,二維表的列稱為屬性(也稱字段),各屬性有獨立的名稱,屬性值對應于各行的字段值。二維表的行稱為記錄(也稱元組);一條記錄的一個屬性值被稱為一個分量(也稱為數(shù)據(jù)項);二維表記錄的集合稱為關系,每個關系有一個關系名?!?〕域.是一組相同數(shù)據(jù)類型的屬性值的集合.在關系中用域表示屬性的取值范圍.屬性A的域用DOM〔A〕表示,域中所包含的值的個數(shù)(行數(shù))稱為域的基數(shù)(用m表示).每個屬性對應一個域,不同的屬性可對應同一域。

下述三個域,確定其基數(shù):D1(姓名)={周明,楊濤,張曉東,李立,王軍},m=5D2(年齡)={43,38,41,39,36},D2基數(shù)m=5D3(性別)={男,女},m=22.1.1關系模型有關概念案例2-2屬性的個數(shù)稱為元數(shù),即列數(shù)屬性(字段)元組(記錄)2.1.1關系模型有關概念〔3〕關系模式。關系模式〔RelationSchema〕是對關系的描述方式表示為:R(U,D,dom,F),如客戶(U,A,B,購物)其中,R為關系名,U為組成該關系的屬性名集合,D為屬性組U中屬性所來自的域;dom為屬性向域的映像集合;F為屬性間數(shù)據(jù)的依賴關系集合,——類似函數(shù)F(x,y,z)。注冊日期屬性組注冊順序數(shù)據(jù)表關聯(lián)客戶(客戶ID,客戶名稱,注冊日期,聯(lián)系人ID,類型)2.1.1關系模型有關概念〔4〕關系模型。是關系模式的集合,是用鍵表示實體和實體間聯(lián)系的數(shù)據(jù)模型?!?〕鍵〔Key〕也稱為主鍵或碼,在關系中,用于標識記錄(元組)的屬性或?qū)傩越M。在實際應用中主要有3種鍵。*1〕超鍵。超鍵〔SuperKey〕關系中能唯一標識記錄(元組)的屬性或?qū)傩约Q為關系模式的超鍵。*2〕候選鍵。候選鍵〔CandidateKey〕指不含有多余屬性的超鍵稱為候選鍵。2.1.1關系模型有關概念(學號,課程號,課程名)(商品編號,商品名稱)(學號)(商品編號)3〕外鍵。外鍵〔FK,F(xiàn)oreignKey〕或外碼指假設在模式R中包含有另一個關系S的主鍵所對應的屬性或?qū)傩越MK,那么稱K為R的外鍵.外鍵是一個關系中的屬性或?qū)傩越M,但不是本關系的主鍵,而是另一關系的主鍵,那么稱該屬性或?qū)傩越M是該關系的外鍵,也被稱為外關鍵字。2.1.1關系模型有關概念2.1.2關系的類型和性質(zhì)關系是一個元數(shù)為K〔K>=1〕的元組集合。關系有3種類型:根本表(根本關系常稱表)、查詢表和視圖表.〔1〕根本表實際存在的表,存儲數(shù)據(jù)的邏輯表示?!?〕查詢表是查詢結(jié)果對應的表(關聯(lián)的表)?!?〕視圖表由表/其他視圖表導出的表,虛表。不對應實際存儲數(shù)據(jù)。根本關系具有六條性質(zhì):〔1〕同一屬性(列)的數(shù)據(jù)是同質(zhì)的(Homogeneous),即每列值為同類數(shù)據(jù),且來自同域.(同列同類同域〕?!?〕關系中每個屬性值都不可分解.即各分量都是不可分的數(shù)據(jù)項?!?〕任意兩列不能相同,同一關系的屬性〔列〕名不能重復,即不同列可出自同一個域,稱其中的每列為一個屬性。〔4〕任意兩行元組(記錄)不能完全相同?!?〕列的順序無所謂,即列的次序可任意交換?!?〕行的順序無所謂,即行的次序可任意交換。2.1.3E-R圖轉(zhuǎn)換為關系模型的方法1.實體及聯(lián)系轉(zhuǎn)換關系的規(guī)那么〔1〕實體轉(zhuǎn)換關系(二維表)規(guī)那么:將每個實體轉(zhuǎn)換成一個關系模式時,實體的屬性就是關系的屬性?!?〕二元聯(lián)系的轉(zhuǎn)換規(guī)那么:①假設實體間聯(lián)系是1:1,那么可以在兩個實體任選一個,其關鍵字和聯(lián)系的屬性放入另一個實體對應的關系模式中,關鍵字為后者的關鍵字。②假設實體間聯(lián)系是1:n,方法一是1端實體的關鍵字放入n端實體的關系模式中,聯(lián)系有屬性也一并放入n端,關鍵字是n端的關鍵字;方法二是獨立構(gòu)建一個關系模式,屬性為兩端實體的關鍵字加上聯(lián)系的屬性,而關鍵字為n端實體的關鍵字。③假設實體間聯(lián)系是m:n,新構(gòu)建一個關系模式,其屬性為兩端實體關鍵字加上聯(lián)系的屬性,而關鍵字為兩端實體關鍵字的組合。④假設一個聯(lián)系涉及三個或三個以上實體,那么新構(gòu)建一個關系模式,其屬性是各實體的關鍵字。E-R模型關系模式客觀事物(現(xiàn)實世界)信息世界機械世界2.1.4ER圖轉(zhuǎn)換為關系模型的方法2.轉(zhuǎn)換方法應用【案例2-3輔導員和年級是一對一的聯(lián)系,如圖2-3所示。一端實體的關鍵字放入另一端,其關系模式如下:輔導員〔輔導員ID,教師名,性別,年齡,職稱〕PK:輔導員ID年級〔年級號,所在系,年級名,輔導員ID,接管時間〕PK:年級號FK:輔導員教師對應的關系模式:案例2-3年級年級輔導員ID教師名性別年齡職稱…年級號……年級輔導員ID輔導員ID或—總經(jīng)理管理—企業(yè)方法一:將1端實體的關鍵字和聯(lián)系的屬性與n端關系模式合并,關鍵字為n端的屬性。案例2-4】輔導員和年級是一對多的聯(lián)系,如下圖,其關系模式如下:輔導員〔輔導員ID,教師名,性別,年齡,職稱〕PK:教師號年級〔年級號,所在系,年級名,輔導員ID,接管時間〕PK:年級號FK:輔導員教師號。2.1.4ER圖轉(zhuǎn)換為關系模型的方法案例2-4年級年級年級輔導員ID輔導員ID方法二:聯(lián)系可獨立轉(zhuǎn)換成一個關系模式,其屬性包括兩端實體的關鍵字,以及聯(lián)系的屬性?!景咐?-5】輔導員與年級聯(lián)系是一對多,如下圖.其關系模式如下:輔導員〔教師號,教師名,性別,年齡,職稱〕PK:教師號年級〔年級號,所在系,年級名〕PK:年級號FK:輔導員ID管理〔輔導員ID,年級號,接管時間〕PK:輔導員ID,年級號FK:輔導員ID或年級號2.1.4ER圖轉(zhuǎn)換為關系模型的方法案例2-5年級年級年級年級輔導員ID輔導員ID對于實體之間多對多聯(lián)系的情況,各實體直接可轉(zhuǎn)換為關系模式,聯(lián)系那么獨立轉(zhuǎn)換成一個關系模式,其屬性包括兩端實體的關鍵和聯(lián)系的屬性。案例2-6】兩端實體的關鍵字和聯(lián)系的屬性新構(gòu)建一個模式,屬性為兩端的關鍵字和聯(lián)系的屬性,如下圖,其關系模式如下:學生〔學號,姓名,性別,年齡,籍貫〕PK:學號課程〔課號,課名,課程性質(zhì)〕PK:課號選課〔學號,課號,成績〕2.1.4ER圖轉(zhuǎn)換為關系模型的方法案例2-6〔1〕什么是關系模式?形式化表示是什么?〔2〕關系應該具有哪些性質(zhì)?〔3〕ER模型如何向關系模型轉(zhuǎn)換?討論思考

討論思考2.2關系模型的完整性(1)實體完整性規(guī)那么:主鍵中的主屬性不可取空值。一個根本關系通常對應現(xiàn)實世界的一個實體集。例如學生關系對應于學生的集合。實體完整性如圖2-7所示。圖2-7實體完整性示意圖正確、有效、一致2.2關系模型的完整性(2)參照完整性規(guī)那么(ReferentialIntegrity)要求:假設屬性組F是關系模式R1的主鍵,同時F也是關系模式R2的外鍵,那么在R2的關系中,F的取值只允許兩種可能:空值或等于R1關系中某個主鍵值.R1稱為被參照關系模式,R2稱為參照關系模式。關系模型可以表示為:Customer(CID,CName,RID,CPassword,CRegistrationDate,CType,CStatus,CAccountBalance),PK(主鍵):CID;FK(外鍵):RIDRelation(RID,RName,RIndentityNo,RDuty,RAddress,RContactinfo),PK:RID注意:在實際應用中,外鍵不一定與對應的主鍵同名.在關系模式中,外鍵可用下劃曲線標出。聯(lián)系人客戶F參照完整性就是定義外鍵和主鍵之間的引用規(guī)那么。關系R中每個元組在F上的值必須為空(F的每個屬性值均為空值);或等于S中某個元組的主鍵。2.2關系模型的完整性(3)用戶定義的完整性是針對某一具體關系數(shù)據(jù)庫的約束條件,反映出某一具體應用所涉及的數(shù)據(jù)必須滿足的語義要求。2.2關系模型的完整性〔1〕關系模型中有哪三類完整性約束?〔2〕關系為什么應該滿足實體完整性規(guī)那么和參照完整性規(guī)那么?〔3〕舉例說明用戶定義的完整性規(guī)那么。

討論思考圖2-8用戶定義完整性示意圖2.3常用的關系運算2.3.1關系運算種類及運算符關系代數(shù)的運算對象及結(jié)果都是關系。1.關系運算的種類關系代數(shù)的運算分為兩類:傳統(tǒng)集合運算和專門關系運算?!?〕傳統(tǒng)的集合運算將元組(記錄)作為集合中元素進行運算,其運算是從關系的“水平”方向即行的角度進行的。包括并、差、交和笛卡爾積等運算?!?〕專門的關系運算針對關系數(shù)據(jù)庫的應用而專門設計的。涉及關系的行運算和關系的列運算。它包括選取、投影連接和除等運算。2.3.1關系運算種類及運算符2.關系運算的運算符關系代數(shù)所使用的運算符有4類:〔1〕集合運算符:∪(并),—〔差〕,∩〔交〕,×〔廣義笛卡兒積〕?!?〕專門的關系運算符:σ(選擇〕,π〔投影〕,〔連接〕,÷〔除)〔3〕比較(算數(shù))運算符:>〔大于〕,≥〔大于等于〕,<〔小于〕,≤〔小于等于〕,=〔等于〕,≠〔不等于〕〔4〕邏輯運算符:〔非〕,∧〔與〕,∨〔或〕。2.3.2常用傳統(tǒng)的關系運算傳統(tǒng)的集合運算是二目運算,包括并、差、交、廣義笛卡爾積四種運算.1〕并〔Union〕關系R和關系S的并由屬于R或?qū)儆赟的元組組成,即R和S的所有元組合并,刪除重復元組,組成一個新的關系,其結(jié)果仍為n目關系。記作:R∪S={t|t∈R∨t∈S}其中,t是元組變量〔關系表的行〕對于關系數(shù)據(jù)庫,記錄的插入可通過并運算實現(xiàn)。并異去余R∪S:2.3.2傳統(tǒng)的關系運算關系R關系S【案例2-7】關系R和關系S如表所示,求關系R和S的并集。案例2-7%注意:并、差和交運算R和S的屬性一定要相同,否那么無法進行運算。2.3.2傳統(tǒng)的關系運算2)差〔Difference〕關系R和關系S的差由屬于R而不屬于S的所有元組組成,即R中刪除與S中相同的元組,組成一個新的關系,其結(jié)果仍為n目關系。記作:R-S={t|t∈R∧tS}t是元組變量【案例2-8】有關系R和關系S如表所示,求關系R和關系S的差。關系R關系SR-S:案例2-8前同后去2.3.2傳統(tǒng)的關系運算3)交〔Intersection〕關系R和關系S交由既屬于R又屬于S的元組組成,運算結(jié)果是R和S中相同的元組組成一個新的關系,仍為n目關系。記作:R∩S={t|t∈R∧t∈S}關系的交也可用差表示,即R∩S=R-〔R-S〕。案例2-9】有關系R和關系S如所示,求關系R和關系S的交。關系R關系SR∩S:案例2-9同存共有2.3.2傳統(tǒng)的關系運算4).廣義笛卡爾積兩個分別為n目和m目的關系R和S的廣義笛卡爾積是一個〔m+n〕列的元組的集合,元組的前n列是關系R的一個元組,后m列是關系S的一個元組。假設R有k1個元組,S有k2個元組,那么關系R和關系S的廣義笛卡爾有k1×k2個元組,記作:R×S≡{t︱t=<tr,?ts>∧tr∈R∧ts∈S}案例2-10】有關系R和關系S如所示,求關系R和S的廣義笛卡爾積。

關系R關系SR×S:案例2-10前抄后列2.3.3專門的關系運算專門的關系運算包括4個:選擇、投影、連接、除等。1.選擇運算選擇運算是在表中選擇符合給定條件的元組,即對二維表進行水平分割,記為F〔R〕。其中,為選擇運算符,F(xiàn)表示選擇條件,是一個條件〔邏輯〕表達式。F的形式是由算術(shù)比較運算符〔>,≥,<,≤,=,≠〕和邏輯運算符〔,∧,∨〕連接起來的邏輯表達式,結(jié)果為邏輯值“真”和“假”。選擇運算的形式定義如下:σF〔R〕={t|t∈R∧F(t)=true},XθY:如價格≤38F(R)表示從R中挑(篩)選滿足條件F的元組所構(gòu)成的關系。(比較運算符)看列選行

案例2-11】設有一個如表所示的商品關系。查詢上海生產(chǎn)的商品信息。

選擇運算σ產(chǎn)地=’上?!?/p>

(商品)或σ8=’上海’

(商品)結(jié)果,如表2-9:2.3.3專門的關系運算案例2-11

案例2-12】在表中查詢價格小于80元的商品信息。

選擇運算σ價格<80(商品)或

σ3<80(商品)結(jié)果:2.3.3專門的關系運算案例2-122.3.3專門的關系運算2.投影運算投影運算是在一個關系中選取某些列,并重新安排列的順序,再刪去重復元組,即對二維表進行垂直分割.記作:πA(R).其中,π為投影運算符,A為R中的屬性列。投影運算的形式定義如下:πA〔R〕={t[A]|t∈R}注意:投影運算是對關系進行“垂直分割”,即對元組列方向的“篩選”。投影后不僅取消了原關系中的某些列,而且還可能取消某些元組,因為取消了某些屬性列后,就可能出現(xiàn)重復行,應取消這些完全相同的行??碦定列例2-13】商品關系如表所示,查詢商品的產(chǎn)地。投影運算產(chǎn)地(商品)或8(商品)的結(jié)果,如表。2.3.3專門的關系運算案例2-13商品關系如表所示,查詢商品的名稱和價格。投影運算商品名稱,價格(商品)或2,3(商品)的結(jié)果,如表所示。2.3.3專門的關系運算案例2-142.3.3專門的關系運算3.連接運算連接運算是從兩個關系的笛卡爾積中,選擇兩個關系的屬性滿足一定條件的元組。記作:其中i和j分別是關系R和S中的第i個、第j個屬性.θ是比較運算符.r是關系R的元數(shù).該式表示連接運算是在關系R和S的笛卡兒積中挑選第i個分量和第(r+j)個分量滿足運算的元組。如果為等號“=”,那么這個連接操作稱為等值連接。自然連接是一種特殊的等值連接.要求兩個關系中進行比較的分量必須是相同的屬性組,并在結(jié)果中把重復屬性列去掉.積行去余【案例2-15】設關系R和關系S如表所示,求RS,RS和RS。

〔a〕關系R〔b〕關系S廣義笛卡爾積結(jié)果2.3.3專門的關系運算案例2-15【案例2-15】

設關系R和關系S

如表所示,求RS,RS和RS。(1)

(2)(3)2.3.3專門的關系運算案例2-152.3.3專門的關系運算4.除運算對于給定關系R(X,Y)和S(Y,Z),其中X,Y,Z為屬性組。R中的Y與S中的Y可以有不同的屬性名,但必須出自相同的域集。R與S的除運算得到一個新的關系P(X),P是R中滿足以下條件的元組在X屬性列上的投影:元組在X上分量值x的像集Yx包含S在Y上投影的集合。記作:

其中Yx為x在R中的像集,x=tr[X]。除操作是同時從行和列角度進行運算。分投影分組對應除運算過程:關系的除運算操作是從行和列同時進行的。具體計算過程為:〔1〕將被除關系的屬性分為像集屬性和結(jié)果屬性兩局部,與除關系相同的屬性屬于像集屬性,不相同的屬性屬于結(jié)果屬性。〔2〕在除關系中,在與被除關系相同的屬性〔像集屬性〕上投影,得到除目標數(shù)據(jù)集?!?〕將被除關系分組,將結(jié)果屬性值相同的元組分為一組。〔4〕觀察每個組,假設其像集屬性值中包括除目標數(shù)據(jù)集,那么對應的結(jié)果屬性值應屬于該除法運算結(jié)果集.并差去與原被除關系相同的分組.注意:除法應用.當問題中出現(xiàn)‘至少’、‘全部’、‘所有’等類似的集合包含的概念時,可能會用到除法;用到除法時,關鍵的問題是構(gòu)造除關系和被除關系。2.3.3專門的關系運算分投影分組對應*【法2】投影差選:T=∏1,2,…,r-s(R);W=(TXS)-R;V=∏1,2,…,r-s(W);R÷S=T-V.

設選課和課程關系,求學生選課÷課程數(shù)據(jù)表。2.3.3專門的關系運算案例2-16選課R課程S像集屬性結(jié)果屬性目標數(shù)據(jù)集〔投影〕-S(BX15120,BE16227,BG16245,BG16238)③R分組④對應(BX15120,BE16227)①分②投影*學生選課÷課程數(shù)據(jù)的具體計算過程如下:〔1〕將關系學生選課的學生學號屬性〔列〕投影分為{BX15120,BE16227,BG16245,BG16238}。〔2〕學號屬性〔列〕投影BX15120對課程代碼的像集為{P2637,A3103,P2637},BE16227的像集為{P2637,A3103,P2637},BG16245的像集為{P2637,A3103},BG16238的像集為{P2637}?!?〕在課程數(shù)據(jù)中,在屬性課程代碼上進行投影為{P2637,A3103,P2637}。〔4〕顯然,課程數(shù)據(jù)中課程代碼的投影{P2637,A3103,P2637}包含在學生選課的學號BX15120,BE16227的像集中?!?〕學生選課÷課程數(shù)據(jù)結(jié)果{BX15120,BE16227}。2.3.3專門的關系運算*另方法2.3.3專門的關系運算【案例2-11】設關系訂購和零件數(shù)據(jù)如表2-15和表2-16所示,求訂購÷零件。表2-15訂購關系工程號零件號數(shù)量a1b158a2b143a3b4678a1b265a4b665a2b243a1b258表2-16零件關系零件號零件名顏色b1螺母紅色b2螺釘藍色表2-17定購÷零件結(jié)果工程號數(shù)量a158a243〔b1,b2〕〔a1,58〕,〔a2,43〕〔a3,678〕〔a1,65〕〔a4,65〕像集屬性上海市高校精品課程上海市教育高地工程除目標數(shù)據(jù)集像集屬性結(jié)果屬性補案例③分組④對應①分②投影下面舉幾個關系代數(shù)綜合運算應用的案例。設有商品銷售數(shù)據(jù)庫有三個關系〔表〕,包括商品關系、售貨員關系和售貨關系。三個關系的關系模式如下:會員(會員ID,姓名,性別,所在地區(qū),家庭住址,號碼,入會時間,會員等級)商品〔商品ID,商品名稱,價格,品牌,型號,顏色,生產(chǎn)商,產(chǎn)地〕訂貨〔商品ID,會員ID,姓名,商品名稱,總價,提交時間,是否付款,運送方式,重量,運費〕2.3.3專門的關系運算討論思考〔1〕做交、并、差運算的兩個關系必須滿足什么條件?〔2〕查詢什么什么結(jié)果的運算中用除運算?〔3〕舉例說明自然連接與等值連接的區(qū)別和聯(lián)系?

討論思考

*2.4.1關系演算概述

1.元組關系演算在元組關系演算〔TupleRelationalCalculus〕中,元組關系演算表達式的一般形式為:其中,為元組變量,表示一個元數(shù)固定的元組,是以元組變量為根底的公式。該表達式的含義是使為真的元組的集合。原子公式〔Atoms〕有三種形式:〔1〕?!?〕?!?〕或者。。

*2.4關系演算與查詢優(yōu)化關系演算公式〔Formula〕的遞歸定義如下:2.4.1關系演算概述。

關系代數(shù)表達式轉(zhuǎn)換到元組演算表達式。2.4.1關系演算概述2.域關系演算域關系演算〔DomainRelationalCalculus〕與元組關系演算相似,元組關系演算中表達式使用的是元組變量,元組變量的變化范圍是一個關系,域關系演算表達式中以屬性列為變量,即域變量,域變量的變化范圍是某個屬性的值域。域關系演算的原子公式有兩種形式:〔1〕〔2〕域關系演算表達式的一般形式是:。

2.4.1關系演算概述1、關系代數(shù)表達式的優(yōu)化問題在關系代數(shù)運算中,笛卡爾積和連接運算是最費時間的,通過查詢從“亙立科技”訂貨的商品的商品ID和價格,其中訂貨關系中有500個元組,商品關系中有200個元組。商品〔商品ID,商品名稱,價格,品牌,型號,顏色,生產(chǎn)商,產(chǎn)地〕。訂貨〔商品ID,會員ID,姓名,商品名稱,總價,提交時間,是否付款,運送方式,重量,運費〕。E1=商品ID,數(shù)量〔σ生產(chǎn)商=‘亙立科技’商品.商品ID=訂貨.商品ID〔訂貨X商品〕〕求E1的值,先做訂貨和商品關系的笛卡爾積,具有200X500=10000個元組。E2=商品ID,數(shù)量〔σ商品.商品ID=訂貨.商品ID〔訂貨Xσ生產(chǎn)商=‘亙立科技’〔商品〕〕〕求E2的值,“亙立科技”信息只存在就50,因此,笛卡爾積的結(jié)果是50X500個元組。

求E3的值,由于“亙立科技”在訂貨關系中有100個元組,等值連接后,具有結(jié)果是100X50個元組。2.4.1關系演算概述2.關系代數(shù)等價變換規(guī)那么關系代數(shù)是各種數(shù)據(jù)庫查詢語言的根底,各種查詢語言都能夠轉(zhuǎn)換成關系代數(shù)表達式。所以關系代數(shù)表達式的優(yōu)化是查詢優(yōu)化的根本方法。兩個關系代數(shù)表達式等價是指用同樣的關系實例代替兩個表達式中相應的關系時所得到的結(jié)果是一致的。兩個關系表達式E1和E2等價時,可表示為:E1≡E2。等價變換規(guī)那么指出兩種不同形式的表達式是等價的,可以利用第二種形式的表達式代替第一種,或者用第一種形式的表達式代替第二種。這是因為這兩種表達式在任何有效的數(shù)據(jù)庫中將產(chǎn)生相同的結(jié)果。*2.4.2查詢優(yōu)化常用規(guī)那么及算法常用的等價變換規(guī)那么有:〔1〕笛卡爾積和連接的等價交換律設E1和E2是兩個關系代數(shù)表達式,F(xiàn)是連接運算的條件,那么:〔2〕笛卡爾積和連接的結(jié)合律設E1、E2和E3是三個關系代數(shù)表達式,F(xiàn)1和F2是兩個連接運算的限制條件,F(xiàn)1只涉及到E1和E2的屬性,F(xiàn)2只涉及到E2和E3的屬性,那么:*2.4.2查詢優(yōu)化常用規(guī)那么及算法〔3〕投影的串聯(lián)設E是一個關系代數(shù)表達式,L1,L2,…,Ln是屬性名,那么:〔4〕選擇的串聯(lián)設E是一個關系代數(shù)表達式,F(xiàn)1和F2是兩個選擇條件,那么:〔5〕選擇和投影的交換設E為一個關系代數(shù)表達式,選擇條件F只涉及L中的屬性,那么:*2.4.2查詢優(yōu)化常用規(guī)那么及算法〔6〕選擇對笛卡爾積的分配律設E1和E2是兩個關系代數(shù)表達式,假設條件F只涉及E1的屬性,那么:〔7〕選擇對并的分配律設E1和E2有相同的屬性名,或者E1和E2表達的關系的屬性有對應性,那么:〔8〕選擇對差的分配律設E1和E2有相同的屬性名,或者E1和E2表達的關系的屬性有對應性,那么:*2.4.2查詢優(yōu)化常用規(guī)那么及算法〔9〕投影對并的分配律設E1和E2有相同的屬性名,或者E1和E2表達的關系的屬性有對應性,那么:〔10〕投影對笛卡爾積的分配律設E1和E2是兩個關系代數(shù)表達式,L1是E1的屬性集,L2是E2的屬性集,那么:*2.4.2查詢優(yōu)化常用規(guī)那么及算法3.關系表達式的優(yōu)化算法輸入:一個關系代數(shù)表達式的語法樹。輸出:計算表達式的一個優(yōu)化序列。方法:〔1〕利用等價變換規(guī)那么4把形如變換為〔2〕對每一個選擇,利用等價變換4-8盡可能把它移到葉端?!?〕對每一個投影利用等價變換規(guī)那么3,5,10中的一般形式盡可能把它移向樹的葉端?!?〕利用等價變換規(guī)那么3-5把選擇和投影的串接合并成單個選擇、單個投影或一個選擇后跟一個投影。使多個選擇或投影能同時執(zhí)行,或在一次掃描中全部完成?!?〕把上述得到的語法樹的內(nèi)節(jié)點分組。每一個二元運算和它所有的直接祖先為一組。如果其后代直到葉子全是一元運算,那么也將它們并入該組,但當二元運算是笛卡爾積,而且后面不是與它組成等值連接的選擇時,那么不能把選擇與這個二元運算組成同一組.而是把這些一元運算單獨分為一組.*2.4.2查詢優(yōu)化常用規(guī)那么及算法討論思考:〔1〕什么是關系演算?在關系演算公式中,各種運算符的優(yōu)先級次序是什么?〔2〕域關系演算和元組關系演算有什么區(qū)別和聯(lián)系?〔3〕為什么要進行查詢優(yōu)化?什么是等價變換規(guī)那么?〔4〕舉例說明關系表達式的優(yōu)化過程。*2.4.2查詢優(yōu)化常用規(guī)那么及算法2.5常量變量函數(shù)和表達式2.5.1常規(guī)標識符及使用規(guī)那么在SQL語言中,標識符〔Identifer〕是指用于標識操作對象名稱等的字符串。在SQLServer中,所有的數(shù)據(jù)庫對象都可以有標識符,如效勞器、數(shù)據(jù)庫、表、視圖、索引、約束等。一般操作對象都需要標識符,如創(chuàng)立表時必須指定表名。1.常規(guī)標識符規(guī)那么常規(guī)標識符(Regularidentifer)也稱規(guī)那么標識符,包括五項:〔1〕標識符組成是字母、數(shù)字、下劃線、@(專用)、#和$符號,其中字母可以是大小寫英文,也可以是來自其他語言的字符?!?〕標識符的首字符不允許是數(shù)字或$符號。〔3〕標識符不允許使用SQL的保存字,如命令名、函數(shù)名等?!?〕標識符內(nèi)不允許有空格和特殊字符,如?、%、&、*等。〔5〕標識符長度不超過128字節(jié)。由字符、符號或數(shù)字組成的字符串2.5.1常規(guī)標識符及使用規(guī)那么2.界定標識符界定標識符也叫分隔標識符(定界符)是使用[]、‘’或””等起到分隔作用的符號限定的標識符。帶分隔符的標識符用于以下情況:〔1〕在對象名稱或其組成局部中使用保存字時。保存的關鍵字不應用作對象名稱。從SQLServer早期版本升級的數(shù)據(jù)庫可能包含這樣的標識符:這些標識符包含在早期版本中不是保存字而在SQLServer的當前版本是保存字的字詞。在可以改變對象名稱之前,可以使用帶分隔符的標識符引用對象?!?〕使用未列為限定標識符的字符時。SQLServer允許在帶分隔符的標識符中使用當前代碼頁中的任何字符。但是,不加選擇地在對象名稱中使用特殊字符會使SQL語句和腳本難以閱讀和維護〔如,可創(chuàng)立名為

Employee]

的表,其中右方括號是名稱的一局部〕。假設要執(zhí)行此操作,必須使用兩個方括號以防止因使用右方括號而出現(xiàn)問題,如下所示:CREATETABLE[Employee]](EmployeeIDintIDENTITY(1,1)NOTNULL,FirstNamevarchar(30),LastNamevarchar(30))2.5.1常規(guī)標識符及使用規(guī)那么2.5常量變量函數(shù)和表達式2.5.2常量和變量的表示及用法1.常量的表示及用法

常量是指在程序運行過程中其值保持不變的量。常量是表示一個特定數(shù)據(jù)值的符號,也稱為字面量、文字值或標量值。常量的格式取決于它所表示的值的數(shù)據(jù)類型。

如,‘Thisisabook.’、‘August8,2018’、’29157’和29157等都是常量.對于非數(shù)值型常量需要使用單引號.常量類型數(shù)據(jù)類型說明字符串常量CharvarCharText存放固定長度的字符數(shù)據(jù),n的取值范圍是1~8000存放可變長度的字符數(shù)據(jù),n的取值范圍是1~8000存放最大長度為231-1的字符數(shù)據(jù)數(shù)值常量Intsmallintbiginttinyintdecimal(p,s)mumeric(p,s)float(n)real(n)占4字節(jié),取值范圍為-2147483648~2147483647占2字節(jié),取值范圍為-32768~32767占8字節(jié),取值范圍為-263~263-1占1字節(jié),取值范圍為0~255長度可變,固定精度,取值范圍為-1038-1~1038-1長度可變,固定精度,取值范圍為-1038-1~1038-1長度可變,近似小數(shù),取值范圍為-1.79E+308~1.79E+308長度可變,近似小數(shù),取值范圍為-1.79E+308~1.79E+308日期時間常量datetimedatetime占8字節(jié),日期取值1753年1月1日~9999年12月31日,精確到0.03秒占3字節(jié),日期取值為0001年1月1日~9999年12月31日占3~5字節(jié),時間取值為00:00:00:0000000~23:59:59:9999999貨幣常量money占8字節(jié),取值范圍為-263~263-1,精確到4個小數(shù)位二進制型binaryvarBinaryimage存放定長二進制數(shù)據(jù),n的取值范圍為1~8000存放變長二進制數(shù)據(jù),n的取值范圍為1~8000存放最大長度為231-1的二進制數(shù)據(jù)位類型bit占1字節(jié),存放邏輯值,只能去0、1、null常量和變量常量的數(shù)據(jù)類型2.變量變量是指在程序運行過程中其值可以發(fā)生改變的量?!?〕局部變量①局部變量由用戶定義,是作用域局限在一定范圍內(nèi)的變量.作用域(“定義域”):假設局部變量在一個批處理、存儲過程中被聲明或定義,那么其作用域就在批處理、存儲過程內(nèi)。②局部變量聲明(定義)局部變量聲明(定義)語句的語法格式:DECLARE@變量名數(shù)據(jù)類型[,…n]說明:局部變量必須由@開頭,另外變量名的形式要符合SQLServer標示符的規(guī)那么。局部變量使用的數(shù)據(jù)類型:系統(tǒng)的數(shù)據(jù)類型和用戶自定義數(shù)據(jù)類型.變量不能是text、ntext或image數(shù)據(jù)類型。局部變量必須先聲明〔定義〕,然后在SQL語句中使用,默認初值NULL。

常量和變量③局部變量賦值局部變量賦值語句的語法格式:格式1:SET@變量名=表達式格式2:SELECT@變量名=表達式/SELECT變量名=輸出值FROM表where或SELECT@變量1=表達式1[,@變量2=表達式2,…,@變量n=表達式n]說明:變量名是除cursor,text,ntext,image外的任何類型;表達式是任何有效的SQLServer表達式?!案袷?”可以為多個變量賦值,其中,SELECT@變量名=表達式.用于將單個“表達式”值返回到變量中,假設表達式為列名,那么返回多個.(1)假設SELECT語句返回多個值,那么將返回的最后一個值賦給變量.(2)假設SELECT語句沒有返回值,變量保存當前值;假設表達式是不返回值的子查詢,那么變量為NULL。上海市高校精品課程上海優(yōu)秀教材獎主編光標常量和變量【案例2-7】SELECT命令賦值,執(zhí)行程序。USEeducGODECLARE@var1varchar(8)--聲明局部變量SELECT@var1='學生姓名'--為局部變量賦初始值SELECT@var1=Sname--查詢結(jié)果賦值給變量FROMstudentWHERESID='bj10001'SELECT@var1as'學生姓名'--顯示局部變量結(jié)果執(zhí)行結(jié)果:學生姓名如輸入張偉箭上海市高校精品課程上海優(yōu)秀教材獎主編SIDSname……..student常量和變量補充

【案例2-8】SELECT命令賦值,多個返回值中取最后一個.USEeducgoDECLARE@var1varchar(8)SELECT@var1='讀者姓名'SELECT@var1=Sname--查詢結(jié)果賦值,返回整個列全部值,但最后一個給變量FROMstudentSELECT@var1AS'讀者姓名'--顯示局部變量的結(jié)果執(zhí)行結(jié)果:可輸入不同的讀者(如張曉東)上海市高校精品課程上海優(yōu)秀教材獎主編新字段名常量和變量補充

【案例2-9】SET命令賦值USEeducgoDECLARE@novarchar(10)SET@no='Bj10001'--變量賦值SELECTSID,SnameFROMstudentWHERESID=@no執(zhí)行結(jié)果:上海市高校精品課程上海優(yōu)秀教材獎主編常量和變量補充

〔2〕全局變量系統(tǒng)全局變量是SQLServer系統(tǒng)定義(提供并賦值)的變量.常用于跟蹤效勞器范圍和特定會話期間的信息,不能被用戶顯式地定義和賦值.即用戶不能建/改全局變量,也不能用SET語句改變?nèi)肿兞康闹?。格式:@@變量名記錄SQLServer效勞器活動狀態(tài)的一組數(shù)據(jù),系統(tǒng)提供33個全局變量.常用的全局變量如表2-9所示。全局變量說明全局變量說明@@error上條SQL語句報告的錯誤號@@nestlevel當前存儲過程/觸發(fā)器的嵌套級別@@rowcount上一條SQL語句處理的行數(shù)@@servername本地服務器的名稱@@identity最后插入的標識值@@spid當前用戶進程的會話id@@max_connections可創(chuàng)建并鏈接的最大數(shù)目@@cpu_busy系統(tǒng)自上次啟動后的工作時間@@language當前使用語言的名稱@@servicename該計算機上的SQL服務的名稱@@transcont當前連接打開的事務數(shù)@@versionSQLServer的版本信息上海市高校精品課程上海優(yōu)秀教材獎主編由系統(tǒng)定義和維護表2-9常用的全局常量常量和變量

注意:全局變量以@@開頭,由系統(tǒng)定義和維護,用戶只能顯示和讀取,不能修改;局部變量由@開頭,由用戶定義和賦值.例如,顯示SQLServer的版本。select@@versionselect@@servername--本地效勞器名上海市高校精品課程上海優(yōu)秀教材獎主編常量和變量2.5常量變量函數(shù)和表達式函數(shù)種類主要功能函數(shù)種類主要功能聚合函數(shù)將多個數(shù)值合并為一個數(shù)值,如計算合計值行集函數(shù)可返回一可用于代替SQL語句中表引用的對象配置函數(shù)返回當前配置選項配置的信息安全函數(shù)返回有關用戶和角色的信息加密函數(shù)支持加密、解密、數(shù)字簽名和數(shù)字簽名驗證等操作字符串函數(shù)可以對字符數(shù)據(jù)執(zhí)行替換、截斷、合并等操作游標函數(shù)返回有關游標狀態(tài)的信息元數(shù)據(jù)函數(shù)用于返回數(shù)據(jù)庫和數(shù)據(jù)庫對象的屬性信息排名函數(shù)可以返回分區(qū)中的每一行的排名值系統(tǒng)統(tǒng)計函數(shù)返回有關SQLServer系統(tǒng)性能統(tǒng)計的信息數(shù)學函數(shù)執(zhí)行對數(shù)、指數(shù)、三角函數(shù)、平方根等數(shù)學運算文本和圖像函數(shù)用于執(zhí)行更改TEXT和IMAGE值的操作系統(tǒng)函數(shù)對系統(tǒng)級的各種選項和對象進行操作或報告日期時間函數(shù)可以執(zhí)行與日期、時間數(shù)據(jù)相關的操作2.5.3常用函數(shù)及其用法

函數(shù)是指具有可以完成某種特定功能的程序,并返回處理結(jié)果的一組SQL語句,其處理結(jié)果稱為“返回值”,處理過程稱為“函數(shù)體”。SQLServer同其他程序設計語言類似,提供了豐富的內(nèi)置函數(shù),也允許用戶自定義函數(shù)。利用這些函數(shù)可方便地實現(xiàn)各種運算和操作。表2-23常用內(nèi)置函數(shù)種類和功能2.5.3常用函數(shù)及其用法1.聚合函數(shù)聚合函數(shù)也稱為統(tǒng)計函數(shù),所有聚合函數(shù)均為確定性函數(shù),只要使用一組特定輸入值〔數(shù)值型〕調(diào)用聚合函數(shù),該函數(shù)總是返回同類型的值。函數(shù)名稱功能描述AVG返回組中各值的平均值,若為空將被忽略CHECKSUM用于生成哈希索引,返回按表某行或組表達式計算出的校驗和值CHECKSUM_AGG返回組中各值的校驗和,若為空將被忽略COUNT返回組中項值的數(shù)量,若為空也將計數(shù)COUNT_BIG返回組中項值的數(shù)量。與COUNT函數(shù)唯一差別是其返回值。COUNT_BIG總返回bigint型值。COUNT始終返回int型值GROUPING當行由CUBE/ROLLUP運算符添加時,該函數(shù)將導致附加列的輸出1;當行不由這兩種運算符添加時,將導致附加列的輸出0MAX返回組中值列表的最大值MIN返回組中值列表的最小值SUM返回組中各值的總和STDEV返回指定表達式中所有值的標準偏差STDEVP返回指定表達式中所有值的總體標準偏差VAR返回指定表達式中所有值的方差VARP返回指定表達式中所有值的總體方差

2.數(shù)學函數(shù)

數(shù)學函數(shù)用于對數(shù)字表達式進行數(shù)學運算并返回運算結(jié)果。SQLServer提供了20多個用于處理整數(shù)與浮點值的數(shù)學函數(shù)。2.5.3常用函數(shù)及其用法函數(shù)說明ABS返回數(shù)值表達式的絕對值EXP返回指定表達式以e為底的指數(shù)-exCEILING返回大于或等于數(shù)值表達式的最小整數(shù)FLOOR返回小于或等于數(shù)值表達式的最大整數(shù)LN返回數(shù)值表達式的自然對數(shù)LOG返回數(shù)值表達式以10為底的對數(shù)POWER返回對數(shù)值表達式進行冪運算的結(jié)果ROUND返回舍入到指定長度/精度的數(shù)值表達式SIGN返回數(shù)值表達式的正號(+)、負號(-)或零(0)SQUARE返回數(shù)值表達式的平方SQRT返回數(shù)值表達式的平方根2.5.3常用函數(shù)及其用法3.字符函數(shù)

字符函數(shù)也稱為字符串函數(shù),用于計算、格式化和處理字符串參數(shù),或?qū)ο筠D(zhuǎn)換為字符串.常見的字符函數(shù)如表2-13所示.字符函數(shù)說明ASCIIASCII函數(shù),返回字符表達式中最左側(cè)的字符的ASCII代碼值CHARASCII代碼轉(zhuǎn)換函數(shù),返回指定ASCII代碼的字符LEFT左子串函數(shù),返回字符串中從左邊開始指定個數(shù)的字符LEN字符串函數(shù),返回指定表達式的字符(非字節(jié))數(shù),不含尾部空格LOWER小寫字母函數(shù),將大寫字符轉(zhuǎn)換為小寫字符后返回字符表達式LTRIM刪除前導空格字符串,返回刪除前導空格后的字符表達式REPLACE(e1,e2,e3)替換函數(shù),用第3個表達式替換第1個表達式中出現(xiàn)的所有第2個指定字符串表達式的匹配項REPLICATE復制函數(shù),以指定的次數(shù)重復字符表達式,如********------RIGHT右子串函數(shù),返回字符串中從右邊開始指定個數(shù)的字符RTRIM刪除尾隨空格函數(shù),刪除所有尾隨空格后返回一個字符串SPACE空格函數(shù),返回由重復的空格組成的字符串STR數(shù)字向字符轉(zhuǎn)換函數(shù),返回由數(shù)字數(shù)據(jù)轉(zhuǎn)換來的字符數(shù)據(jù)SUBSTRING子串函數(shù),返回4種表達式(字符,二進制,文本和圖像)的一部分UPPER大寫函數(shù),返回小寫字符數(shù)據(jù)轉(zhuǎn)換為大寫的字符表達式SELECTREPLACE(''abcdefghicde'',''cde'',''xxx'')

結(jié)果:abxxxfghixxx〔1〕ASCII().返回字符表達式最左端字符的ASCII代碼值。例如:DECLARE@StringTestchar(10)SET@StringTest=ASCII('Robin')SELECT@StringTest〔2〕CHAR()。將intASCII代碼轉(zhuǎn)換為字符的字符串函數(shù)。例如:DECLARE@StringTestchar(10)SET@StringTest=ASCII('Robin')SELECTCHAR(@StringTest)上海市高校精品課程上海優(yōu)秀教材獎主編822.5.3常用函數(shù)及其用法補充

〔3〕LEFT()。返回從字符串左邊開始指定個數(shù)的字符。例如:DECLARE@StringTestchar(10)SET@StringTest='Robin'SELECTLEFT(@StringTest,3)〔4〕LOWER()。將大寫字符數(shù)據(jù)轉(zhuǎn)換為小寫字符數(shù)據(jù)后返回字符表達式。例如:DECLARE@StringTestchar(10)SET@StringTest='Robin'SELECTLOWER(LEFT(@StringTest,3))上海市高校精品課程上海優(yōu)秀教材獎主編Rob2.5.3常用函數(shù)及其用法〔5〕LTRIM()。刪除起始空格后返回字符表達式。例如DECLARE@StringTestchar(10)SET@StringTest='Robin'SELECT'Start-'+LTRIM(@StringTest),'Start-'+@StringTest〔6〕RIGHT()。返回字符串中從右邊開始指定個數(shù)的integer_expression字符。例如:DECLARE@StringTestchar(10)SET@StringTest='Robin'SELECTRIGHT(@StringTest,3)上海市高校精品課程上海優(yōu)秀教材獎主編2.5.3常用函數(shù)及其用法〔7〕RTRIM()。截斷所有尾隨空格后返回一個字符串.例如:DECLARE@StringTestchar(10)SET@StringTest='Robin'SELECT@StringTest+'-End',RTRIM(@StringTest)+'-End’〔8〕STR()。將數(shù)字數(shù)據(jù)轉(zhuǎn)換為字符數(shù)據(jù)。例如:SELECT‘A’+82XSELECT'A'+STR(82)SELECT'A'+LTRIM(STR(82))上海市高校精品課程上海優(yōu)秀教材獎主編2.5.3常用函數(shù)及其用法〔9〕SUBSTRING()。求子串函數(shù)。例如:DECLARE@StringTestchar(10)SET@StringTest='Robin'SELECTSUBSTRING(@StringTest,3,LEN(@StringTest))〔10〕UPPER()。返回將小寫字符數(shù)據(jù)轉(zhuǎn)換為大寫的字符表達式。例如:DECLARE@StringTestchar(10)SET@StringTest='Robin'SELECTUPPER(@StringTest)長度為5個字符3開始上海市高校精品課程上海優(yōu)秀教材獎主編2.5.3常用函數(shù)及其用法

4.日期時間函數(shù)SQLServer提供了9個日期和時間處理函數(shù)。其中的一些函數(shù)接受datepart變元,這個變元指定函數(shù)處理日期與時間所使用的時間粒度。常量含義常量含義yy或yyyy年dy或y年日期qq或q季dd或d日mm或m月Hh時wk或ww周mi或n分dw或w周日期ss或s秒ms毫秒

日期函數(shù)說明DATEADD返回給指定日期加上一個時間間隔后的新datetime值。DATEDIFF返回跨兩個指定日期的日期邊界數(shù)和時間邊界數(shù)。DATENAME返回表示指定日期的指定日期部分的字符串。DATEPART返回表示指定日期的指定日期部分的整數(shù)。DAY返回一個整數(shù),表示指定日期的天DATEPART部分。GETDATE以datetime值的SQLServer標準內(nèi)部格式返回當前系統(tǒng)日期和時間。GETUTCDATE返回當前的UTC時間(通用協(xié)調(diào)時間/格林尼治標準時間)的datetime值.來自當前的本地時間和運行SQL實例的操作系統(tǒng)中的時區(qū)設置。MONTH返回表示指定日期的“月”部分的整數(shù)。YEAR返回表示指定日期的年份的整數(shù)。2.5.3常用函數(shù)及其用法*在系統(tǒng)設計中經(jīng)常會有對時間的處理,下面例子將輸出格式化的日期:2.5.3常用函數(shù)及其用法*5.自定義函數(shù)在SQLServer中,可用CREATEFUNCTION語句創(chuàng)立自定義函數(shù),根據(jù)函數(shù)返回值形式的不同,可創(chuàng)立三類自定義函數(shù),分別是標量值自定義函數(shù)、內(nèi)聯(lián)表值自定義函數(shù)和多語句表值自定義函數(shù)?!?〕標量值函數(shù)標量值自定義函數(shù)返回一個確定類型的標量值,其返回的值類型為除text、ntext、image、cursor、timestamp和table類型外的其他數(shù)據(jù)類型。即標量值自定義函數(shù)返回的是一個數(shù)值。2.5.3常用函數(shù)及其用法標量值自定義函數(shù)的語法結(jié)構(gòu)為:CREATEFUNCTIONfunction_name([{@parameter_namescalar_parameter_data_type[=default]}[,…n]])RETURNSscalar_return_data_type[WITHENCRYPTION][AS]BEGIN

function_body

RETURNscalar_expressionEND2.5.3常用函數(shù)及其用法語法中各參數(shù)含義如下:〔1〕function_name

自定義函數(shù)的名稱;〔2〕@parameter_name

輸入?yún)?shù)名;〔3〕scalar_parameter_data_type

輸入?yún)?shù)的數(shù)據(jù)類型;〔4〕RETURNSscalar_return_data_type

子句定義了函數(shù)返回值的數(shù)據(jù)類型,該數(shù)據(jù)類型不能是text、ntext、image、cursor、timestamp和table類型;〔5〕WITH子句指出了創(chuàng)立函數(shù)的選項。假設指定了ENCRYPTION參數(shù),那么創(chuàng)立的函數(shù)是被加密的,函數(shù)定義的文本將以不可讀的形式存儲在syscomments表中,任何人都不能查看該函數(shù)的定義,包括函數(shù)的創(chuàng)立者和系統(tǒng)管理員;〔6〕BEGIN…END語句塊內(nèi)定義了函數(shù)體〔function_body〕,以及包含RETURN語句,用于返回值。2.5.3常用函數(shù)及其用法〔2〕內(nèi)聯(lián)表值函數(shù)內(nèi)聯(lián)表值函數(shù)是以表的形式返回一個值〔表〕。內(nèi)聯(lián)表值自定義函數(shù)沒有由BEGIN…END語句塊中包含的函數(shù)體,而是直接使用RETURN子句,其中包含的SELECT語句將數(shù)據(jù)從數(shù)據(jù)庫中篩選出形成一個表。使用內(nèi)聯(lián)表值自定義函數(shù)可提供參數(shù)化的視圖功能。內(nèi)聯(lián)表值自定義函數(shù)的語法結(jié)構(gòu)為:CREATEFUNCTIONfunction_name([{@parameter_namescalar_parameter_data_type[=default]}[,…n]])RETURNSTABLE[WITHENCRYPTION][AS]RETURN(select_statement)2.5.3常用函數(shù)及其用法〔3〕多語句表值函數(shù)多語句表值自定義函數(shù)可以看作標量型和內(nèi)聯(lián)表值型函數(shù)的結(jié)合體。該類函數(shù)的返回值是一個表,但與標量值自定義函數(shù)一樣,有一個用BEGIN…END語句塊中包含起來的函數(shù)體,返回值的表中的數(shù)據(jù)是由函數(shù)體中的語句插入的。由此可見,其可以進行屢次查詢,對數(shù)據(jù)進行屢次篩選與合并,彌補了內(nèi)聯(lián)表值自定義函數(shù)的缺乏。2.5.3常用函數(shù)及其用法2.5.4常用表達式概述表達式是指由常量、變量、函數(shù)等通過運算符按規(guī)那么要求連接的式子。1.SQL表達式表達式是用于在“列與列之間”或“在變量之間”進行比較以及數(shù)學運算的符號。在SQLServer中,表達式共有數(shù)學表達式、字符串表達式、比較表達式和邏輯表達式四種表達式的類型。2.5常量變量函數(shù)和表達式2.數(shù)學表達式數(shù)學表達式用于各種數(shù)字變量的運算。數(shù)字變量的數(shù)據(jù)類型共有:INT,SMALLINT,TINYINT,F(xiàn)LOAT,REAL,MONEY或SMALLMONEY。而數(shù)學表達式的符號有:加〔+〕、減〔-〕、乘〔*〕、除〔/〕和取余〔%〕。常用表達式概述符號功能所使用的數(shù)據(jù)類型+加INT,SMALLINT,TINYINT,F(xiàn)LOAT,REAL,MONEY或SMALLMONEY-減INT,SMALLINT,TINYINT,F(xiàn)LOAT,REAL,MONEY或SMALLMONEY*乘INT,SMALLINT,TINYINT,F(xiàn)LOAT,REAL,MONEY或SMALLMONEY/除INT,SMALLINT,TINYINT,F(xiàn)LOAT,REAL,MONEY或SMALLMONEY%取余INT,SMALLINT,TINYINT3.字符串表達式字符串是由字符、符號或數(shù)字所組成的一串字符,字符串表達式是用于字符

溫馨提示

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

評論

0/150

提交評論