關(guān)系數(shù)據(jù)庫系統(tǒng)理論基礎(chǔ)_第1頁
關(guān)系數(shù)據(jù)庫系統(tǒng)理論基礎(chǔ)_第2頁
關(guān)系數(shù)據(jù)庫系統(tǒng)理論基礎(chǔ)_第3頁
關(guān)系數(shù)據(jù)庫系統(tǒng)理論基礎(chǔ)_第4頁
關(guān)系數(shù)據(jù)庫系統(tǒng)理論基礎(chǔ)_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第2章關(guān)系數(shù)據(jù)庫系統(tǒng)理論基礎(chǔ)

本章要點關(guān)系模型關(guān)系數(shù)據(jù)結(jié)構(gòu)及形式化定義關(guān)系的完整性約束關(guān)系代數(shù)關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL關(guān)系的規(guī)范化關(guān)系模型是建立在數(shù)學(xué)概念上的,與層次模型、網(wǎng)狀模型相比,關(guān)系模型是一種最重要的數(shù)據(jù)模型。它主要由關(guān)系數(shù)據(jù)結(jié)構(gòu)、關(guān)系操作集合、關(guān)系完整性約束三部分組成。實際上,關(guān)系模型可以理解為用二維表格結(jié)構(gòu)來表示實體及實體之間聯(lián)系的模型,表格的列表示關(guān)系的屬性,表格的行表示關(guān)系中的元組。關(guān)系數(shù)據(jù)模型的常用操作有選擇(select)、投影(project)、連接(join)、除(divide)、并(union)、交(intersection)、差(difference)等查詢(query)操作,另外還有增加(insert)、刪除(delete)、修改(update)操作。關(guān)系操作的特點是集合操作方式,即操作的對象和結(jié)果都是集合。2.1關(guān)系模型概述關(guān)系數(shù)據(jù)語言是一種高度的非過程化的語言,用戶不必知道具體的操作路徑,存取路徑的選擇由DBMS的優(yōu)化機(jī)制完成。主要包括關(guān)系代數(shù)語言、關(guān)系演算語言和SQL語言(關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言)。關(guān)系模型允許定義三類完整性約束:實體完整性、參照完整性和用戶定義的完整性。實體完整性和參照完整性是關(guān)系模型必須滿足的完整性約束條件。用戶定義的完整性是應(yīng)用領(lǐng)域需要遵循的約束條件。2.2關(guān)系數(shù)據(jù)結(jié)構(gòu)及形式化定義2.2.1關(guān)系的數(shù)學(xué)定義(1)域(Domain)定義2.1域是一組具有相同數(shù)據(jù)類型的值集合。例如:{1,3,5,7},{整數(shù)}等都可以是域。域中數(shù)據(jù)的個數(shù)稱為域的基數(shù)。域被命名后用如下方法表示:

D1={王麗麗,張亭,李中},表示姓名的集合,基數(shù)是3;

D2={英語系,中文系},表示系別的集合,基數(shù)是2。(2)笛卡爾積(CartesianProduct)

定義2.2給定一組域D1,D2,…,Di,…,Dn(可以有相同的域),則笛卡爾積定義為:D1′D2′…′Di′…′Dn={(d1,d2,…,di,…,dn)∣di∈Di,i=1,2,…,n}D1′D2={(王麗麗,英語系),(王麗麗,中文系),(張亭,英語系),(張亭,中文系),(李中,英語系),(李中,中文系)}其中每個(d1,d2,…,di,…,dn)叫做元組,元組中的每一個值di叫做分量,di必須是Di中的一個值。顯然,笛卡爾積的基數(shù)就是構(gòu)成該積所有域的基數(shù)累乘積,若Di(i=1,2,…,n)為有限集合,其基數(shù)為mi(i=1,2,…,n),則D1′D2′…′Di′…′Dn笛卡爾積的基數(shù)M為:該笛卡爾積的基數(shù)是M=m1′m2=3′2=6,即該笛卡爾積共有6個元組,它可組成一張二維表,如表2-1所示。表2-1D1,D2的笛卡爾積(3)關(guān)系(Relation)

定義2.3笛卡爾積D1′D2′…′Di′…′Dn的子集R稱作在域D1,D2,…,Dn上的關(guān)系,記作:R(D1,D2,…,Di,…,Dn)

其中:R為關(guān)系名,n為關(guān)系的度或目(Degree),Di是域組中的第i個域名。當(dāng)n=1時,稱該關(guān)系為單元關(guān)系;姓名院系王麗麗英語系王麗麗中文系張亭英語系張亭中文系李中英語系李中中文系當(dāng)n=2時,稱該關(guān)系為二元關(guān)系;以此類推,關(guān)系中有n個域,稱該關(guān)系為n元關(guān)系。下面是關(guān)系中涉及到的一些相關(guān)概念:(1)屬性(Attribute):列的名字。(2)候選碼:若關(guān)系中的某一屬性組的值能唯一地標(biāo)識一個元組,則稱該屬性組為候選碼(CandidateKey)。(3)主碼:若一個關(guān)系有多個候選碼,則選定其中的一個為主碼(PrimaryKey)。(4)主屬性:主碼的諸屬性為主屬性(PrimeAttribute)。(5)非碼屬性:不包含在任何候選碼中的屬性稱為非碼屬性。(6)全碼:關(guān)系模式的所有屬性組是這個關(guān)系模式的候選碼,稱為全碼(All-key)。

一般來說,一個關(guān)系取自笛卡爾積的子集才有意義。例如表2-2所示:

表2-2D1,D2的笛卡爾積中構(gòu)造的關(guān)系(4)關(guān)系的三種類型①基本關(guān)系(基本表或基表):實際存在的表,它是實際存儲數(shù)據(jù)的邏輯表示。②查詢表:查詢結(jié)果對應(yīng)的表。③視圖表:有基本表或其他視圖導(dǎo)出的表,是虛表,不對應(yīng)實際存儲的數(shù)據(jù)。姓名院系王麗麗英語系張亭中文系李中英語系2.2.2關(guān)系的性質(zhì)關(guān)系是一種規(guī)范化了的二維表中行的集合。為了使相應(yīng)的數(shù)據(jù)操作簡化,在關(guān)系模型中對關(guān)系進(jìn)行了限制,因此關(guān)系具有以下六條性質(zhì):(1)列是同質(zhì)的,即每一列中的分量是同一類型的數(shù)據(jù),來自同一個域。(2)關(guān)系中的任意兩個元組不能相同。(3)關(guān)系中不同的列來自相同的域,每一列中有不同的屬性名。(4)關(guān)系中列的順序可以任意互換,不會改變關(guān)系的意義。(5)行的次序和列的次序一樣,也可以任意交換。(6)關(guān)系中每一個分量都必須是不可分的數(shù)據(jù)項,元組分量具有原子性。2.2.3關(guān)系模式定義2.4對關(guān)系結(jié)構(gòu)的描述稱為關(guān)系模式。關(guān)系模式可以形式化地表示為:R(U,D,dom,F),其中:

R:關(guān)系名。

U:組成該關(guān)系的屬性名集合。

D:屬性的域。

dom:屬性向域的映象集合。屬性向域的映象常常直接說明為屬性的類型、長度。

dom(教師)=dom(學(xué)生)=人

F:屬性間數(shù)據(jù)的依賴關(guān)系集合。關(guān)系模式指出了關(guān)系由哪些屬性組成。關(guān)系模式是靜態(tài)的、穩(wěn)定的,而關(guān)系是動態(tài)的、不斷變化的,它是關(guān)系模式在某一時刻的狀態(tài)和內(nèi)容。關(guān)系模式是型,關(guān)系是值。一般地,從兩個方面描述一個關(guān)系:首先,關(guān)系模式必須指出它由哪些屬性構(gòu)成,這些屬性來自哪個域,以及屬性與域之間的映象關(guān)系。其次,關(guān)系通常由賦予它的元組語義來確定。一組關(guān)系模式的集合構(gòu)成了關(guān)系數(shù)據(jù)庫模式。關(guān)系數(shù)據(jù)庫模式即為關(guān)系數(shù)據(jù)庫的型,關(guān)系數(shù)據(jù)庫的值即為關(guān)系模式在某一時刻對應(yīng)的關(guān)系的集合。2.3關(guān)系的完整性關(guān)系的完整性有三類:實體完整性、參照完整性和用戶定義的完整性。在闡述各類完整性之前,首先介紹幾個術(shù)語。候選鍵(CandidateKey)若關(guān)系中的某一屬性組的值能惟一地標(biāo)識一個元組,則稱該屬性組為候選鍵。主鍵(PrimaryKey)若一個關(guān)系中有多個候選鍵,則選定一個為主鍵。主屬性(PrimaryAttribute)主鍵的屬性稱為主屬性。外鍵(ForeignKey)設(shè)F是基本關(guān)系R的一個或一組屬性,但不是R的鍵(主鍵或候選鍵),如果F與基本關(guān)系S的主鍵K相對應(yīng),則稱F是R的外鍵,并稱R為參照關(guān)系,S為被參照關(guān)系。2.3.1實體完整性(EntityIntegrity)

實體完整性規(guī)則是指若屬性A是基本關(guān)系R的主屬性,則屬性A不能取空值。實體完整性規(guī)則規(guī)定基本關(guān)系的所有主屬性都不能取空值(Null),而不僅是主碼整體不能取空值??罩稻褪?不知道"或"無意義"。例2.1有如下關(guān)系模式:學(xué)生(學(xué)號,姓名,性別,年齡,籍貫)學(xué)號屬性為主碼,不能取空值。必修課(學(xué)號,課程號,成績)學(xué)號,課程號為主碼,都不能取空值。若屬性(或?qū)傩越M)F是基本關(guān)系R的外碼,它與基本關(guān)系S的主碼Ks相對應(yīng)(基本關(guān)系R和S不一定是不同的關(guān)系),則對于R中每個元組在F上的值必須為如下兩種取值之一:(1)取空值(F的每個屬性值均為空值);(2)等于S中某個元組的主碼值。例2.2有如下關(guān)系模式:學(xué)生(學(xué)號,姓名,性別,院系號,年齡)院系(院系號,專業(yè)名)院系號屬性是學(xué)生關(guān)系的外碼,院系關(guān)系是被參照關(guān)系,學(xué)生關(guān)系為參照關(guān)系。例2.3有如下關(guān)系模式:學(xué)生(學(xué)號,姓名,性別,院系號,年齡)課程(課程號,課程名,學(xué)分)選修(學(xué)號,課程號,成績)學(xué)號,課程號屬性是必修關(guān)系的外碼。學(xué)生關(guān)系和課程關(guān)系均為被參照關(guān)系,必修關(guān)系為參照關(guān)系。例2.4有如下關(guān)系模式:學(xué)生(學(xué)號,姓名,性別,院系號,年齡,班長)班長屬性與本身的主碼學(xué)號屬性相對應(yīng),因此班長是外碼。學(xué)生關(guān)系既是參照關(guān)系又是被參照關(guān)系。

2.3.2用戶定義完整性用戶定義的完整性就是用戶按照實際的數(shù)據(jù)庫應(yīng)用系統(tǒng)運行環(huán)境要求,針對某一具體關(guān)系數(shù)據(jù)庫的約束條件。例如某個屬性"成績"的取值范圍必須在0~100之間。用戶定義完整性反映某一具體應(yīng)用所涉及的數(shù)據(jù)必須滿足的語義要求。2.4關(guān)系代數(shù)關(guān)系代數(shù)的基本有兩類:一類是傳統(tǒng)的集合運算,另一類是專門的關(guān)系運算。其運算符包括四類:集合運算符(∪、-、∩)、專門的關(guān)系運算符(×、σ、π、∞、÷)、算術(shù)比較符(>、≥、<、≤、=、≠)和邏輯運算符(﹁、∧、∨)。2.4.1傳統(tǒng)的集合運算傳統(tǒng)的集合運算包括并、交、差、廣義笛卡爾積四種運算。當(dāng)集合運算并、交、差用于關(guān)系時,要求參與運算的兩個關(guān)系必須時相容的,即兩個關(guān)系的度數(shù)一致,并且關(guān)系屬性的性質(zhì)必須一致。設(shè)R和S均為n目關(guān)系。(1)并(union)

是將兩個關(guān)系中的所有元組構(gòu)成新的關(guān)系,并運算的結(jié)果中必須消除重復(fù)值。關(guān)系R和S的并記作:R∪S={t|t∈R∨t∈S}其結(jié)果仍為n目關(guān)系,由屬于R或?qū)儆赟的元組組成。(2)差(difference)

運算結(jié)果是由屬于一個關(guān)系并且不屬于另一個關(guān)系的元組構(gòu)成的新關(guān)系,就是從一個關(guān)系中減去另一個關(guān)系。關(guān)系R與S的差記作:

R-S={t|t∈R∧t?S}

其結(jié)果關(guān)系仍為n目關(guān)系,由屬于R而不屬于S的所有元組組成。

(3)交(intersection)

將兩個關(guān)系中的公共元組構(gòu)成新的關(guān)系。關(guān)系R與S的交記作:R∩S={t|t∈R∧t∈S}

其結(jié)果關(guān)系仍為n目關(guān)系,由既屬于R又屬于S的元組組成。(4)廣義笛卡爾積(extendedcartesianproduct)n目關(guān)系R與m目關(guān)系S的廣義笛卡爾積是一個(n+m)列的元組的集合。元組的前n列是關(guān)系R的一個元組,后m列是關(guān)系S的一個元組。若R有k1個元組,S有k2個元組,則關(guān)系R與關(guān)系S的廣義笛卡爾積有k1×k2個元組。記作:R×S={tr︵ts|tr∈R∧ts∈S}2.4.2專門的關(guān)系運算專門的關(guān)系運算包括:選擇、投影、連接、除,為了敘述上的方便,首先引入幾個記號。設(shè)關(guān)系模式R(A1,A2,…,An)(1)t[Ai]表示元組t中相應(yīng)于屬性Ai的一個分量。(2)若A={Ai1,Ai2,…,Ain},其中Ai1,Ai2,…,Ain是A1,A2,…,An中的一部分,則A稱為屬性列或域列。t[A]=(t[Ai1],t[Ai2],…,t[Ain])表示t在屬性列A上諸分量的集合。A則表示{A1,A2,…,An}中去掉{Ai1,Ai2,…,Ain}后剩余的屬性組。(3)R為n目關(guān)系,S為m關(guān)系。tr∈R,ts∈S,tr︵ts稱為元組的連接。它是一個n+m列元組,前n個分量為R中的一個n元組,后m個分量為S中的一個m元組。(4)給定一個關(guān)系R(X,Z),X和Z為屬性組。定義當(dāng)t[X]=x時,x在R中的象集為:Zx={t[Z]|t∈R,t[X]=x},它表示R中屬性組X上值為x的諸元組的集合。下面介紹關(guān)系運算的定義:(1)選擇(Selection)是按照給定條件從指定的關(guān)系中挑選出滿足條件的元組構(gòu)成新的關(guān)系?;蛘哒f,選擇運算的結(jié)果是一個表的行的子集。它是在關(guān)系R中選擇滿足給定條件的諸元組。記作σF(R)={t|tt∈R∧F(t)='真'},其中F為邏輯表達(dá)式。選擇運算實際上是從關(guān)系R中選取邏輯表達(dá)式F為真的元組。這是從行的角度進(jìn)行的運算。(2)投影(projection)

是從指定的關(guān)系中挑選出某些屬性構(gòu)成新的關(guān)系?;蛘哒f,選擇運算的結(jié)果是一個表的列的子集。關(guān)系R上的投影是從R中選擇出若干屬性列組成新的關(guān)系。記作:πA(R)={t[A]|t∈R},

其中A為R中的屬性列。投影操作是從列的角度進(jìn)行的運算。投影的結(jié)果將取消由于取消了某些列而產(chǎn)生的重復(fù)元組。(3)連接(join)

連接也稱為θ連接,是將兩個和多個關(guān)系連接在一起,形成一個新的關(guān)系。連接運算是按照給定條件,把滿足條件的各關(guān)系的所有元組,按照一切可能組合成新的關(guān)系。或者說,連接運算的結(jié)果是從兩個關(guān)系的笛卡爾積中選取屬性間滿足一定條件的元組。記作:RS={tr︵ts|tr∈R∧ts∈S∧tr[A]θts[B]}

兩種重要的連接:等值連接、自然連接。

①等值連接:θ為"="的連接運算為等值連接。它是從關(guān)系R與關(guān)系S的廣義笛卡爾積中選取A、B屬性值相等的那些元組,即:RS={tr︵ts|tr∈R∧ts∈S∧tr[A]=ts[B]}②自然連接:當(dāng)連接的兩關(guān)系有相同的屬性名時,稱這種連接為自然連接,它是一種特殊的等值連接。它要求兩個關(guān)系中進(jìn)行比較的分量必須是相同的屬性組。并且在結(jié)果中把重復(fù)的屬性列去掉。即若R和S具有相同的屬性組B,則自然連接可記作:RS={tr︵ts|tr∈R∧ts∈S∧tr[A]=ts[B]}(4)除給定關(guān)系R(X,Y)和S(Y,Z),其中X,Y,Z為屬性組。R中的Y與S中的Y可以有不同的屬性名,但必須出自相同的域集。R與S的除運算得到一個新的關(guān)系P(X),P是R中滿足下列條件的元組在X屬性列上的投影:元組在X上分量值x的象集Yx包含S在Y上投影的集合。記作:

R÷S={tr[X]|tr∈R∧πy(S)íYx},其中Yx為x在R中的象集,x=tr[X]。

2.5關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL

2.5.1SQL語言基本知識(1)SQL的特點

SQL語言是一種關(guān)系數(shù)據(jù)庫語言,它綜合統(tǒng)一、功能強(qiáng)大、簡捷易學(xué),是目前的國際標(biāo)準(zhǔn)數(shù)據(jù)庫語言。SQL語言主要具有如下特點:①綜合統(tǒng)一

SQL語言提供數(shù)據(jù)的定義、查詢、更新和控制等功能,集數(shù)據(jù)定義語言DDL,數(shù)據(jù)操縱語言DML、數(shù)據(jù)控制語言DCL的功能于一體,語言風(fēng)格統(tǒng)一。功能強(qiáng)大、能夠完成各種數(shù)據(jù)庫操作。②高度非過程化用戶無需了解存取路徑,存取路徑的選擇及SQL語句的操作過程由系統(tǒng)自動完成。③面向集合的操作方式

SQL語言采用集合操作方式,不僅操作對象、查找結(jié)果可以是元組的集合,而且一次插入、刪除、更新操作的對象也可以是元組的集合。④以同一種語法結(jié)構(gòu)提供兩種使用方式,一種是自含式語言,以獨立交互式使用,另一種是嵌入式語言,主要嵌入到其他高級語言中使用。⑤不是一個應(yīng)用程序開發(fā)語言,只提供對數(shù)據(jù)庫的操作能力,不能完成屏幕控制、菜單管理、報表生成等功能。⑥書寫簡單、易學(xué)易用。(2)SQL語言的組成①數(shù)據(jù)定義語言(DataDefinitionLanguage,DDL)

創(chuàng)建、修改或刪除數(shù)據(jù)庫中各種對象,包括數(shù)據(jù)庫、表、視圖以及索引等。②數(shù)據(jù)操縱語言(DataManipulationLanguage,DML)

對已經(jīng)存在的數(shù)據(jù)庫進(jìn)行記錄的插入、刪除、修改等操作,可以分成數(shù)據(jù)查詢和數(shù)據(jù)更新兩大類。③數(shù)據(jù)控制語言(DataControlLanguage,DCL)

用來授予或收回訪問數(shù)據(jù)庫的某種特權(quán)、控制數(shù)據(jù)操縱事務(wù)的發(fā)生時間及效果、對數(shù)據(jù)庫進(jìn)行監(jiān)視,包括對表和視圖的授權(quán),完整性規(guī)則的描述,并發(fā)控制,事務(wù)控制等。(3)SQL數(shù)據(jù)庫體系結(jié)構(gòu)及基本概念

SQL語言支持關(guān)系數(shù)據(jù)庫三級模式結(jié)構(gòu)。外模式對應(yīng)于視圖(VIEW)和部分基本表(BaseTable),模式對應(yīng)于基本表,內(nèi)模式對應(yīng)于存儲文件?;颈硎仟毩⒋嬖诘谋恚琒QL中一個關(guān)系對應(yīng)一個基本表。一個或多個基本表對應(yīng)一個存儲文件,一個表可以帶若干索引,索引也存放在存儲文件中。視圖是從一個或幾個基本表導(dǎo)出的表。它本身不獨立存儲在數(shù)據(jù)庫中,在數(shù)據(jù)庫中只存放視圖的定義而不存放視圖對應(yīng)的數(shù)據(jù),這些數(shù)據(jù)仍存放在導(dǎo)出視圖的基本表中,因此視圖是一個虛表。用戶可以在視圖上再定義視圖。2.5.2數(shù)據(jù)定義命令2.5.2.1定義基本表使用SQL語言定義基本表的語句格式是:CREATETABLE<表名>(<列名><數(shù)據(jù)類型>[列級完整性約束條件][,<列名><數(shù)據(jù)類型>[列級完整性約束條件]]…[,<表級完整性約束條件>]);需要注意的是,在實際操作中,建表的同時還會定義與該表有關(guān)的完整性約束條件,如果完整性約束條件涉及到該表的多個屬性列,則必須定義在表級上,否則既可以定義在列級也可以定義在表級。例2.16建立一個"學(xué)生信息"表Studentinfo,它由學(xué)號Snumber、姓名Sname

、性別Ssex、生日Sbirthday

、所在院系Sdepartment五個屬性組成。其中學(xué)號不能為空,值是唯一的,并且姓名取值也唯一。2.5.2.2修改基本表使用SQL語言修改基本表的語句格式是:ALTERTABLE<表名>[ADD<新列名><數(shù)據(jù)類型>[完整性約束]][DROP<完整性約束名>][MODIFY<列名><數(shù)據(jù)類型>];

<表名>:指要修改的基本表。ADD子句:增加新列和新的完整性約束條件。DROP:刪除指定的完整性約束體條件。MODIFY:用于修改原有列的定義。

createtableStudentinfo(Snumberchar(8)notnull,

Snamechar(8)notnull,sexchar(2)notnull,

Sbirthday

datetime,

Sdepartmentchar(12));2.5.2.3刪除基本表使用SQL語言刪除基本表的語句格式是:

DROPTABLE<表名>2.5.2.4建立索引索引是對數(shù)據(jù)庫表中一個或多個列的值進(jìn)行排序的結(jié)構(gòu)??梢岳盟饕焖僭L問數(shù)據(jù)庫表中的信息。使用SQL語言建立索引的語句格式是:

CREATE[UNIQUE][CLUSTER]INDEX<索引名>ON<表名>(<列名>[<次序>][,<列名>[<次序>]]…);<表名>:將要建立索引的基本表的名字。索引可以建立在該表的一列或多列上,各列名之間用逗號分隔。次序:指定索引值的排列次序,可選ASC(升序)或DESC(降序),缺升值為ASC。

UNIQUE:表明此索引的每一個索引值只對應(yīng)唯一的數(shù)據(jù)記錄。

CLUSTER:表示要建立的索引是聚簇索引。所謂聚簇索引是指索引項的順序與表中記錄的物理順序一致的索引組織。在一個基本表上只能建立一個聚簇索引。2.5.2.5刪除索引建立索引是為了提高查詢速度,但隨著索引的增多,數(shù)據(jù)更新時,系統(tǒng)會花費很多時間來維護(hù)索引,因此,可以及時刪除不必要的索引。使用SQL語言刪除索引的語句格式是:

DROPINDEX<索引名>

注意:該命令不能刪除由CREATETABLE或者ALTERTABLE命令創(chuàng)建的主鍵和唯一性約束索引,也不能刪除系統(tǒng)表中的索引。2.5.3數(shù)據(jù)查詢語言數(shù)據(jù)庫查詢是數(shù)據(jù)庫的核心操作。SQL提供了功能強(qiáng)大的SELECT語句,通過查詢到做可以得到所需要的信息。SELECT語句的格式為:SELECT[ALL|DISTINCT]<目標(biāo)列表達(dá)式>[,<目標(biāo)列表達(dá)式>]…FROM<表名或視圖名>[,表名或視圖名]…[WHERE<條件表達(dá)式>][GROUPBY<列名1>[HAVING<條件表達(dá)式>]][ORDERBY<列名2>[ASC|DESC]];

單表查詢

連接查詢連接查詢包括:等值連接、自然連接、非等值連接查詢、自身連接查詢、外連接查詢和復(fù)合條件連接查詢。(1)等值與非等值連接查詢連接查詢中用來連接兩個表的條件稱為連接條件或連接謂詞。格式:[<表名1>.]<列名1><比較運算符>[<表名2>.]<列名2>(2)自身連接一個表與其自己進(jìn)行連接,稱為表的自身連接。(3)外連接在通常的連接操作中,都是把滿足條件的元組作為結(jié)果輸出。有時需要把不滿足條件的元組輸出,采用外連接的方法。在外連接中,參與連接的表有主從之分,運算時以主表中的每一行去匹配從表中的數(shù)據(jù)行。符合連接條件的數(shù)據(jù)將直接作為結(jié)果返回,對那些不符合條件的數(shù)據(jù),將被填上NULL值后和主表中對應(yīng)數(shù)據(jù)行組合作為結(jié)果數(shù)據(jù)返回。

外連接分為左外連接和右外連接兩種,主表在左邊稱為左外連接,主表在右邊稱為右外連接。表示的方法為,在連接謂詞的某一邊加上"*"號,如果"*"號出現(xiàn)在連接條件的左邊為左外連接,否則為右外連接。(4)復(fù)合條件連接

WHERE子句中可以有多個連接條件,稱為復(fù)合條件連接?!袂短撞樵?/p>

SQL語言中,一個SELECT-FROM-WHERE語句稱為一個查詢塊,一個查詢塊嵌套在另一個查詢塊的WHERE子句或HAVING短語的條件中的查詢稱為嵌套查詢。例如:selectXMingfromXShengwhereXHaoinselectXHaofromXKewhereKChHao='2';上層的查詢塊稱為外層查詢(父查詢)。下層的查詢塊稱為內(nèi)層查詢(子查詢)。需要注意的是子查詢的select語句中不能使用orderby子句,orderby子句只能用于對最終查詢結(jié)果的排序。嵌套查詢的求解方法為由里(內(nèi)層查詢)向外(外層查詢)進(jìn)行處理。子查詢的結(jié)果用于建立其父查詢的查找條件。⑴帶有IN謂詞的子查詢。⑵帶有比較運算符的子查詢⑶帶有ANY或ALL謂詞的子查詢

ANY:表示"某個值"。

ALL:表示“所有值”?!窦喜樵兛梢詫⒍鄠€select語句的結(jié)果進(jìn)行集合操作。集合查詢主要包括:并UNION,交INTERSECT,差MINUS操作。其中交、差操作不能直接完成,可用其他的方法來實現(xiàn)。2.5.4數(shù)據(jù)更新語言

SQL語言的更新操作包括插入數(shù)據(jù)、修改數(shù)據(jù)和刪除數(shù)據(jù)三條語句。●插入數(shù)據(jù)(1)插入單個元組格式:INSERTINTO<表名>[(<屬性列1>[,<屬性列2>…])

VALUES(<常量1>[,<常量2>]…);功能:將新元組插入指定的表中。屬性列與常量一一對應(yīng),沒出現(xiàn)的屬性列將取空值。注意:在表定義時說明了NOTNULL的屬性列不能取空值。(2)插入子查詢結(jié)果格式:INSERTINTO<表名>[(<屬性列1>[,<屬性列2>…])子查詢;●修改數(shù)據(jù)格式:UPDATE<表名>SET<列名>=<表達(dá)式>[,<列名>=<表達(dá)式>]…[WHERE<條件>];功能:修改指定表中滿足WHERE子句條件的元組。SET子句用于修改新值。省略WHERE子句,表示修改所有元組。(1)修改某一個元組的值。(2)修改多個元組的值(3)帶子查詢的修改語句●刪除數(shù)據(jù)格式:DELETEFROM<表名>[WHERE<條件>];功能:刪除指定表中滿足條件的元組,如果省略WHERE子句,表示刪除全部元組。注意DELETE語句刪除表中的數(shù)據(jù),不刪除表的定義。(1)刪除某一個元組的值(2)刪除多個元組的值(3)帶子查詢的刪除語句2.5.5視圖視圖是關(guān)系數(shù)據(jù)庫系統(tǒng)提供給以多種角度觀察數(shù)據(jù)庫中數(shù)據(jù)的重要機(jī)制,它就象一個窗口,透過它可以看到數(shù)據(jù)庫中用戶感興趣的數(shù)據(jù)及其變化。2.5.5.1視圖的特點(1)視圖是從一個或幾個基本表(或視圖)導(dǎo)出的表,它與基本表不同,是一個虛表,因此視圖是邏輯表,不是物理存在的表;(2)數(shù)據(jù)庫執(zhí)行CREATEVIEW語句的結(jié)果只是把視圖的定義存入數(shù)據(jù)字典,并不執(zhí)行SELECT語句,只是在對視圖查詢時,才按視圖的定義從基本表中將數(shù)據(jù)查出。;(3)一個基本表可以建立多個視圖,一個視圖也可以在多個表上建立;(4)視圖擁有表的幾乎所有操作,一經(jīng)定義,就可以和基本表一樣被查詢、被刪除;(5)基本表中的數(shù)據(jù)發(fā)生變化,從視圖中查詢出的數(shù)據(jù)也隨之改變;(6)視圖中的數(shù)據(jù)是從現(xiàn)有的一個或多個表中提取出來的,可以屏蔽表中的某些信息,有利于數(shù)據(jù)庫的安全性;(7)視圖在數(shù)據(jù)庫中是作為查詢來保存的,當(dāng)引用一個查詢時,DBMS就執(zhí)行這個查詢,然后將查詢結(jié)果作為視圖來用;(8)有利于應(yīng)用程序的獨立性、數(shù)據(jù)一致性;(9)可以在視圖上再定義視圖,但對視圖的更新操作則有一定的限制。2.5.5.2視圖的定義(1)視圖的建立建立視圖的語句格式:

CREATEVIEW<視圖名>[(<列名1>,<列名2>,…)]AS<查詢子句>[WITHCHECKOPTION];①子查詢可以是任意復(fù)雜的SELECT語句,但通常不允許含有ORDERBY子句和DISTINCT短語。②WITHCHECKOPTION子句是為了防止用戶通過視圖對數(shù)據(jù)進(jìn)行更新(UPDATE)、插入(INSERT)、刪除(DELETE)操作時,對不屬于視圖范圍內(nèi)的基本表數(shù)據(jù)進(jìn)行誤操作。加上該子句后,當(dāng)對視圖上的數(shù)據(jù)進(jìn)行更新、插入或刪除時,DBMS會檢查視圖中定義的條件,若不滿足視圖定義中的謂詞條件(即子查詢中的條件表達(dá)式),則拒絕執(zhí)行。

③組成視圖的屬性列名或者全部省略或者全部指定,沒有第三種選擇。如果省略,表示該視圖由子查詢中SELECT子句目標(biāo)列的諸字段組成。④下列三種情況下,必須明確指定組成視圖的所有列名:

一是某個目標(biāo)列不是單存的屬性名,而是集函數(shù)或列表達(dá)式;二是多表連接時選出了幾個同名列作為視圖的字段;三是需要在視圖中為某個列啟用新的更合適的名字。行列子集視圖:若一個視圖是從單個基本表導(dǎo)出的,并且只是去掉了某些行和某些列,但保留了碼,我們稱這類視圖為行列子集視圖。Jsj_Studentinfo視圖就是一個行列子集視圖。可以在多個基本表上建立視圖。(2)視圖的刪除刪除視圖語句格式:

DROPVIEW<視圖名>;

視圖刪除后視圖的定義將從數(shù)據(jù)字典中刪除。但是,由該視圖導(dǎo)出的其他視圖的定義仍在數(shù)據(jù)字典中,不過已失效,也需要一一刪除。例2.71刪除上例建立的視圖"Jsj_Studentinfo"。DROPVIEWJsj_Studentinfo;例2.72刪除視圖Jsj_s1。

DROPVIEW

Jsj_s1;

注意視圖Jsj_s2已失效,應(yīng)同時刪除。2.5.5.3視圖的數(shù)據(jù)操作(1)查詢視圖當(dāng)視圖被定義之后,就可以象對基本表一樣對視圖進(jìn)行查詢了。(2)視圖消解數(shù)據(jù)庫管理系統(tǒng)執(zhí)行對視圖的查詢時,首先對視圖或基本表等進(jìn)行檢查是否存在,如果存在,就從數(shù)據(jù)字典中取出視圖的定義,然后把定義中的子查詢和用戶的查詢結(jié)合起來,轉(zhuǎn)換成等價的對基本表的查詢,然后在執(zhí)行修正后的查詢。這一轉(zhuǎn)換過程稱為視圖消解(ViewResolution)。(3)更新視圖更新視圖指通過視圖插入、刪除、修改數(shù)據(jù)。由于視圖是不實際存儲數(shù)據(jù)的虛表,因此對視圖的更新,最終是通過轉(zhuǎn)換為對基本表的更新進(jìn)行的。2.5.5.4視圖的作用視圖定義在基本表之上,對視圖的操作最終還是會轉(zhuǎn)換成對底層基本表的操作,但是我們之所以會引入視圖,因為合理使用視圖能夠帶來許多好處。(1)視圖能夠簡化用戶的操作(2)視圖使用戶能以多種角度看待同一數(shù)據(jù)(3)視圖對重構(gòu)數(shù)據(jù)庫提供了一定程度的邏輯獨立性(4)視圖能夠?qū)C(jī)密數(shù)據(jù)提供安全保護(hù)2.5.6數(shù)據(jù)控制

(1)授權(quán)

SQL通過GRANT語句向用戶授予操作權(quán)限,GRANT語句的格式為:

GRANT<權(quán)限>[,<權(quán)限>]…[ON<對象類型><對象名>]TO<用戶>[,<用戶>]…[WITHGRANTOPTION];

此授權(quán)語句將某作用在指定操作對象上的操作權(quán)限,授予指定的用戶。(2)收回權(quán)限

SQL通過REVOKE語句向用戶授予操作權(quán)限,REVOKE語句的格式為:

REVOKE<權(quán)限>[,<權(quán)限>]…[ON<對象類型><對象名>]

FROM<用戶>[,<用戶>]…;說明:權(quán)限由DBA或其他授權(quán)者收回,當(dāng)涉及多個用戶傳播權(quán)限時,收回上級用戶某權(quán)限的同時也收回所有下級的該權(quán)限。2.6關(guān)系規(guī)范化理論2.6.1問題的提出不合理的關(guān)系模式到底存在什么問題,下面舉一個實例討論一下:首先給出一個關(guān)系模式SCD(學(xué)號,姓名,系號,系主任,課程號,成績),具體問題描述如下:(1)一個系有若干名學(xué)生,但一名學(xué)生只屬于一個系;(2)一個系只有一名系主任(正職);(3)一名學(xué)生可以選修多門課程,每門課程有若干學(xué)生選修;(4)每名學(xué)生學(xué)習(xí)一門課程有一個成績。在對數(shù)據(jù)庫操作的時候,會出現(xiàn)以下問題:(1)插入異常(2)刪除異常(3)冗余太大由于該關(guān)系模式存在如上毛病,因此它是一個"不好"的關(guān)系模式。一個"好"的關(guān)系模式應(yīng)該不會產(chǎn)生插入異常和刪除異常、冗余度應(yīng)盡可能的小。該關(guān)系模式之所以會產(chǎn)生上述問題,是因為這個關(guān)系模式中的函數(shù)依賴存在某些不好的性質(zhì)。如果把它改造一下,分成三個關(guān)系模式:S(學(xué)號,姓名,年齡,性別,系號)學(xué)號為主鍵;C(系號,系主任)系號為主鍵;D(學(xué)號,課程號,成績)(學(xué)號,課程號)為主鍵。就不會產(chǎn)生上述問題。如何改造一個"不好"的關(guān)系模式,使之成為一個"好的",合理的關(guān)系模式,就是下面要討論的問題-關(guān)系規(guī)范化。2.6.2關(guān)系的規(guī)范化(1)函數(shù)依賴

定義2.5

設(shè)R(U)是屬性集U上的關(guān)系模式。X,Y是U的子集。若對于R(U)的任意一個可能的關(guān)系r,r中不可能存在兩個元組在X上的屬性值相等,而在Y上的屬性值不等,則稱X函數(shù)確定Y或Y函數(shù)依賴于X,記作:X?Y。

注意函數(shù)依賴不是指關(guān)系模式R的某個或某些關(guān)系滿足的約束條件,而是指R的

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論