版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第2章關(guān)系數(shù)據(jù)庫根底國家“十三五”重點(diǎn)出版規(guī)劃工程上海高校優(yōu)秀教材獎獲得者主編數(shù)據(jù)庫原理及應(yīng)用與實(shí)踐
主編賈鐵軍谷偉副主編俞小怡王冠萬程編者戴春妮王堅(jiān)上海市高校精品課程上海高校優(yōu)質(zhì)在線課程—基于SQLServer2016〔第3版立體化.新形態(tài)〕目錄2.1關(guān)系模型概述12.2關(guān)系模型的完整性2
2.3常用的關(guān)系運(yùn)算3
*2.4關(guān)系演算與查詢優(yōu)化42.5
常量變量函數(shù)和表達(dá)式52.6實(shí)驗(yàn)二常量變量函數(shù)及表達(dá)式應(yīng)用62.7本章小結(jié)
7第2章關(guān)系數(shù)據(jù)庫根底教學(xué)目標(biāo)●掌握關(guān)系模型及關(guān)系數(shù)據(jù)庫的根本概念●掌握關(guān)系模型的完整性規(guī)那么及用法●熟練掌握常用的關(guān)系運(yùn)算及其應(yīng)用●了解關(guān)系演算和查詢優(yōu)化根本過程●掌握常量變量函數(shù)及表達(dá)式應(yīng)用重點(diǎn)重點(diǎn)重點(diǎn)2.1.1關(guān)系模型有關(guān)概念1970年,IBM研究員博士在刊物《CommunicationoftheACM》上發(fā)表了一篇論文中提出了關(guān)系模型的概念,奠定了關(guān)系模型的理論根底,這篇論文被普遍認(rèn)為是數(shù)據(jù)庫系統(tǒng)歷史上具有劃時代意義的里程碑。關(guān)系模型有嚴(yán)格的數(shù)學(xué)根底,抽象級別比較高,而且簡單清晰,便于理解和使用。1974年ACM牽頭組織了一次研討會,會上開展了一場分別以Codd和Bachman為首的支持和反對關(guān)系數(shù)據(jù)庫兩派之間的辯論。這次著名的辯論推動了關(guān)系數(shù)據(jù)庫的開展,使其最終成為現(xiàn)代數(shù)據(jù)庫產(chǎn)品的主流。案例2-1復(fù)習(xí)2.1關(guān)系模型概述1.關(guān)系模型的常用概念關(guān)系模型是用二維表結(jié)構(gòu)形式表示實(shí)體及實(shí)體之間聯(lián)系的數(shù)據(jù)模型?!?〕屬性、記錄、分量和關(guān)系.在關(guān)系模型中,二維表的列稱為屬性(也稱字段),各屬性有獨(dú)立的名稱,屬性值對應(yīng)于各行的字段值。二維表的行稱為記錄(也稱元組);一條記錄的一個屬性值被稱為一個分量(也稱為數(shù)據(jù)項(xiàng));二維表記錄的集合稱為關(guān)系,每個關(guān)系有一個關(guān)系名?!?〕域.是一組相同數(shù)據(jù)類型的屬性值的集合.在關(guān)系中用域表示屬性的取值范圍.屬性A的域用DOM〔A〕表示,域中所包含的值的個數(shù)(行數(shù))稱為域的基數(shù)(用m表示).每個屬性對應(yīng)一個域,不同的屬性可對應(yīng)同一域。
下述三個域,確定其基數(shù):D1(姓名)={周明,楊濤,張曉東,李立,王軍},m=5D2(年齡)={43,38,41,39,36},D2基數(shù)m=5D3(性別)={男,女},m=22.1.1關(guān)系模型有關(guān)概念案例2-2屬性的個數(shù)稱為元數(shù),即列數(shù)屬性(字段)元組(記錄)2.1.1關(guān)系模型有關(guān)概念〔3〕關(guān)系模式。關(guān)系模式〔RelationSchema〕是對關(guān)系的描述方式表示為:R(U,D,dom,F),如客戶(U,A,B,購物)其中,R為關(guān)系名,U為組成該關(guān)系的屬性名集合,D為屬性組U中屬性所來自的域;dom為屬性向域的映像集合;F為屬性間數(shù)據(jù)的依賴關(guān)系集合,——類似函數(shù)F(x,y,z)。注冊日期屬性組注冊順序數(shù)據(jù)表關(guān)聯(lián)客戶(客戶ID,客戶名稱,注冊日期,聯(lián)系人ID,類型)2.1.1關(guān)系模型有關(guān)概念〔4〕關(guān)系模型。是關(guān)系模式的集合,是用鍵表示實(shí)體和實(shí)體間聯(lián)系的數(shù)據(jù)模型。〔5〕鍵〔Key〕也稱為主鍵或碼,在關(guān)系中,用于標(biāo)識記錄(元組)的屬性或?qū)傩越M。在實(shí)際應(yīng)用中主要有3種鍵。*1〕超鍵。超鍵〔SuperKey〕關(guān)系中能唯一標(biāo)識記錄(元組)的屬性或?qū)傩约Q為關(guān)系模式的超鍵。*2〕候選鍵。候選鍵〔CandidateKey〕指不含有多余屬性的超鍵稱為候選鍵。2.1.1關(guān)系模型有關(guān)概念(學(xué)號,課程號,課程名)(商品編號,商品名稱)(學(xué)號)(商品編號)3〕外鍵。外鍵〔FK,F(xiàn)oreignKey〕或外碼指假設(shè)在模式R中包含有另一個關(guān)系S的主鍵所對應(yīng)的屬性或?qū)傩越MK,那么稱K為R的外鍵.外鍵是一個關(guān)系中的屬性或?qū)傩越M,但不是本關(guān)系的主鍵,而是另一關(guān)系的主鍵,那么稱該屬性或?qū)傩越M是該關(guān)系的外鍵,也被稱為外關(guān)鍵字。2.1.1關(guān)系模型有關(guān)概念2.1.2關(guān)系的類型和性質(zhì)關(guān)系是一個元數(shù)為K〔K>=1〕的元組集合。關(guān)系有3種類型:根本表(根本關(guān)系常稱表)、查詢表和視圖表.〔1〕根本表實(shí)際存在的表,存儲數(shù)據(jù)的邏輯表示?!?〕查詢表是查詢結(jié)果對應(yīng)的表(關(guān)聯(lián)的表)?!?〕視圖表由表/其他視圖表導(dǎo)出的表,虛表。不對應(yīng)實(shí)際存儲數(shù)據(jù)。根本關(guān)系具有六條性質(zhì):〔1〕同一屬性(列)的數(shù)據(jù)是同質(zhì)的(Homogeneous),即每列值為同類數(shù)據(jù),且來自同域.(同列同類同域〕?!?〕關(guān)系中每個屬性值都不可分解.即各分量都是不可分的數(shù)據(jù)項(xiàng)。〔3〕任意兩列不能相同,同一關(guān)系的屬性〔列〕名不能重復(fù),即不同列可出自同一個域,稱其中的每列為一個屬性?!?〕任意兩行元組(記錄)不能完全相同?!?〕列的順序無所謂,即列的次序可任意交換?!?〕行的順序無所謂,即行的次序可任意交換。2.1.3E-R圖轉(zhuǎn)換為關(guān)系模型的方法1.實(shí)體及聯(lián)系轉(zhuǎn)換關(guān)系的規(guī)那么〔1〕實(shí)體轉(zhuǎn)換關(guān)系(二維表)規(guī)那么:將每個實(shí)體轉(zhuǎn)換成一個關(guān)系模式時,實(shí)體的屬性就是關(guān)系的屬性。〔2〕二元聯(lián)系的轉(zhuǎn)換規(guī)那么:①假設(shè)實(shí)體間聯(lián)系是1:1,那么可以在兩個實(shí)體任選一個,其關(guān)鍵字和聯(lián)系的屬性放入另一個實(shí)體對應(yīng)的關(guān)系模式中,關(guān)鍵字為后者的關(guān)鍵字。②假設(shè)實(shí)體間聯(lián)系是1:n,方法一是1端實(shí)體的關(guān)鍵字放入n端實(shí)體的關(guān)系模式中,聯(lián)系有屬性也一并放入n端,關(guān)鍵字是n端的關(guān)鍵字;方法二是獨(dú)立構(gòu)建一個關(guān)系模式,屬性為兩端實(shí)體的關(guān)鍵字加上聯(lián)系的屬性,而關(guān)鍵字為n端實(shí)體的關(guān)鍵字。③假設(shè)實(shí)體間聯(lián)系是m:n,新構(gòu)建一個關(guān)系模式,其屬性為兩端實(shí)體關(guān)鍵字加上聯(lián)系的屬性,而關(guān)鍵字為兩端實(shí)體關(guān)鍵字的組合。④假設(shè)一個聯(lián)系涉及三個或三個以上實(shí)體,那么新構(gòu)建一個關(guān)系模式,其屬性是各實(shí)體的關(guān)鍵字。E-R模型關(guān)系模式客觀事物(現(xiàn)實(shí)世界)信息世界機(jī)械世界2.1.4ER圖轉(zhuǎn)換為關(guān)系模型的方法2.轉(zhuǎn)換方法應(yīng)用【案例2-3輔導(dǎo)員和年級是一對一的聯(lián)系,如圖2-3所示。一端實(shí)體的關(guān)鍵字放入另一端,其關(guān)系模式如下:輔導(dǎo)員〔輔導(dǎo)員ID,教師名,性別,年齡,職稱〕PK:輔導(dǎo)員ID年級〔年級號,所在系,年級名,輔導(dǎo)員ID,接管時間〕PK:年級號FK:輔導(dǎo)員教師對應(yīng)的關(guān)系模式:案例2-3年級年級輔導(dǎo)員ID教師名性別年齡職稱…年級號……年級輔導(dǎo)員ID輔導(dǎo)員ID或—總經(jīng)理管理—企業(yè)方法一:將1端實(shí)體的關(guān)鍵字和聯(lián)系的屬性與n端關(guān)系模式合并,關(guān)鍵字為n端的屬性。案例2-4】輔導(dǎo)員和年級是一對多的聯(lián)系,如下圖,其關(guān)系模式如下:輔導(dǎo)員〔輔導(dǎo)員ID,教師名,性別,年齡,職稱〕PK:教師號年級〔年級號,所在系,年級名,輔導(dǎo)員ID,接管時間〕PK:年級號FK:輔導(dǎo)員教師號。2.1.4ER圖轉(zhuǎn)換為關(guān)系模型的方法案例2-4年級年級年級輔導(dǎo)員ID輔導(dǎo)員ID方法二:聯(lián)系可獨(dú)立轉(zhuǎn)換成一個關(guān)系模式,其屬性包括兩端實(shí)體的關(guān)鍵字,以及聯(lián)系的屬性?!景咐?-5】輔導(dǎo)員與年級聯(lián)系是一對多,如下圖.其關(guān)系模式如下:輔導(dǎo)員〔教師號,教師名,性別,年齡,職稱〕PK:教師號年級〔年級號,所在系,年級名〕PK:年級號FK:輔導(dǎo)員ID管理〔輔導(dǎo)員ID,年級號,接管時間〕PK:輔導(dǎo)員ID,年級號FK:輔導(dǎo)員ID或年級號2.1.4ER圖轉(zhuǎn)換為關(guān)系模型的方法案例2-5年級年級年級年級輔導(dǎo)員ID輔導(dǎo)員ID對于實(shí)體之間多對多聯(lián)系的情況,各實(shí)體直接可轉(zhuǎn)換為關(guān)系模式,聯(lián)系那么獨(dú)立轉(zhuǎn)換成一個關(guān)系模式,其屬性包括兩端實(shí)體的關(guān)鍵和聯(lián)系的屬性。案例2-6】兩端實(shí)體的關(guān)鍵字和聯(lián)系的屬性新構(gòu)建一個模式,屬性為兩端的關(guān)鍵字和聯(lián)系的屬性,如下圖,其關(guān)系模式如下:學(xué)生〔學(xué)號,姓名,性別,年齡,籍貫〕PK:學(xué)號課程〔課號,課名,課程性質(zhì)〕PK:課號選課〔學(xué)號,課號,成績〕2.1.4ER圖轉(zhuǎn)換為關(guān)系模型的方法案例2-6〔1〕什么是關(guān)系模式?形式化表示是什么?〔2〕關(guān)系應(yīng)該具有哪些性質(zhì)?〔3〕ER模型如何向關(guān)系模型轉(zhuǎn)換?討論思考
討論思考2.2關(guān)系模型的完整性(1)實(shí)體完整性規(guī)那么:主鍵中的主屬性不可取空值。一個根本關(guān)系通常對應(yīng)現(xiàn)實(shí)世界的一個實(shí)體集。例如學(xué)生關(guān)系對應(yīng)于學(xué)生的集合。實(shí)體完整性如圖2-7所示。圖2-7實(shí)體完整性示意圖正確、有效、一致2.2關(guān)系模型的完整性(2)參照完整性規(guī)那么(ReferentialIntegrity)要求:假設(shè)屬性組F是關(guān)系模式R1的主鍵,同時F也是關(guān)系模式R2的外鍵,那么在R2的關(guān)系中,F的取值只允許兩種可能:空值或等于R1關(guān)系中某個主鍵值.R1稱為被參照關(guān)系模式,R2稱為參照關(guān)系模式。關(guān)系模型可以表示為:Customer(CID,CName,RID,CPassword,CRegistrationDate,CType,CStatus,CAccountBalance),PK(主鍵):CID;FK(外鍵):RIDRelation(RID,RName,RIndentityNo,RDuty,RAddress,RContactinfo),PK:RID注意:在實(shí)際應(yīng)用中,外鍵不一定與對應(yīng)的主鍵同名.在關(guān)系模式中,外鍵可用下劃曲線標(biāo)出。聯(lián)系人客戶F參照完整性就是定義外鍵和主鍵之間的引用規(guī)那么。關(guān)系R中每個元組在F上的值必須為空(F的每個屬性值均為空值);或等于S中某個元組的主鍵。2.2關(guān)系模型的完整性(3)用戶定義的完整性是針對某一具體關(guān)系數(shù)據(jù)庫的約束條件,反映出某一具體應(yīng)用所涉及的數(shù)據(jù)必須滿足的語義要求。2.2關(guān)系模型的完整性〔1〕關(guān)系模型中有哪三類完整性約束?〔2〕關(guān)系為什么應(yīng)該滿足實(shí)體完整性規(guī)那么和參照完整性規(guī)那么?〔3〕舉例說明用戶定義的完整性規(guī)那么。
討論思考圖2-8用戶定義完整性示意圖2.3常用的關(guān)系運(yùn)算2.3.1關(guān)系運(yùn)算種類及運(yùn)算符關(guān)系代數(shù)的運(yùn)算對象及結(jié)果都是關(guān)系。1.關(guān)系運(yùn)算的種類關(guān)系代數(shù)的運(yùn)算分為兩類:傳統(tǒng)集合運(yùn)算和專門關(guān)系運(yùn)算?!?〕傳統(tǒng)的集合運(yùn)算將元組(記錄)作為集合中元素進(jìn)行運(yùn)算,其運(yùn)算是從關(guān)系的“水平”方向即行的角度進(jìn)行的。包括并、差、交和笛卡爾積等運(yùn)算。〔2〕專門的關(guān)系運(yùn)算針對關(guān)系數(shù)據(jù)庫的應(yīng)用而專門設(shè)計的。涉及關(guān)系的行運(yùn)算和關(guān)系的列運(yùn)算。它包括選取、投影連接和除等運(yùn)算。2.3.1關(guān)系運(yùn)算種類及運(yùn)算符2.關(guān)系運(yùn)算的運(yùn)算符關(guān)系代數(shù)所使用的運(yùn)算符有4類:〔1〕集合運(yùn)算符:∪(并),—〔差〕,∩〔交〕,×〔廣義笛卡兒積〕?!?〕專門的關(guān)系運(yùn)算符:σ(選擇〕,π〔投影〕,〔連接〕,÷〔除)〔3〕比較(算數(shù))運(yùn)算符:>〔大于〕,≥〔大于等于〕,<〔小于〕,≤〔小于等于〕,=〔等于〕,≠〔不等于〕〔4〕邏輯運(yùn)算符:〔非〕,∧〔與〕,∨〔或〕。2.3.2常用傳統(tǒng)的關(guān)系運(yùn)算傳統(tǒng)的集合運(yùn)算是二目運(yùn)算,包括并、差、交、廣義笛卡爾積四種運(yùn)算.1〕并〔Union〕關(guān)系R和關(guān)系S的并由屬于R或?qū)儆赟的元組組成,即R和S的所有元組合并,刪除重復(fù)元組,組成一個新的關(guān)系,其結(jié)果仍為n目關(guān)系。記作:R∪S={t|t∈R∨t∈S}其中,t是元組變量〔關(guān)系表的行〕對于關(guān)系數(shù)據(jù)庫,記錄的插入可通過并運(yùn)算實(shí)現(xiàn)。并異去余R∪S:2.3.2傳統(tǒng)的關(guān)系運(yùn)算關(guān)系R關(guān)系S【案例2-7】關(guān)系R和關(guān)系S如表所示,求關(guān)系R和S的并集。案例2-7%注意:并、差和交運(yùn)算R和S的屬性一定要相同,否那么無法進(jìn)行運(yùn)算。2.3.2傳統(tǒng)的關(guān)系運(yùn)算2)差〔Difference〕關(guān)系R和關(guān)系S的差由屬于R而不屬于S的所有元組組成,即R中刪除與S中相同的元組,組成一個新的關(guān)系,其結(jié)果仍為n目關(guān)系。記作:R-S={t|t∈R∧tS}t是元組變量【案例2-8】有關(guān)系R和關(guān)系S如表所示,求關(guān)系R和關(guān)系S的差。關(guān)系R關(guān)系SR-S:案例2-8前同后去2.3.2傳統(tǒng)的關(guān)系運(yùn)算3)交〔Intersection〕關(guān)系R和關(guān)系S交由既屬于R又屬于S的元組組成,運(yùn)算結(jié)果是R和S中相同的元組組成一個新的關(guān)系,仍為n目關(guān)系。記作:R∩S={t|t∈R∧t∈S}關(guān)系的交也可用差表示,即R∩S=R-〔R-S〕。案例2-9】有關(guān)系R和關(guān)系S如所示,求關(guān)系R和關(guān)系S的交。關(guān)系R關(guān)系SR∩S:案例2-9同存共有2.3.2傳統(tǒng)的關(guān)系運(yùn)算4).廣義笛卡爾積兩個分別為n目和m目的關(guān)系R和S的廣義笛卡爾積是一個〔m+n〕列的元組的集合,元組的前n列是關(guān)系R的一個元組,后m列是關(guān)系S的一個元組。假設(shè)R有k1個元組,S有k2個元組,那么關(guān)系R和關(guān)系S的廣義笛卡爾有k1×k2個元組,記作:R×S≡{t︱t=<tr,?ts>∧tr∈R∧ts∈S}案例2-10】有關(guān)系R和關(guān)系S如所示,求關(guān)系R和S的廣義笛卡爾積。
關(guān)系R關(guān)系SR×S:案例2-10前抄后列2.3.3專門的關(guān)系運(yùn)算專門的關(guān)系運(yùn)算包括4個:選擇、投影、連接、除等。1.選擇運(yùn)算選擇運(yùn)算是在表中選擇符合給定條件的元組,即對二維表進(jìn)行水平分割,記為F〔R〕。其中,為選擇運(yùn)算符,F(xiàn)表示選擇條件,是一個條件〔邏輯〕表達(dá)式。F的形式是由算術(shù)比較運(yùn)算符〔>,≥,<,≤,=,≠〕和邏輯運(yùn)算符〔,∧,∨〕連接起來的邏輯表達(dá)式,結(jié)果為邏輯值“真”和“假”。選擇運(yùn)算的形式定義如下:σF〔R〕={t|t∈R∧F(t)=true},XθY:如價格≤38F(R)表示從R中挑(篩)選滿足條件F的元組所構(gòu)成的關(guān)系。(比較運(yùn)算符)看列選行
案例2-11】設(shè)有一個如表所示的商品關(guān)系。查詢上海生產(chǎn)的商品信息。
選擇運(yùn)算σ產(chǎn)地=’上?!?/p>
(商品)或σ8=’上海’
(商品)結(jié)果,如表2-9:2.3.3專門的關(guān)系運(yùn)算案例2-11
案例2-12】在表中查詢價格小于80元的商品信息。
選擇運(yùn)算σ價格<80(商品)或
σ3<80(商品)結(jié)果:2.3.3專門的關(guān)系運(yùn)算案例2-122.3.3專門的關(guān)系運(yùn)算2.投影運(yùn)算投影運(yùn)算是在一個關(guān)系中選取某些列,并重新安排列的順序,再刪去重復(fù)元組,即對二維表進(jìn)行垂直分割.記作:πA(R).其中,π為投影運(yùn)算符,A為R中的屬性列。投影運(yùn)算的形式定義如下:πA〔R〕={t[A]|t∈R}注意:投影運(yùn)算是對關(guān)系進(jìn)行“垂直分割”,即對元組列方向的“篩選”。投影后不僅取消了原關(guān)系中的某些列,而且還可能取消某些元組,因?yàn)槿∠四承傩粤泻螅涂赡艹霈F(xiàn)重復(fù)行,應(yīng)取消這些完全相同的行??碦定列例2-13】商品關(guān)系如表所示,查詢商品的產(chǎn)地。投影運(yùn)算產(chǎn)地(商品)或8(商品)的結(jié)果,如表。2.3.3專門的關(guān)系運(yùn)算案例2-13商品關(guān)系如表所示,查詢商品的名稱和價格。投影運(yùn)算商品名稱,價格(商品)或2,3(商品)的結(jié)果,如表所示。2.3.3專門的關(guān)系運(yùn)算案例2-142.3.3專門的關(guān)系運(yùn)算3.連接運(yùn)算連接運(yùn)算是從兩個關(guān)系的笛卡爾積中,選擇兩個關(guān)系的屬性滿足一定條件的元組。記作:其中i和j分別是關(guān)系R和S中的第i個、第j個屬性.θ是比較運(yùn)算符.r是關(guān)系R的元數(shù).該式表示連接運(yùn)算是在關(guān)系R和S的笛卡兒積中挑選第i個分量和第(r+j)個分量滿足運(yùn)算的元組。如果為等號“=”,那么這個連接操作稱為等值連接。自然連接是一種特殊的等值連接.要求兩個關(guān)系中進(jìn)行比較的分量必須是相同的屬性組,并在結(jié)果中把重復(fù)屬性列去掉.積行去余【案例2-15】設(shè)關(guān)系R和關(guān)系S如表所示,求RS,RS和RS。
〔a〕關(guān)系R〔b〕關(guān)系S廣義笛卡爾積結(jié)果2.3.3專門的關(guān)系運(yùn)算案例2-15【案例2-15】
設(shè)關(guān)系R和關(guān)系S
如表所示,求RS,RS和RS。(1)
(2)(3)2.3.3專門的關(guān)系運(yùn)算案例2-152.3.3專門的關(guān)系運(yùn)算4.除運(yùn)算對于給定關(guān)系R(X,Y)和S(Y,Z),其中X,Y,Z為屬性組。R中的Y與S中的Y可以有不同的屬性名,但必須出自相同的域集。R與S的除運(yùn)算得到一個新的關(guān)系P(X),P是R中滿足以下條件的元組在X屬性列上的投影:元組在X上分量值x的像集Yx包含S在Y上投影的集合。記作:
其中Yx為x在R中的像集,x=tr[X]。除操作是同時從行和列角度進(jìn)行運(yùn)算。分投影分組對應(yīng)除運(yùn)算過程:關(guān)系的除運(yùn)算操作是從行和列同時進(jìn)行的。具體計算過程為:〔1〕將被除關(guān)系的屬性分為像集屬性和結(jié)果屬性兩局部,與除關(guān)系相同的屬性屬于像集屬性,不相同的屬性屬于結(jié)果屬性?!?〕在除關(guān)系中,在與被除關(guān)系相同的屬性〔像集屬性〕上投影,得到除目標(biāo)數(shù)據(jù)集?!?〕將被除關(guān)系分組,將結(jié)果屬性值相同的元組分為一組。〔4〕觀察每個組,假設(shè)其像集屬性值中包括除目標(biāo)數(shù)據(jù)集,那么對應(yīng)的結(jié)果屬性值應(yīng)屬于該除法運(yùn)算結(jié)果集.并差去與原被除關(guān)系相同的分組.注意:除法應(yīng)用.當(dāng)問題中出現(xiàn)‘至少’、‘全部’、‘所有’等類似的集合包含的概念時,可能會用到除法;用到除法時,關(guān)鍵的問題是構(gòu)造除關(guān)系和被除關(guān)系。2.3.3專門的關(guān)系運(yùn)算分投影分組對應(yīng)*【法2】投影差選:T=∏1,2,…,r-s(R);W=(TXS)-R;V=∏1,2,…,r-s(W);R÷S=T-V.
設(shè)選課和課程關(guān)系,求學(xué)生選課÷課程數(shù)據(jù)表。2.3.3專門的關(guān)系運(yùn)算案例2-16選課R課程S像集屬性結(jié)果屬性目標(biāo)數(shù)據(jù)集〔投影〕-S(BX15120,BE16227,BG16245,BG16238)③R分組④對應(yīng)(BX15120,BE16227)①分②投影*學(xué)生選課÷課程數(shù)據(jù)的具體計算過程如下:〔1〕將關(guān)系學(xué)生選課的學(xué)生學(xué)號屬性〔列〕投影分為{BX15120,BE16227,BG16245,BG16238}?!?〕學(xué)號屬性〔列〕投影BX15120對課程代碼的像集為{P2637,A3103,P2637},BE16227的像集為{P2637,A3103,P2637},BG16245的像集為{P2637,A3103},BG16238的像集為{P2637}?!?〕在課程數(shù)據(jù)中,在屬性課程代碼上進(jìn)行投影為{P2637,A3103,P2637}?!?〕顯然,課程數(shù)據(jù)中課程代碼的投影{P2637,A3103,P2637}包含在學(xué)生選課的學(xué)號BX15120,BE16227的像集中。〔5〕學(xué)生選課÷課程數(shù)據(jù)結(jié)果{BX15120,BE16227}。2.3.3專門的關(guān)系運(yùn)算*另方法2.3.3專門的關(guān)系運(yùn)算【案例2-11】設(shè)關(guān)系訂購和零件數(shù)據(jù)如表2-15和表2-16所示,求訂購÷零件。表2-15訂購關(guān)系工程號零件號數(shù)量a1b158a2b143a3b4678a1b265a4b665a2b243a1b258表2-16零件關(guān)系零件號零件名顏色b1螺母紅色b2螺釘藍(lán)色表2-17定購÷零件結(jié)果工程號數(shù)量a158a243〔b1,b2〕〔a1,58〕,〔a2,43〕〔a3,678〕〔a1,65〕〔a4,65〕像集屬性上海市高校精品課程上海市教育高地工程除目標(biāo)數(shù)據(jù)集像集屬性結(jié)果屬性補(bǔ)案例③分組④對應(yīng)①分②投影下面舉幾個關(guān)系代數(shù)綜合運(yùn)算應(yīng)用的案例。設(shè)有商品銷售數(shù)據(jù)庫有三個關(guān)系〔表〕,包括商品關(guān)系、售貨員關(guān)系和售貨關(guān)系。三個關(guān)系的關(guān)系模式如下:會員(會員ID,姓名,性別,所在地區(qū),家庭住址,號碼,入會時間,會員等級)商品〔商品ID,商品名稱,價格,品牌,型號,顏色,生產(chǎn)商,產(chǎn)地〕訂貨〔商品ID,會員ID,姓名,商品名稱,總價,提交時間,是否付款,運(yùn)送方式,重量,運(yùn)費(fèi)〕2.3.3專門的關(guān)系運(yùn)算討論思考〔1〕做交、并、差運(yùn)算的兩個關(guān)系必須滿足什么條件?〔2〕查詢什么什么結(jié)果的運(yùn)算中用除運(yùn)算?〔3〕舉例說明自然連接與等值連接的區(qū)別和聯(lián)系?
討論思考
*2.4.1關(guān)系演算概述
1.元組關(guān)系演算在元組關(guān)系演算〔TupleRelationalCalculus〕中,元組關(guān)系演算表達(dá)式的一般形式為:其中,為元組變量,表示一個元數(shù)固定的元組,是以元組變量為根底的公式。該表達(dá)式的含義是使為真的元組的集合。原子公式〔Atoms〕有三種形式:〔1〕?!?〕。〔3〕或者。。
*2.4關(guān)系演算與查詢優(yōu)化關(guān)系演算公式〔Formula〕的遞歸定義如下:2.4.1關(guān)系演算概述。
關(guān)系代數(shù)表達(dá)式轉(zhuǎn)換到元組演算表達(dá)式。2.4.1關(guān)系演算概述2.域關(guān)系演算域關(guān)系演算〔DomainRelationalCalculus〕與元組關(guān)系演算相似,元組關(guān)系演算中表達(dá)式使用的是元組變量,元組變量的變化范圍是一個關(guān)系,域關(guān)系演算表達(dá)式中以屬性列為變量,即域變量,域變量的變化范圍是某個屬性的值域。域關(guān)系演算的原子公式有兩種形式:〔1〕〔2〕域關(guān)系演算表達(dá)式的一般形式是:。
2.4.1關(guān)系演算概述1、關(guān)系代數(shù)表達(dá)式的優(yōu)化問題在關(guān)系代數(shù)運(yùn)算中,笛卡爾積和連接運(yùn)算是最費(fèi)時間的,通過查詢從“亙立科技”訂貨的商品的商品ID和價格,其中訂貨關(guān)系中有500個元組,商品關(guān)系中有200個元組。商品〔商品ID,商品名稱,價格,品牌,型號,顏色,生產(chǎn)商,產(chǎn)地〕。訂貨〔商品ID,會員ID,姓名,商品名稱,總價,提交時間,是否付款,運(yùn)送方式,重量,運(yùn)費(fèi)〕。E1=商品ID,數(shù)量〔σ生產(chǎn)商=‘亙立科技’商品.商品ID=訂貨.商品ID〔訂貨X商品〕〕求E1的值,先做訂貨和商品關(guān)系的笛卡爾積,具有200X500=10000個元組。E2=商品ID,數(shù)量〔σ商品.商品ID=訂貨.商品ID〔訂貨Xσ生產(chǎn)商=‘亙立科技’〔商品〕〕〕求E2的值,“亙立科技”信息只存在就50,因此,笛卡爾積的結(jié)果是50X500個元組。
求E3的值,由于“亙立科技”在訂貨關(guān)系中有100個元組,等值連接后,具有結(jié)果是100X50個元組。2.4.1關(guān)系演算概述2.關(guān)系代數(shù)等價變換規(guī)那么關(guān)系代數(shù)是各種數(shù)據(jù)庫查詢語言的根底,各種查詢語言都能夠轉(zhuǎn)換成關(guān)系代數(shù)表達(dá)式。所以關(guān)系代數(shù)表達(dá)式的優(yōu)化是查詢優(yōu)化的根本方法。兩個關(guān)系代數(shù)表達(dá)式等價是指用同樣的關(guān)系實(shí)例代替兩個表達(dá)式中相應(yīng)的關(guān)系時所得到的結(jié)果是一致的。兩個關(guān)系表達(dá)式E1和E2等價時,可表示為:E1≡E2。等價變換規(guī)那么指出兩種不同形式的表達(dá)式是等價的,可以利用第二種形式的表達(dá)式代替第一種,或者用第一種形式的表達(dá)式代替第二種。這是因?yàn)檫@兩種表達(dá)式在任何有效的數(shù)據(jù)庫中將產(chǎn)生相同的結(jié)果。*2.4.2查詢優(yōu)化常用規(guī)那么及算法常用的等價變換規(guī)那么有:〔1〕笛卡爾積和連接的等價交換律設(shè)E1和E2是兩個關(guān)系代數(shù)表達(dá)式,F(xiàn)是連接運(yùn)算的條件,那么:〔2〕笛卡爾積和連接的結(jié)合律設(shè)E1、E2和E3是三個關(guān)系代數(shù)表達(dá)式,F(xiàn)1和F2是兩個連接運(yùn)算的限制條件,F(xiàn)1只涉及到E1和E2的屬性,F(xiàn)2只涉及到E2和E3的屬性,那么:*2.4.2查詢優(yōu)化常用規(guī)那么及算法〔3〕投影的串聯(lián)設(shè)E是一個關(guān)系代數(shù)表達(dá)式,L1,L2,…,Ln是屬性名,那么:〔4〕選擇的串聯(lián)設(shè)E是一個關(guān)系代數(shù)表達(dá)式,F(xiàn)1和F2是兩個選擇條件,那么:〔5〕選擇和投影的交換設(shè)E為一個關(guān)系代數(shù)表達(dá)式,選擇條件F只涉及L中的屬性,那么:*2.4.2查詢優(yōu)化常用規(guī)那么及算法〔6〕選擇對笛卡爾積的分配律設(shè)E1和E2是兩個關(guān)系代數(shù)表達(dá)式,假設(shè)條件F只涉及E1的屬性,那么:〔7〕選擇對并的分配律設(shè)E1和E2有相同的屬性名,或者E1和E2表達(dá)的關(guān)系的屬性有對應(yīng)性,那么:〔8〕選擇對差的分配律設(shè)E1和E2有相同的屬性名,或者E1和E2表達(dá)的關(guān)系的屬性有對應(yīng)性,那么:*2.4.2查詢優(yōu)化常用規(guī)那么及算法〔9〕投影對并的分配律設(shè)E1和E2有相同的屬性名,或者E1和E2表達(dá)的關(guān)系的屬性有對應(yīng)性,那么:〔10〕投影對笛卡爾積的分配律設(shè)E1和E2是兩個關(guān)系代數(shù)表達(dá)式,L1是E1的屬性集,L2是E2的屬性集,那么:*2.4.2查詢優(yōu)化常用規(guī)那么及算法3.關(guān)系表達(dá)式的優(yōu)化算法輸入:一個關(guān)系代數(shù)表達(dá)式的語法樹。輸出:計算表達(dá)式的一個優(yōu)化序列。方法:〔1〕利用等價變換規(guī)那么4把形如變換為〔2〕對每一個選擇,利用等價變換4-8盡可能把它移到葉端?!?〕對每一個投影利用等價變換規(guī)那么3,5,10中的一般形式盡可能把它移向樹的葉端?!?〕利用等價變換規(guī)那么3-5把選擇和投影的串接合并成單個選擇、單個投影或一個選擇后跟一個投影。使多個選擇或投影能同時執(zhí)行,或在一次掃描中全部完成?!?〕把上述得到的語法樹的內(nèi)節(jié)點(diǎn)分組。每一個二元運(yùn)算和它所有的直接祖先為一組。如果其后代直到葉子全是一元運(yùn)算,那么也將它們并入該組,但當(dāng)二元運(yùn)算是笛卡爾積,而且后面不是與它組成等值連接的選擇時,那么不能把選擇與這個二元運(yùn)算組成同一組.而是把這些一元運(yùn)算單獨(dú)分為一組.*2.4.2查詢優(yōu)化常用規(guī)那么及算法討論思考:〔1〕什么是關(guān)系演算?在關(guān)系演算公式中,各種運(yùn)算符的優(yōu)先級次序是什么?〔2〕域關(guān)系演算和元組關(guān)系演算有什么區(qū)別和聯(lián)系?〔3〕為什么要進(jìn)行查詢優(yōu)化?什么是等價變換規(guī)那么?〔4〕舉例說明關(guān)系表達(dá)式的優(yōu)化過程。*2.4.2查詢優(yōu)化常用規(guī)那么及算法2.5常量變量函數(shù)和表達(dá)式2.5.1常規(guī)標(biāo)識符及使用規(guī)那么在SQL語言中,標(biāo)識符〔Identifer〕是指用于標(biāo)識操作對象名稱等的字符串。在SQLServer中,所有的數(shù)據(jù)庫對象都可以有標(biāo)識符,如效勞器、數(shù)據(jù)庫、表、視圖、索引、約束等。一般操作對象都需要標(biāo)識符,如創(chuàng)立表時必須指定表名。1.常規(guī)標(biāo)識符規(guī)那么常規(guī)標(biāo)識符(Regularidentifer)也稱規(guī)那么標(biāo)識符,包括五項(xiàng):〔1〕標(biāo)識符組成是字母、數(shù)字、下劃線、@(專用)、#和$符號,其中字母可以是大小寫英文,也可以是來自其他語言的字符?!?〕標(biāo)識符的首字符不允許是數(shù)字或$符號?!?〕標(biāo)識符不允許使用SQL的保存字,如命令名、函數(shù)名等?!?〕標(biāo)識符內(nèi)不允許有空格和特殊字符,如?、%、&、*等?!?〕標(biāo)識符長度不超過128字節(jié)。由字符、符號或數(shù)字組成的字符串2.5.1常規(guī)標(biāo)識符及使用規(guī)那么2.界定標(biāo)識符界定標(biāo)識符也叫分隔標(biāo)識符(定界符)是使用[]、‘’或””等起到分隔作用的符號限定的標(biāo)識符。帶分隔符的標(biāo)識符用于以下情況:〔1〕在對象名稱或其組成局部中使用保存字時。保存的關(guān)鍵字不應(yīng)用作對象名稱。從SQLServer早期版本升級的數(shù)據(jù)庫可能包含這樣的標(biāo)識符:這些標(biāo)識符包含在早期版本中不是保存字而在SQLServer的當(dāng)前版本是保存字的字詞。在可以改變對象名稱之前,可以使用帶分隔符的標(biāo)識符引用對象?!?〕使用未列為限定標(biāo)識符的字符時。SQLServer允許在帶分隔符的標(biāo)識符中使用當(dāng)前代碼頁中的任何字符。但是,不加選擇地在對象名稱中使用特殊字符會使SQL語句和腳本難以閱讀和維護(hù)〔如,可創(chuàng)立名為
Employee]
的表,其中右方括號是名稱的一局部〕。假設(shè)要執(zhí)行此操作,必須使用兩個方括號以防止因使用右方括號而出現(xiàn)問題,如下所示:CREATETABLE[Employee]](EmployeeIDintIDENTITY(1,1)NOTNULL,FirstNamevarchar(30),LastNamevarchar(30))2.5.1常規(guī)標(biāo)識符及使用規(guī)那么2.5常量變量函數(shù)和表達(dá)式2.5.2常量和變量的表示及用法1.常量的表示及用法
常量是指在程序運(yùn)行過程中其值保持不變的量。常量是表示一個特定數(shù)據(jù)值的符號,也稱為字面量、文字值或標(biāo)量值。常量的格式取決于它所表示的值的數(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ù)位二進(jìn)制型binaryvarBinaryimage存放定長二進(jìn)制數(shù)據(jù),n的取值范圍為1~8000存放變長二進(jìn)制數(shù)據(jù),n的取值范圍為1~8000存放最大長度為231-1的二進(jìn)制數(shù)據(jù)位類型bit占1字節(jié),存放邏輯值,只能去0、1、null常量和變量常量的數(shù)據(jù)類型2.變量變量是指在程序運(yùn)行過程中其值可以發(fā)生改變的量?!?〕局部變量①局部變量由用戶定義,是作用域局限在一定范圍內(nèi)的變量.作用域(“定義域”):假設(shè)局部變量在一個批處理、存儲過程中被聲明或定義,那么其作用域就在批處理、存儲過程內(nèi)。②局部變量聲明(定義)局部變量聲明(定義)語句的語法格式:DECLARE@變量名數(shù)據(jù)類型[,…n]說明:局部變量必須由@開頭,另外變量名的形式要符合SQLServer標(biāo)示符的規(guī)那么。局部變量使用的數(shù)據(jù)類型:系統(tǒng)的數(shù)據(jù)類型和用戶自定義數(shù)據(jù)類型.變量不能是text、ntext或image數(shù)據(jù)類型。局部變量必須先聲明〔定義〕,然后在SQL語句中使用,默認(rèn)初值NULL。
常量和變量③局部變量賦值局部變量賦值語句的語法格式:格式1:SET@變量名=表達(dá)式格式2:SELECT@變量名=表達(dá)式/SELECT變量名=輸出值FROM表where或SELECT@變量1=表達(dá)式1[,@變量2=表達(dá)式2,…,@變量n=表達(dá)式n]說明:變量名是除cursor,text,ntext,image外的任何類型;表達(dá)式是任何有效的SQLServer表達(dá)式。“格式2”可以為多個變量賦值,其中,SELECT@變量名=表達(dá)式.用于將單個“表達(dá)式”值返回到變量中,假設(shè)表達(dá)式為列名,那么返回多個.(1)假設(shè)SELECT語句返回多個值,那么將返回的最后一個值賦給變量.(2)假設(shè)SELECT語句沒有返回值,變量保存當(dāng)前值;假設(shè)表達(dá)式是不返回值的子查詢,那么變量為NULL。上海市高校精品課程上海優(yōu)秀教材獎主編光標(biāo)常量和變量【案例2-7】SELECT命令賦值,執(zhí)行程序。USEeducGODECLARE@var1varchar(8)--聲明局部變量SELECT@var1='學(xué)生姓名'--為局部變量賦初始值SELECT@var1=Sname--查詢結(jié)果賦值給變量FROMstudentWHERESID='bj10001'SELECT@var1as'學(xué)生姓名'--顯示局部變量結(jié)果執(zhí)行結(jié)果:學(xué)生姓名如輸入張偉箭上海市高校精品課程上海優(yōu)秀教材獎主編SIDSname……..student常量和變量補(bǔ)充
【案例2-8】SELECT命令賦值,多個返回值中取最后一個.USEeducgoDECLARE@var1varchar(8)SELECT@var1='讀者姓名'SELECT@var1=Sname--查詢結(jié)果賦值,返回整個列全部值,但最后一個給變量FROMstudentSELECT@var1AS'讀者姓名'--顯示局部變量的結(jié)果執(zhí)行結(jié)果:可輸入不同的讀者(如張曉東)上海市高校精品課程上海優(yōu)秀教材獎主編新字段名常量和變量補(bǔ)充
【案例2-9】SET命令賦值USEeducgoDECLARE@novarchar(10)SET@no='Bj10001'--變量賦值SELECTSID,SnameFROMstudentWHERESID=@no執(zhí)行結(jié)果:上海市高校精品課程上海優(yōu)秀教材獎主編常量和變量補(bǔ)充
〔2〕全局變量系統(tǒng)全局變量是SQLServer系統(tǒng)定義(提供并賦值)的變量.常用于跟蹤效勞器范圍和特定會話期間的信息,不能被用戶顯式地定義和賦值.即用戶不能建/改全局變量,也不能用SET語句改變?nèi)肿兞康闹怠8袷剑篅@變量名記錄SQLServer效勞器活動狀態(tài)的一組數(shù)據(jù),系統(tǒng)提供33個全局變量.常用的全局變量如表2-9所示。全局變量說明全局變量說明@@error上條SQL語句報告的錯誤號@@nestlevel當(dāng)前存儲過程/觸發(fā)器的嵌套級別@@rowcount上一條SQL語句處理的行數(shù)@@servername本地服務(wù)器的名稱@@identity最后插入的標(biāo)識值@@spid當(dāng)前用戶進(jìn)程的會話id@@max_connections可創(chuàng)建并鏈接的最大數(shù)目@@cpu_busy系統(tǒng)自上次啟動后的工作時間@@language當(dāng)前使用語言的名稱@@servicename該計算機(jī)上的SQL服務(wù)的名稱@@transcont當(dāng)前連接打開的事務(wù)數(shù)@@versionSQLServer的版本信息上海市高校精品課程上海優(yōu)秀教材獎主編由系統(tǒng)定義和維護(hù)表2-9常用的全局常量常量和變量
注意:全局變量以@@開頭,由系統(tǒng)定義和維護(hù),用戶只能顯示和讀取,不能修改;局部變量由@開頭,由用戶定義和賦值.例如,顯示SQLServer的版本。select@@versionselect@@servername--本地效勞器名上海市高校精品課程上海優(yōu)秀教材獎主編常量和變量2.5常量變量函數(shù)和表達(dá)式函數(shù)種類主要功能函數(shù)種類主要功能聚合函數(shù)將多個數(shù)值合并為一個數(shù)值,如計算合計值行集函數(shù)可返回一可用于代替SQL語句中表引用的對象配置函數(shù)返回當(dāng)前配置選項(xiàng)配置的信息安全函數(shù)返回有關(guān)用戶和角色的信息加密函數(shù)支持加密、解密、數(shù)字簽名和數(shù)字簽名驗(yàn)證等操作字符串函數(shù)可以對字符數(shù)據(jù)執(zhí)行替換、截斷、合并等操作游標(biāo)函數(shù)返回有關(guān)游標(biāo)狀態(tài)的信息元數(shù)據(jù)函數(shù)用于返回數(shù)據(jù)庫和數(shù)據(jù)庫對象的屬性信息排名函數(shù)可以返回分區(qū)中的每一行的排名值系統(tǒng)統(tǒng)計函數(shù)返回有關(guān)SQLServer系統(tǒng)性能統(tǒng)計的信息數(shù)學(xué)函數(shù)執(zhí)行對數(shù)、指數(shù)、三角函數(shù)、平方根等數(shù)學(xué)運(yùn)算文本和圖像函數(shù)用于執(zhí)行更改TEXT和IMAGE值的操作系統(tǒng)函數(shù)對系統(tǒng)級的各種選項(xiàng)和對象進(jìn)行操作或報告日期時間函數(shù)可以執(zhí)行與日期、時間數(shù)據(jù)相關(guān)的操作2.5.3常用函數(shù)及其用法
函數(shù)是指具有可以完成某種特定功能的程序,并返回處理結(jié)果的一組SQL語句,其處理結(jié)果稱為“返回值”,處理過程稱為“函數(shù)體”。SQLServer同其他程序設(shè)計語言類似,提供了豐富的內(nèi)置函數(shù),也允許用戶自定義函數(shù)。利用這些函數(shù)可方便地實(shí)現(xiàn)各種運(yù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用于生成哈希索引,返回按表某行或組表達(dá)式計算出的校驗(yàn)和值CHECKSUM_AGG返回組中各值的校驗(yàn)和,若為空將被忽略COUNT返回組中項(xiàng)值的數(shù)量,若為空也將計數(shù)COUNT_BIG返回組中項(xiàng)值的數(shù)量。與COUNT函數(shù)唯一差別是其返回值。COUNT_BIG總返回bigint型值。COUNT始終返回int型值GROUPING當(dāng)行由CUBE/ROLLUP運(yùn)算符添加時,該函數(shù)將導(dǎo)致附加列的輸出1;當(dāng)行不由這兩種運(yùn)算符添加時,將導(dǎo)致附加列的輸出0MAX返回組中值列表的最大值MIN返回組中值列表的最小值SUM返回組中各值的總和STDEV返回指定表達(dá)式中所有值的標(biāo)準(zhǔn)偏差STDEVP返回指定表達(dá)式中所有值的總體標(biāo)準(zhǔn)偏差VAR返回指定表達(dá)式中所有值的方差VARP返回指定表達(dá)式中所有值的總體方差
2.?dāng)?shù)學(xué)函數(shù)
數(shù)學(xué)函數(shù)用于對數(shù)字表達(dá)式進(jìn)行數(shù)學(xué)運(yùn)算并返回運(yùn)算結(jié)果。SQLServer提供了20多個用于處理整數(shù)與浮點(diǎn)值的數(shù)學(xué)函數(shù)。2.5.3常用函數(shù)及其用法函數(shù)說明ABS返回數(shù)值表達(dá)式的絕對值EXP返回指定表達(dá)式以e為底的指數(shù)-exCEILING返回大于或等于數(shù)值表達(dá)式的最小整數(shù)FLOOR返回小于或等于數(shù)值表達(dá)式的最大整數(shù)LN返回數(shù)值表達(dá)式的自然對數(shù)LOG返回數(shù)值表達(dá)式以10為底的對數(shù)POWER返回對數(shù)值表達(dá)式進(jìn)行冪運(yùn)算的結(jié)果ROUND返回舍入到指定長度/精度的數(shù)值表達(dá)式SIGN返回數(shù)值表達(dá)式的正號(+)、負(fù)號(-)或零(0)SQUARE返回數(shù)值表達(dá)式的平方SQRT返回數(shù)值表達(dá)式的平方根2.5.3常用函數(shù)及其用法3.字符函數(shù)
字符函數(shù)也稱為字符串函數(shù),用于計算、格式化和處理字符串參數(shù),或?qū)ο筠D(zhuǎn)換為字符串.常見的字符函數(shù)如表2-13所示.字符函數(shù)說明ASCIIASCII函數(shù),返回字符表達(dá)式中最左側(cè)的字符的ASCII代碼值CHARASCII代碼轉(zhuǎn)換函數(shù),返回指定ASCII代碼的字符LEFT左子串函數(shù),返回字符串中從左邊開始指定個數(shù)的字符LEN字符串函數(shù),返回指定表達(dá)式的字符(非字節(jié))數(shù),不含尾部空格LOWER小寫字母函數(shù),將大寫字符轉(zhuǎn)換為小寫字符后返回字符表達(dá)式LTRIM刪除前導(dǎo)空格字符串,返回刪除前導(dǎo)空格后的字符表達(dá)式REPLACE(e1,e2,e3)替換函數(shù),用第3個表達(dá)式替換第1個表達(dá)式中出現(xiàn)的所有第2個指定字符串表達(dá)式的匹配項(xiàng)REPLICATE復(fù)制函數(shù),以指定的次數(shù)重復(fù)字符表達(dá)式,如********------RIGHT右子串函數(shù),返回字符串中從右邊開始指定個數(shù)的字符RTRIM刪除尾隨空格函數(shù),刪除所有尾隨空格后返回一個字符串SPACE空格函數(shù),返回由重復(fù)的空格組成的字符串STR數(shù)字向字符轉(zhuǎn)換函數(shù),返回由數(shù)字?jǐn)?shù)據(jù)轉(zhuǎn)換來的字符數(shù)據(jù)SUBSTRING子串函數(shù),返回4種表達(dá)式(字符,二進(jìn)制,文本和圖像)的一部分UPPER大寫函數(shù),返回小寫字符數(shù)據(jù)轉(zhuǎn)換為大寫的字符表達(dá)式SELECTREPLACE(''abcdefghicde'',''cde'',''xxx'')
結(jié)果:abxxxfghixxx〔1〕ASCII().返回字符表達(dá)式最左端字符的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ù)及其用法補(bǔ)充
〔3〕LEFT()。返回從字符串左邊開始指定個數(shù)的字符。例如:DECLARE@StringTestchar(10)SET@StringTest='Robin'SELECTLEFT(@StringTest,3)〔4〕LOWER()。將大寫字符數(shù)據(jù)轉(zhuǎn)換為小寫字符數(shù)據(jù)后返回字符表達(dá)式。例如:DECLARE@StringTestchar(10)SET@StringTest='Robin'SELECTLOWER(LEFT(@StringTest,3))上海市高校精品課程上海優(yōu)秀教材獎主編Rob2.5.3常用函數(shù)及其用法〔5〕LTRIM()。刪除起始空格后返回字符表達(dá)式。例如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ù)字?jǐn)?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)換為大寫的字符表達(dá)式。例如: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標(biāo)準(zhǔn)內(nèi)部格式返回當(dāng)前系統(tǒng)日期和時間。GETUTCDATE返回當(dāng)前的UTC時間(通用協(xié)調(diào)時間/格林尼治標(biāo)準(zhǔn)時間)的datetime值.來自當(dāng)前的本地時間和運(yùn)行SQL實(shí)例的操作系統(tǒng)中的時區(qū)設(shè)置。MONTH返回表示指定日期的“月”部分的整數(shù)。YEAR返回表示指定日期的年份的整數(shù)。2.5.3常用函數(shù)及其用法*在系統(tǒng)設(shè)計中經(jīng)常會有對時間的處理,下面例子將輸出格式化的日期:2.5.3常用函數(shù)及其用法*5.自定義函數(shù)在SQLServer中,可用CREATEFUNCTION語句創(chuàng)立自定義函數(shù),根據(jù)函數(shù)返回值形式的不同,可創(chuàng)立三類自定義函數(shù),分別是標(biāo)量值自定義函數(shù)、內(nèi)聯(lián)表值自定義函數(shù)和多語句表值自定義函數(shù)?!?〕標(biāo)量值函數(shù)標(biāo)量值自定義函數(shù)返回一個確定類型的標(biāo)量值,其返回的值類型為除text、ntext、image、cursor、timestamp和table類型外的其他數(shù)據(jù)類型。即標(biāo)量值自定義函數(shù)返回的是一個數(shù)值。2.5.3常用函數(shù)及其用法標(biāo)量值自定義函數(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ù)的選項(xià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ù)可以看作標(biāo)量型和內(nèi)聯(lián)表值型函數(shù)的結(jié)合體。該類函數(shù)的返回值是一個表,但與標(biāo)量值自定義函數(shù)一樣,有一個用BEGIN…END語句塊中包含起來的函數(shù)體,返回值的表中的數(shù)據(jù)是由函數(shù)體中的語句插入的。由此可見,其可以進(jìn)行屢次查詢,對數(shù)據(jù)進(jìn)行屢次篩選與合并,彌補(bǔ)了內(nèi)聯(lián)表值自定義函數(shù)的缺乏。2.5.3常用函數(shù)及其用法2.5.4常用表達(dá)式概述表達(dá)式是指由常量、變量、函數(shù)等通過運(yùn)算符按規(guī)那么要求連接的式子。1.SQL表達(dá)式表達(dá)式是用于在“列與列之間”或“在變量之間”進(jìn)行比較以及數(shù)學(xué)運(yùn)算的符號。在SQLServer中,表達(dá)式共有數(shù)學(xué)表達(dá)式、字符串表達(dá)式、比較表達(dá)式和邏輯表達(dá)式四種表達(dá)式的類型。2.5常量變量函數(shù)和表達(dá)式2.數(shù)學(xué)表達(dá)式數(shù)學(xué)表達(dá)式用于各種數(shù)字變量的運(yùn)算。數(shù)字變量的數(shù)據(jù)類型共有:INT,SMALLINT,TINYINT,F(xiàn)LOAT,REAL,MONEY或SMALLMONEY。而數(shù)學(xué)表達(dá)式的符號有:加〔+〕、減〔-〕、乘〔*〕、除〔/〕和取余〔%〕。常用表達(dá)式概述符號功能所使用的數(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.字符串表達(dá)式字符串是由字符、符號或數(shù)字所組成的一串字符,字符串表達(dá)式是用于字符
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 商用車長期租賃保養(yǎng)服務(wù)方案
- 2024-2030年中國腸內(nèi)營養(yǎng)輸液泵產(chǎn)業(yè)未來發(fā)展趨勢及投資策略分析報告
- 2024-2030年中國聚氨酯(pu)行業(yè)供需趨勢及發(fā)展可行性研究報告
- 2024-2030年中國聚乙烯混色塑膠項(xiàng)目可行性研究報告
- 2024-2030年中國美女經(jīng)濟(jì)行業(yè)運(yùn)營模式分析及投資規(guī)劃研究報告
- 2024-2030年中國精制棉行業(yè)供需趨勢及投資策略研究報告版
- 2024-2030年中國空調(diào)塑件項(xiàng)目可行性研究報告
- 2024-2030年中國堿性食品行業(yè)發(fā)展趨勢預(yù)測及營銷策略分析報告
- 通信行業(yè)安全生產(chǎn)隱患整治方案
- 2024-2030年中國石墨化石油焦增碳劑行業(yè)需求分析及投資可行性研究報告版
- 七年級語文上冊第13課《紀(jì)念白求恩》公開課一等獎創(chuàng)新教案
- 統(tǒng)編版語文六年級上冊第八單元大單元整體教學(xué)設(shè)計
- 教師個人業(yè)務(wù)學(xué)習(xí)筆記(41篇)
- 2025年高考語文復(fù)習(xí)備考復(fù)習(xí)策略講座
- 數(shù)學(xué)史上的三次數(shù)學(xué)危機(jī)
- 2024年水電暖安裝承包合同
- 缺乳(乳汁淤積)產(chǎn)婦的中醫(yī)護(hù)理
- 2024北師大版新教材初中數(shù)學(xué)七年級上冊內(nèi)容解讀課件(深度)
- 2024年公共營養(yǎng)師三級考試試卷及答案
- 2024年上半年軟考信息系統(tǒng)項(xiàng)目管理師真題
- 北京市西城區(qū)2023-2024學(xué)年高一下學(xué)期期末英語試題(解析版)
評論
0/150
提交評論