




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2025/8/14ftt@1關(guān)系模式
及其運(yùn)算基礎(chǔ)第6章關(guān)系數(shù)據(jù)模型及其運(yùn)算基礎(chǔ)
2025/8/14ftt@2主要內(nèi)容關(guān)系模型的基本概念關(guān)系數(shù)據(jù)結(jié)構(gòu)及形式化定義關(guān)系關(guān)系模式關(guān)系的完整性關(guān)系代數(shù)傳統(tǒng)的集合運(yùn)算專(zhuān)門(mén)的關(guān)系運(yùn)算2025/8/14ftt@3關(guān)系模型回顧E.F.Codd于70年代初提出關(guān)系數(shù)據(jù)理論,他因此獲得1981年的ACM圖靈獎(jiǎng)關(guān)系理論是建立在集合代數(shù)理論基礎(chǔ)上的,有著堅(jiān)實(shí)的數(shù)學(xué)基礎(chǔ)早期代表系統(tǒng)SystemR:由IBM研制INGRES:由加州Berkeley分校研制目前主流的商業(yè)數(shù)據(jù)庫(kù)系統(tǒng)Oracle,Informix,Sybase,SQLServer,DB2Postgresql、Mysql、SQLite2025/8/14ftt@4關(guān)系模型的基本概念域(Domain)一組值的集合,這組值具有相同的數(shù)據(jù)類(lèi)型如整數(shù)的集合、字符串的集合、全體學(xué)生的集合笛卡爾積(CartesianProduct)一組域D1,D2,…,Dn的笛卡爾積為:D1×D2×…×Dn={(d1,d2,…,dn)|di∈Di,i=1,…,n}笛卡爾積的每個(gè)元素(d1,d2,…,dn)稱(chēng)作一個(gè)n-元組(n-tuple)元組的每一個(gè)值di叫做一個(gè)分量(component)2025/8/14ftt@5例:設(shè)
D1為教師集合(T)={t1,t2} D2為學(xué)生集合(S)={s1,s2,s3} D3為課程集合(C)={c1,c2}
則D1×D2×D3是個(gè)三元組集合,元組個(gè)數(shù)為2×3×2,是所有可能的(教師,學(xué)生,課程)元組集合笛卡爾積可表為二維表的形式TSCt1s1c1t1s1c2t1s2c1………t2s3c22025/8/14ftt@6關(guān)系笛卡爾積D1×D2×…×Dn的子集叫做在域D1,D2,…,Dn上的關(guān)系,用R(D1,D2,…,Dn)表示R是關(guān)系的名字,n是關(guān)系的度或目關(guān)系是笛卡爾積中有意義的子集關(guān)系也可以表示為二維表關(guān)系TEACH(T,S,C)TSCt1s1c1t1s1c2t1s2c1t2s3c2元組屬性2025/8/14ftt@7關(guān)系的性質(zhì)列是同質(zhì)的即每一列中的分量來(lái)自同一域,是同一類(lèi)型的數(shù)據(jù)。如TEACH(T,S,C)={(t1,s1,c1),(t1,t2,c1)}是錯(cuò)誤的不同的列可來(lái)自同一域,每列必須有不同的屬性名如Person={t1,t2,
s1,s2,s3},C={c1,c2},則TEACH關(guān)系中的T和S都從Person域中取值,但不能寫(xiě)成TEACH(P,P,C),還應(yīng)寫(xiě)成TEACH(T,S,C)行的順序無(wú)關(guān)緊要列的順序無(wú)關(guān)緊要任意兩個(gè)元組不能完全相同集合內(nèi)不能有相同的兩個(gè)元素每一分量必須是不可再分的數(shù)據(jù)滿足這一條件的關(guān)系稱(chēng)作滿足第一范式(1NF)的2025/8/14ftt@8關(guān)系模式關(guān)系模式關(guān)系的描述稱(chēng)作關(guān)系模式,包括關(guān)系名、關(guān)系中的屬性名、屬性向域的映象、屬性間的數(shù)據(jù)依賴(lài)關(guān)系等,記作R(A1,A2,…,An)屬性向域的映象一般直接說(shuō)明為屬性的類(lèi)型、長(zhǎng)度等某一時(shí)刻對(duì)應(yīng)某個(gè)關(guān)系模式的內(nèi)容(元組的集合)稱(chēng)作關(guān)系關(guān)系模式是型,是穩(wěn)定的關(guān)系是某一時(shí)刻的值,是隨時(shí)間不斷變化的2025/8/14ftt@9關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言概述以關(guān)系為運(yùn)算對(duì)象的一組運(yùn)算符及其對(duì)應(yīng)運(yùn)算規(guī)則合稱(chēng)為關(guān)系運(yùn)算體系。以關(guān)系運(yùn)算體系為基礎(chǔ)的數(shù)據(jù)操作語(yǔ)言,成為關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言。2025/8/14ftt@10關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言的特點(diǎn)一體化一般關(guān)系系統(tǒng)的數(shù)據(jù)語(yǔ)言都同時(shí)具有數(shù)據(jù)定義、數(shù)據(jù)操縱和數(shù)據(jù)控制語(yǔ)言,而不是分為幾個(gè)語(yǔ)言。對(duì)象單一,都是關(guān)系,因此操作符也單一。而非關(guān)系型系統(tǒng),則有對(duì)記錄的操作,有對(duì)系的操作非過(guò)程化用戶只需提出“做什么”,無(wú)須說(shuō)明“怎么做”,存取路徑的選擇和操作過(guò)程由系統(tǒng)自動(dòng)完成面向集合的存取方式操作對(duì)象是一個(gè)或多個(gè)關(guān)系,結(jié)果是一個(gè)新的關(guān)系(一次一關(guān)系)。非關(guān)系系統(tǒng)是一次一記錄的方式2025/8/14ftt@11抽象的查詢語(yǔ)言關(guān)系代數(shù)用對(duì)關(guān)系的運(yùn)算來(lái)表達(dá)查詢,需要指明所用操作*關(guān)系演算用謂詞來(lái)表達(dá)查詢,只需描述所需信息的特性*元組關(guān)系演算謂詞變?cè)幕緦?duì)象是元組變量*域關(guān)系演算謂詞變?cè)幕緦?duì)象是域變量具體系統(tǒng)中的實(shí)際語(yǔ)言SQL介于關(guān)系代數(shù)和關(guān)系演算之間,由IBM公司在研制SystemR時(shí)提出*QUEL基于Codd提出的元組關(guān)系演算語(yǔ)言ALPHA,在INGRES上實(shí)現(xiàn)*QBE基于域關(guān)系演算,由IBM公司研制2025/8/14ftt@12關(guān)系代數(shù)運(yùn)算匯總基本運(yùn)算一元運(yùn)算選擇、投影、*更名多元運(yùn)算笛卡兒積、集合交集、并集、差集、連接(自然連接)其它運(yùn)算外連接、除*擴(kuò)展運(yùn)算消除重復(fù)、聚集和分組運(yùn)算、排序運(yùn)算、廣義投影*修改操作插入、刪除、更新2025/8/14ftt@13關(guān)系代數(shù)的一些記號(hào)給定關(guān)系模式R(A1,A2,…,An),設(shè)R是它的一個(gè)具體的關(guān)系,t
R是關(guān)系的一個(gè)元組分量設(shè)t
R,則t[Ai]表示元組t中相應(yīng)于屬性Ai的一個(gè)分量屬性列Ai={Ai1,Ai2,…,Aik}{A1,A2,…,An},稱(chēng)A為屬性列A表示{A1,A2,…,An}中去掉A后剩余的屬性組t[Ai]=(t[Ai1],t[Ai2],…,t[Aik])2025/8/14ftt@14課內(nèi)用例1:成績(jī)管理數(shù)據(jù)庫(kù)在一個(gè)學(xué)生課程關(guān)系數(shù)據(jù)庫(kù)中,包括學(xué)生關(guān)系S,系關(guān)系D,課程關(guān)系C,選修關(guān)系SC,數(shù)據(jù)結(jié)構(gòu)如下:學(xué)生:S(S#,SN,SEX,AGE,D#)依次表示:學(xué)號(hào),姓名,性別,年齡,所在系。系:DEPT(D#,DN,Director)依次表示:系號(hào),系名,系主任。課程:C(C#,CN,Credit)依次表示:課程號(hào),課程名,學(xué)分。選修:SC(S#,C#,Grade)依次表示:學(xué)號(hào),課程號(hào),成績(jī)。2025/8/14ftt@15課內(nèi)用例2:職工項(xiàng)目管理數(shù)據(jù)庫(kù)這個(gè)職工項(xiàng)目管理系統(tǒng)中,有5個(gè)關(guān)系模式組成,每個(gè)關(guān)系表都存儲(chǔ)了同一記錄結(jié)構(gòu)的數(shù)據(jù)。Employee(Eno,Ename,Sex,Age,Is_Marry,Title,Dno)依次表示:職工的職工號(hào)、職工姓名、性別、年齡、是否已婚、職稱(chēng)和所在部門(mén)號(hào)。Item(Ino,Iname,Start_date,End_date,Outlay,Check_date)依次表示:項(xiàng)目編號(hào)、項(xiàng)目名稱(chēng)、起始日期、終止日期、項(xiàng)目經(jīng)費(fèi)和驗(yàn)收日期。Item_Emp(Ino,Eno,IENo)依次表示:項(xiàng)目編號(hào)、參加該項(xiàng)目的職工編號(hào)、職工在該項(xiàng)目中的排名。Salary(Eno,Basepay,Service,Price,Rest,Insure,Fund)依次表示:職工號(hào)、基本工資、津貼、物價(jià)補(bǔ)貼、養(yǎng)老保險(xiǎn)、醫(yī)療保險(xiǎn)和公積金。Department(Dno,Name,Phone,Manager)依次表示:部門(mén)號(hào)、部門(mén)名稱(chēng)、聯(lián)系電話和部門(mén)經(jīng)理。2025/8/14ftt@16選擇運(yùn)算基本定義在關(guān)系R中選擇滿足給定條件的元組(從行的角度)
F(R)={t|tR,F(t)=‘真’}F是選擇的條件,
tR,F(xiàn)(t)要么為真,要么為假F的形式:由邏輯運(yùn)算符連接算術(shù)表達(dá)式而成 邏輯運(yùn)算符:,, 算術(shù)表達(dá)式:XY X,Y是屬性名、常量、或簡(jiǎn)單函數(shù) 是比較算符,{,,,,,≠}2025/8/14ftt@17ABC367257723443R
A<5(R)
ABC367257443
A<5
C=7(R)
ABC3672572025/8/14ftt@18示例找年齡不小于20的男學(xué)生
AGE≥20∧
SEX=‘male’(S)查詢“01”號(hào)部門(mén)的全體職工信息。σDno=’01’(Employee)查詢“01”號(hào)部門(mén)中已結(jié)婚(即婚否=‘1’)的職工信息。σDno=’01’∧5=’1’(Employee)規(guī)范書(shū)寫(xiě)為:σDno=’01’∧Is_Marry=’1’(Employee)2025/8/14ftt@19投影定義從關(guān)系R中取若干列組成新的關(guān)系(從列的角度)
A(R)={t[A]|tR},AR投影的結(jié)果中要去掉相同的行cbcfedcbaCBABCbcef
B,C(R)
R2025/8/14ftt@20示例給出所有學(xué)生的姓名和年齡
SN,AGE(S)找001號(hào)學(xué)生所選修的課程號(hào)
C#(
S#=001(SC))查詢職工的姓名和職稱(chēng)?!荅name,Title(Employee)或者∏2,6(Employee)2025/8/14ftt@21并運(yùn)算定義所有至少出現(xiàn)在兩個(gè)關(guān)系中之一的元組集合R
S={r|r
R
r
S}兩個(gè)關(guān)系R和S若進(jìn)行并運(yùn)算,則它們必須是相容的:關(guān)系R和S必須是同元的,即它們的屬性數(shù)目必須相同對(duì)
i,R的第i個(gè)屬性的域必須和S的第i個(gè)屬性的域相同R
S2025/8/14ftt@22ABC367257723443RABC345723SABC367257723443345R∪S2025/8/14ftt@23示例求選修了001號(hào)或002號(hào)課程的學(xué)生號(hào) 方案1:∏S#(
C#=001∨
C#=002(SC))
方案2:∏S#(
C#=001(SC))∪∏S#(
C#=002(SC))2025/8/14ftt@24差運(yùn)算定義所有出現(xiàn)在一個(gè)關(guān)系而不在另一關(guān)系中的元組集合R
S={r|r
R
r
S}R和S必須是相容的R
S2025/8/14ftt@25ABC367257723443RABC345723SABC367257443R-SABC367S-R2025/8/14ftt@26示例求選修了001號(hào)而沒(méi)有選002號(hào)課程的學(xué)生號(hào)∏S#(
C#=001(SC))-∏S#(
C#=002(SC))2025/8/14ftt@27交運(yùn)算定義所有同時(shí)出現(xiàn)在兩個(gè)關(guān)系中的元組集合R
S={r|r
R
r
S}交運(yùn)算可以通過(guò)差運(yùn)算來(lái)重寫(xiě)R
S=R
(R
S)R
S2025/8/14ftt@28ABC367257723443RABC345723SABC723R∩S2025/8/14ftt@29示例求同時(shí)選修了001號(hào)和002號(hào)課程的學(xué)生號(hào)錯(cuò)誤的寫(xiě)法:∏S#(C#=001
C#=002(SC))正確的寫(xiě)法:∏S#(C#=001(SC))∩∏S#(C#=002(SC))2025/8/14ftt@30廣義笛卡爾積運(yùn)算元組的連串(Concatenation)若r=(r1,…
,rn),s=(s1,…,sm),則定義r與s的連串為:
rs=(r1,…
,rn,s1,…
,sm)定義兩個(gè)關(guān)系R,S,其度分別為n,m,則它們的笛卡爾積是所有這樣的元組集合:元組的前n個(gè)分量是R中的一個(gè)元組,后m個(gè)分量是S中的一個(gè)元組
R
S={rs|r
R
s
S}R
S的度為R與S的度之和,R
S的元組個(gè)數(shù)為R和S的元組個(gè)數(shù)的乘積2025/8/14ftt@31AB
12rCD
10102010EaabbsAB
11112222CD
1019201010102010Eaabbaabbr
×
s
A=C(rxs)ABCDE
122
102020aab2025/8/14ftt@32
示例求數(shù)學(xué)成績(jī)比王紅同學(xué)高的學(xué)生∏S.姓名(
R.成績(jī)S.成績(jī)R.課程=‘?dāng)?shù)學(xué)’
S.課程=‘?dāng)?shù)學(xué)’
R.姓名=‘王紅’(R
S(R))89數(shù)學(xué)張軍86數(shù)學(xué)王紅93物理張軍成績(jī)課程姓名86數(shù)學(xué)王紅86數(shù)學(xué)王紅86數(shù)學(xué)王紅R.成績(jī)R.課程R.姓名89數(shù)學(xué)張軍86數(shù)學(xué)王紅93物理張軍S.成績(jī)S.課程S.姓名R*更名運(yùn)算2025/8/14ftt@33連接定義從兩個(gè)關(guān)系的廣義笛卡兒積中選取給定屬性間滿足一定條件的元組
RS={rs|r
R
s
S
r[A]
S[B]}A,B為R和S上度數(shù)相等且可比的屬性列為算術(shù)比較符,為等號(hào)時(shí)稱(chēng)為等值連接
RS=
r[A]
S[B](
R×S)A
BA
B2025/8/14ftt@34求數(shù)學(xué)成績(jī)比王紅同學(xué)高的學(xué)生。987654321CBADE3162ABCDE123311236245662
RSB<D
R
S∏S.姓名((課程=數(shù)學(xué)姓名=王紅(R))(
課程=數(shù)學(xué)
S(R)))R.成績(jī)<S.成績(jī)2025/8/14ftt@35自然連接定義從兩個(gè)關(guān)系的廣義笛卡兒積中選取在相同屬性列B上取值相等的元組,并去掉重復(fù)的行。
RS={rs[B]|r
R
s
S
r[B]=S[B]}自然連接與等值連接的不同自然連接中相等的分量必須是相同的屬性組,并且要在結(jié)果中去掉重復(fù)的屬性,而等值連接則不必。當(dāng)R與S無(wú)相同屬性時(shí),RS=R×S2025/8/14ftt@36AB
12412CD
aababrB13123DaaabbE
s
11112
aaaab
ABCDErs987654321CBACD3162
R
SABCD12314562
RS2025/8/1437示例求001號(hào)學(xué)生所在系的名稱(chēng)∏DN(
S#=001(SDEPT))∏DN(
S#=001(S)DEPT)2025/8/1438外連接例:列出老師的有關(guān)信息,包括姓名、工資、所教授的課程∏P#,PN,SAL,C#,CN((PROF)PCC)500李三P04600700800SAL孫立P03錢(qián)廣P02趙明P01PNP#P04C02P02C02P01C01P#C#化學(xué)C03數(shù)學(xué)C02物理C01CNC#數(shù)學(xué)C02500李三P04數(shù)學(xué)C02700錢(qián)廣P02物理C01800趙明P01CNC#SALPNP#問(wèn)題:有關(guān)P03號(hào)職工的姓名和工資信息沒(méi)有顯示出來(lái)2025/8/1439例:列出老師的有關(guān)信息,包括姓名、工資、所教授的課程∏P#,PN,SAL,C#,CN((PROF)PCC)P04C02P02C02P01C01P#C#化學(xué)C03數(shù)學(xué)C02物理C01CNC#顯示所有職工的姓名和工資信息500李三P04600700800SAL孫立P03錢(qián)廣P02趙明P01PNP#左外連接數(shù)學(xué)C02500李三P04數(shù)學(xué)C02700錢(qián)廣P02物理C01800趙明P01CNC#SALPNP#P03孫立600500nullnull2025/8/14ftt@40除運(yùn)算象集(ImageSet)關(guān)系R(X,Z),X,Z是屬性組,x是X上的取值,定義x在R中的象集為Zx={t[Z]|t
Rt[X]=x}
從R中選出在X上取值為x的元組,去掉X上的分量,只留Z上的分量姓名課程張軍物理王紅數(shù)學(xué)張軍數(shù)學(xué)XZ課程數(shù)學(xué)物理Zxx=張軍張軍同學(xué)所選修的全部課程2025/8/14ftt@41如何得到選修了全部課程的學(xué)生? 做法:逐個(gè)考慮選課關(guān)系SC中的元組r,求r在姓名SN上的分量x,再求x在選課關(guān)系中的象集課程Cx,若Cx包含了所有的課程C,則x是滿足條件的一個(gè)元組選修全部課程的學(xué)生x同學(xué)所選修的全部課程全部課程{x|x=r[SN]
rSC
CxC}2025/8/14ftt@42除定義R(X,Y)
S(Y)={x|x=r[x]
r
R
Yx
S}R(X,Y)
S(Y)={t|t
X(R)uS(tu
r)}R(X,Y)
S(Y)=
X(R)
X(
X(R)
Y(S)
R)2025/8/14ftt@43
物理數(shù)學(xué)課程=物理王紅數(shù)學(xué)張軍數(shù)學(xué)王紅物理張軍課程姓名王紅張軍姓名沒(méi)有選修全部課程的學(xué)生所有學(xué)生選修全部課程
=數(shù)學(xué)張軍數(shù)學(xué)王紅物理張軍課程姓名物理王紅數(shù)學(xué)張軍數(shù)學(xué)王紅物理張軍課程姓名姓名王紅姓名王紅張軍姓名王紅
=姓名張軍選修了全部課程的學(xué)生2025/8/14ftt@44ABCDabcdabefabdebcefedcdedefCDcdefABabedABabbcedABCDabcdabefbccdbcefedcdedefR
AB(R)S
AB(R)
CD(S)
AB(R)
CD(S)-RABCDbccdR
S=ABabbcedABbc-=2025/8/14ftt@45示例求同時(shí)選修了001和002號(hào)課程的學(xué)生號(hào)
方案1:∏S#,C#(SC)∏C#(
C#=001
C#=002(C))
方案2:∏S#(SC∏C#(
C#=001
C#=002(C)))
哪一個(gè)正確?√×2025/8/14ftt@46
課程數(shù)學(xué)物理=姓名課程成績(jī)張軍物理93王紅數(shù)學(xué)86張軍數(shù)學(xué)93王紅物理92課程數(shù)學(xué)物理姓名課程張軍物理王紅數(shù)學(xué)張軍數(shù)學(xué)王紅物理姓名張軍王紅=姓名成績(jī)張軍93選修了全部課程并且成績(jī)都相同的學(xué)生選修了全部課程的學(xué)生方案1:∏S#,C#(SC)∏C#(
C#=001
C#=002(C))方案2:∏S#(SC∏C#(
C#=001
C#=002(C)))
2025/8/14ftt@47關(guān)系代數(shù)綜合查詢實(shí)例求僅選修了001號(hào)課程的學(xué)生號(hào)選修001號(hào)課程的學(xué)生-選修了001號(hào)之外課程的學(xué)生=∏S#(
C#=001(SC))-∏S#(SC-
C#=001(SC))S#C#SCOREP03C0288P01C0392S#P01P02S#P01P03S#P022025/8/14ftt@48查詢基本工資在600以上的職工號(hào)。
∏Eno(σBasepay>600
(Salary))查詢“技術(shù)科”負(fù)責(zé)人的職工號(hào)、職工姓名和職稱(chēng)。
∏Eno,Ename,Title(
Employee
σName=’技術(shù)科’(Department))Eno=Manager查詢沒(méi)有參加“200901”項(xiàng)目的職工號(hào)和職工姓名。∏Eno,Ename(Employee)—∏Eno,Ename(σIno=’200901’(Item_Emp)
∏Eno,Ename(Employee))查詢參加了全部項(xiàng)目的職工號(hào)和職工姓名。∏Eno,Ename
(Employee)(Item_Emp÷∏Ino(Item))2025/8/14ftt@49關(guān)系代數(shù)要點(diǎn)分析對(duì)于只涉及到選擇、投影、連接的查詢可用下列表達(dá)式表示:∏
(σ
(R×S))或者∏
(σ
(RS))對(duì)于否定的操作,一般要用差集操作表示。例如“查詢沒(méi)有參加200901項(xiàng)目的職工”。對(duì)于檢索具有“全部”特征的操作,一般要用除法操作表示。例如“查詢參加了全部項(xiàng)目的職工”。
2025/8/14ftt@50關(guān)系代數(shù)要點(diǎn)分析(續(xù))“檢索不學(xué)C2課的學(xué)生姓名”,決不能用下式表示:
∏
SNAME,AGE(σ
C#≠'C2'(SSC))一定要用“差”的形式:
∏
SNAME,AGE(S)-∏
SNAME,AGE(σ
C#='C2'(SSC))“檢索學(xué)習(xí)全部課程的學(xué)生學(xué)號(hào)”,要用∏
S#,C#(SC)÷∏
C#(C)表示,而不能寫(xiě)成∏
S#(SC÷∏
C#(C))形式。這是因?yàn)橐粋€(gè)學(xué)生學(xué)的課程的成績(jī)可能是不一樣的。2025/8/14ftt@51課內(nèi)練習(xí)查詢至少選修了2號(hào)課程和8號(hào)課程的學(xué)生姓名。查詢李勇的年齡。查詢李明同學(xué)不及格的課程名稱(chēng)。查詢沒(méi)有選修“數(shù)據(jù)庫(kù)概論”的學(xué)生姓名。查詢“數(shù)據(jù)庫(kù)概論”成績(jī)?cè)?0分以上的學(xué)生姓名。2025/8/14ftt@52*包
查詢職工的職稱(chēng)。∏Title
(Employee)(a)基于集合的投影(b)基于包的投影Title工程師高工助工Title工程師高工工程師工程師工程師助工助工助工2025/8/14ftt@53*擴(kuò)展運(yùn)算消除重復(fù)操作符δ,把包中的重復(fù)元素都去掉,只保留一個(gè)副本在關(guān)系當(dāng)中。例:對(duì)于基于包的投影運(yùn)算結(jié)果中,若不想出現(xiàn)重復(fù)元組,則δ(∏Title(Employee))用來(lái)消除重復(fù)的元組。結(jié)果就等同于基于集合的投影運(yùn)算。聚集運(yùn)算(AggregationOperator),例如求和或者求平均值,常常和分組(grouping)操作相聯(lián)系。SUM用來(lái)計(jì)算一列值的總和。AVG用來(lái)計(jì)算一列值的平均值。MIN和MAX返回集合中的最小值和最大值。COUNT返回集合中元素的個(gè)數(shù),包括重復(fù)的元組。分組運(yùn)算,根據(jù)元組的值對(duì)它們?cè)谝粋€(gè)或多個(gè)屬性上分組,然后對(duì)分好組的各個(gè)列進(jìn)行聚集操作計(jì)算。分組運(yùn)算符γ是組合了分組和聚集操作的一個(gè)算符。2025/8/14ftt@54*擴(kuò)展運(yùn)算(續(xù))排序運(yùn)算符τ,把一個(gè)關(guān)系變成一個(gè)元組的列表,根據(jù)一個(gè)或者多個(gè)屬性來(lái)排序。例:對(duì)Employee表中數(shù)據(jù)先按所在部門(mén)號(hào)排序,部門(mén)相同的按照職稱(chēng)取值排序。τDno,Title(Employee)廣義投影(GeneralizedProjection)在普通投影操作上增加了一些功能,對(duì)原有的列進(jìn)行一系列計(jì)算產(chǎn)生新的列。例:查詢Employee表中每個(gè)職工姓名和該職工的出生年份。(假設(shè)出生年份計(jì)算為2010-該職工的年齡)?!荅name,2010-Age→YearofDate(Employee)2025/8/14ftt@55查詢優(yōu)化一、什么是查詢優(yōu)化?使查詢數(shù)據(jù)的操作有最優(yōu)的時(shí)間復(fù)雜度和空間復(fù)雜度。即有最優(yōu)的時(shí)間和空間效率。二、誰(shuí)來(lái)做查詢優(yōu)化?DBMS在執(zhí)行用戶的查詢命令時(shí),首先做優(yōu)化。三、為什么要優(yōu)化?2025/8/14ftt@56示例數(shù)據(jù)庫(kù)關(guān)系模式是:student(sno,sname,age,dno)
course(cno,cname)
sc(sno,cno,score)2025/8/14ftt@579900011c001959900021c001809900031c001859900011c002909900011c003809900021c00390c001現(xiàn)代漢語(yǔ)c002大學(xué)英語(yǔ)c003社會(huì)學(xué)99000011李明21計(jì)算機(jī)系99000021張海20外語(yǔ)系99000031劉宏22數(shù)學(xué)系表student表sc表course假如數(shù)據(jù)庫(kù)中對(duì)應(yīng)的3個(gè)表格如下:2025/8/14ftt@58語(yǔ)法分析要求查詢姓名是‘李明’的學(xué)生選修的所有課程的成績(jī)。SQL語(yǔ)句:
selectscore
fromstudent,sc
wherestudent.sno=sc.snoandsname='李明'多種等價(jià)的關(guān)系代數(shù)表達(dá)式:∏score(σsname='李明'
student.sno=sc.sno(student
sc))∏score(σsname='李明'(studentsc))∏score(σsname='李明'(student))sc)2025/8/14ftt@591.∏score(σsname='李明'
student.sno=sc.sno(student
sc))首先做student和sc的笛卡兒積(無(wú)條件連接)形成一個(gè)臨時(shí)表student有3條記錄,sc有6條記錄。執(zhí)行連接操作3×6=18次(占用的時(shí)間)連接后形成的表有18行,7列(占用空間)然后在臨時(shí)表上做選擇,條件是student.sno=sc.snoandsname=‘李明’結(jié)果從臨時(shí)表上選出3條記錄。最后在3條記錄形成的臨時(shí)表上投影,即選擇列score。2025/8/14ftt@602.∏score(σsname='李明'(studentsc))首先做student和sc的自然連接形成一個(gè)臨時(shí)表如下:這種算法循環(huán)執(zhí)行次數(shù)與第一種算法相同,也是3×6=18次。但是形成的臨時(shí)表的空間只有6行,6列。大大提高了空間效率。然后對(duì)臨時(shí)表做選擇sname=‘李明’和投影選擇列score。9900011李明21計(jì)算機(jī)系c001959900011李明21計(jì)算機(jī)系c002909900011李明21計(jì)算機(jī)系c003809900021張海20外語(yǔ)系c001809900021張海20外語(yǔ)系c003909900031劉宏22數(shù)學(xué)系c001852025/8/14ftt@613.∏score(σsname='李明'(student))sc)首先從表student中選擇sname=‘李明’的記錄,形成只有一條記錄的臨時(shí)表然后將這個(gè)臨時(shí)表與表sc做自然連接操作,形成臨時(shí)表如下:這個(gè)自然連接操作循環(huán)次數(shù)為1*6次形成的臨時(shí)表為3行,6列最后在做投影,選擇列score。顯然最后一種算法的時(shí)間和空間效率最優(yōu)。9900011李明21計(jì)算機(jī)系c001959900011李明21計(jì)算機(jī)系c002909900011李明21計(jì)算機(jī)系c003802025/8/14ftt@62DBMS查詢優(yōu)化的步驟step1:把查詢轉(zhuǎn)換成一種計(jì)算機(jī)內(nèi)部表示結(jié)構(gòu)(語(yǔ)法樹(shù))step2代數(shù)優(yōu)化:利用關(guān)系代數(shù)等價(jià)變換規(guī)則以及查詢優(yōu)化的一般策略,將語(yǔ)法樹(shù)進(jìn)行優(yōu)化優(yōu)化策略:一元選擇首先做;投影,選擇同時(shí)做;乘積選擇合并做;索引排序預(yù)先做。關(guān)系代數(shù)的等價(jià)變換規(guī)則step3物理優(yōu)化:選擇適當(dāng)?shù)牡讓哟嫒÷窂絪tep4:生成一組查詢計(jì)劃,從中選擇一個(gè)代價(jià)最小的計(jì)劃2025/8/14ftt@63語(yǔ)法樹(shù)studentscstname=‘李明‘scorescstudentstname=‘李明‘scoresnoΠscore
stname=‘李明‘
student.sno=sc.sno×
StudentSC2025/8/14ftt@64DBMS處理查詢計(jì)劃的過(guò)程:在做完查詢語(yǔ)句的詞法、語(yǔ)法檢查之后,將語(yǔ)句提交給DBMS的查詢優(yōu)化器,優(yōu)化器做完代數(shù)優(yōu)化和存取路徑的優(yōu)化之后,由預(yù)編譯模塊對(duì)語(yǔ)句進(jìn)行處理并生成查詢規(guī)劃,然后在合適的時(shí)間提交給系統(tǒng)處理執(zhí)行,最后將執(zhí)行結(jié)果返回給用戶。幾種改善用戶查詢計(jì)劃的解決方案。2025/8/14ftt@651.合理使用索引索引是數(shù)據(jù)庫(kù)中重要的數(shù)據(jù)結(jié)構(gòu),它的根本目的就是為了提高查詢效率。現(xiàn)在大多數(shù)的數(shù)據(jù)庫(kù)產(chǎn)品都采用IBM最先提出的ISAM索引結(jié)構(gòu)。索引的使用要恰到好處,其使用原則如下:在經(jīng)常進(jìn)行連接,但是沒(méi)有指定為外鍵的列上建立索引,而不經(jīng)常連接的字段則由優(yōu)化器自動(dòng)生成索引。在頻繁進(jìn)行排序或分組(即進(jìn)行g(shù)roupby或orderby操作)的列上建立索引。在條件表達(dá)式中經(jīng)常用到的不同值較多的列上建立檢索,在不同值少的列上不要建立索引。比如在雇員表的“性別”列上只有“男”與“女”兩個(gè)不同值,因此就無(wú)必要建立索引。如果建立索引不但不會(huì)提高查詢效率,反而會(huì)嚴(yán)重降低更新速度。如果待排序的列有多個(gè),可以在這些列上建立復(fù)合索引(compoundindex)。當(dāng)數(shù)據(jù)庫(kù)表更新大量數(shù)據(jù)后,刪除并重建索引可以提高查詢速度。2025/8/14ftt@662.避免或簡(jiǎn)化排序應(yīng)當(dāng)簡(jiǎn)化或避免對(duì)大型表進(jìn)行重復(fù)的排序。當(dāng)能夠利用索引自動(dòng)以適當(dāng)?shù)拇涡虍a(chǎn)生輸出時(shí),優(yōu)化器就避免了排序的步驟。以下是一些影響因素:索引中不包括一個(gè)或幾個(gè)待排序的列;groupby或orderby子句中列的次序與索引的次序不一樣;排序的列來(lái)自不同的表。
為了避免不必要的排序,就要正確地增建索引,合理地合并數(shù)據(jù)庫(kù)表(盡管有時(shí)可能影響表的規(guī)范化,但相對(duì)于效率的提高是值得的)。如果排序不可避免,那么應(yīng)當(dāng)試圖簡(jiǎn)化它,如縮小排序的列的范圍等。2025/8/14ftt@673.消除對(duì)大型表行數(shù)據(jù)的順序存取在嵌套查詢中,對(duì)表的順序存取對(duì)查詢效率可能產(chǎn)生致命的影響。比如采用順序存取策略,一個(gè)嵌套3層的查詢,如果每層都查詢1000行,那么這個(gè)查詢就要查詢10億行數(shù)據(jù)。避免這種情況的主要方法就是對(duì)連接的列進(jìn)行索引。例如,兩個(gè)表:學(xué)生表(學(xué)號(hào)、姓名、年齡……)和選課表(學(xué)號(hào)、課程號(hào)、成績(jī))。如果兩個(gè)表要做連接,就要在“學(xué)號(hào)”這個(gè)連接字段上建立索引。還可以使用并集來(lái)避免順序存取。盡管在所有的檢查列上都有索引,但某些形式的where子句強(qiáng)迫優(yōu)化器使用順序存取。下面的查詢將強(qiáng)迫對(duì)orders表執(zhí)行順序操作:
SELECT*FROMordersWHEREcustomer_num=104ORorder_num=1008雖然在customer
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年糧食作物項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告
- 2026屆湖北省八校高三化學(xué)第一學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)試題含解析
- 供熱地暖培訓(xùn)課件
- 2024年淮安盱眙縣事業(yè)單位筆試真題(附答案)
- 供應(yīng)鏈財(cái)務(wù)知識(shí)培訓(xùn)課件
- 2025裝修施工協(xié)議合同范本
- 2026屆江蘇省東臺(tái)市第一中學(xué)高三化學(xué)第一學(xué)期期末聯(lián)考模擬試題含解析
- 2025年重組載體疫苗項(xiàng)目建議書(shū)
- 2025年半導(dǎo)體測(cè)試技術(shù)項(xiàng)目發(fā)展計(jì)劃
- 2025至2030中國(guó)軟件行業(yè)項(xiàng)目調(diào)研及市場(chǎng)前景預(yù)測(cè)評(píng)估報(bào)告
- 2024新版藥品管理法培訓(xùn)課件
- 護(hù)士健康宣教指導(dǎo)手冊(cè)系列老年病房
- 貴州省遵義市紅花崗區(qū)2024屆小升初模擬數(shù)學(xué)測(cè)試卷含解析
- 中建三局三公司安裝分公司勞務(wù)企業(yè)定額
- 狼瘡腎炎的營(yíng)養(yǎng)支持策略
- 初中數(shù)學(xué)“綜合與實(shí)踐”如何開(kāi)展項(xiàng)目式學(xué)習(xí)義務(wù)教育課程方案和課程標(biāo)準(zhǔn)國(guó)家級(jí)示范培訓(xùn)課件
- 2024年廣東梅州市梅江區(qū)總工會(huì)社會(huì)化工會(huì)工作者招聘筆試沖刺題(帶答案解析)
- 一二手聯(lián)動(dòng)培訓(xùn)課件
- 創(chuàng)業(yè)中的團(tuán)隊(duì)管理與組建
- 六角亭承包合同書(shū)
- 骨科膝骨關(guān)節(jié)炎一病一品優(yōu)質(zhì)護(hù)理匯報(bào)課件
評(píng)論
0/150
提交評(píng)論