《數(shù)據(jù)庫安全》第二章 關(guān)系數(shù)據(jù)庫基本原理與技術(shù)_第1頁
《數(shù)據(jù)庫安全》第二章 關(guān)系數(shù)據(jù)庫基本原理與技術(shù)_第2頁
《數(shù)據(jù)庫安全》第二章 關(guān)系數(shù)據(jù)庫基本原理與技術(shù)_第3頁
《數(shù)據(jù)庫安全》第二章 關(guān)系數(shù)據(jù)庫基本原理與技術(shù)_第4頁
《數(shù)據(jù)庫安全》第二章 關(guān)系數(shù)據(jù)庫基本原理與技術(shù)_第5頁
已閱讀5頁,還剩367頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 第 二 章關(guān)系數(shù)據(jù)庫基本原理與技術(shù)1本 章 概 要 2.1 關(guān)系數(shù)據(jù)庫2.2 關(guān)系數(shù)據(jù)庫標準語言SQL2.3 數(shù)據(jù)庫設(shè)計22.1 關(guān)系數(shù)據(jù)庫2.1.1 關(guān)系數(shù)據(jù)結(jié)構(gòu) 關(guān)系模型建立在集合代數(shù)的基礎(chǔ)上。關(guān)系數(shù)據(jù)結(jié)構(gòu)的基本概念關(guān)系的基本概念關(guān)系模式關(guān)系數(shù)據(jù)庫一、關(guān)系的基本概念 域 笛卡爾積 關(guān)系32. 笛卡爾積1)笛卡爾積的定義 給定一組域 D1,D2,Dn。 D1,D2,Dn的笛卡爾積為: D1D2Dn=(d1,d2,dn)| diDi,i=1,2,n 。41 域域是具有相同數(shù)據(jù)類型的值的集合。 例:整數(shù)、 0,1 、男,女、26個字母。 域用D表示域中所包含的值的個數(shù)稱為域的基數(shù)。 (用m表示

2、)。關(guān)系中用域表示屬性的取值范圍。例如:D1=張力,李巖,王平 m1=3(基數(shù))D2=男,女 m2=2D3=18,19,20 m3=3其中,D1,D2,D3為域名,分別表示學生關(guān)系中姓名、性別、年齡的集合。5例: D1 =張力,李巖,王平 姓名 D2 =安陽,北京,上海 籍貫 D3 =18, 19, 20 年齡 則 D1D2D3=(張力,安陽,18),(張力,安陽,19),(王平,上海,20)共計27個元素,則由27個元組組成。所有域的所有取值的一個組合不能重復6 2) 元組笛卡爾積中每一個元素(d1,d2,dn)叫作一個元組。 3) 分量笛卡爾積元素(d1,d2,dn)中的每一個值di叫作一

3、個分量。來自相應的域(diDi)元組的每個分量(di)是按序排列的。 如:(1,2,3)(2,3,1)7 4) 基數(shù) 若Di(i1,2,n)為有限集,其基數(shù) 為mi(i1,2,n), 則 D1D2Dn的基數(shù)M為: 笛卡爾積的基數(shù)是所有域的基數(shù)的累乘之積在上例中,基數(shù):33327即 D1D2D3共有33327個元組85)笛卡爾積的表示方法 笛卡爾積可表示為一個二維表。表中的每行 對應一個元組,表中的每列對應一個域。 在上例中,27個元組可列成一張二維表 表2.1 D1,D2,D3 的笛卡爾積姓名 籍貫年齡張力 張力張力張力張力安陽安陽安陽北京北京181920181993. 關(guān)系1) 關(guān)系D1D2

4、Dn的子集叫作在域D1,D2,Dn上的關(guān)系,表示為 R(D1,D2,Dn) R:關(guān)系名 n:關(guān)系的目或度當n=1時,稱為單元關(guān)系。當n=2時,稱為二元關(guān)系。當n=n時,稱為n元關(guān)系。注意:關(guān)系是笛卡爾積的有限子集。數(shù)學上關(guān)系是笛卡爾積的任意子集,但在實際應用中關(guān)系是笛卡爾積中所取的有意義的子集。10姓名 籍貫年齡張力李巖王平 安陽北京上海 181920 如果張力是安陽人年齡18,李巖是北京人年齡19,王平是上海人年齡20,則只有下面這個關(guān)系有意義的。 表2.2 關(guān)系的表示112) 元組關(guān)系中的每個元素是關(guān)系中的元組,通常用t表示。3) 屬性關(guān)系中不同列可以對應相同的域,為了加以區(qū)分,必須對每列

5、起一個名字,稱為屬性(Attribute)。n目關(guān)系必有n個屬性。12 4)碼候選碼若關(guān)系中的某一屬性組的值能唯一地標識一個元組,則稱該屬性組為候選碼。在最簡單的情況下,候選碼只包含一個屬性。例: 學生(學號,姓名,年齡,宿舍,專業(yè)) 候選碼 候選碼(假設(shè)沒有重名)13全碼在最極端的情況下,關(guān)系模式的所有屬性組是這個關(guān)系模式的候選碼,稱為全碼(All-key)。下面是一個全碼的例子:假設(shè)有教師授課關(guān)系TCS,分別有三個屬性 TCS(教師,課程,學生) 全碼三個屬性的組合是關(guān)系TCS的候選碼,稱為全碼。14主碼如果一個關(guān)系中有多個候選鍵,則從中選定一個為主碼。主碼又稱主關(guān)系鍵(Primary K

6、ey),或簡稱為主鍵、關(guān)系鍵、關(guān)鍵字。例:假設(shè)在學生關(guān)系中沒有重名的學生,則“學號”和“姓名”都可作為學生關(guān)系的候選鍵。如果選定“學號”作為數(shù)據(jù)操作的依據(jù),則“學號”為主關(guān)系鍵。15主關(guān)系鍵是關(guān)系模型中的一個重要概念。每個關(guān)系必需選擇一個主關(guān)系鍵,選定以后,不能隨意改變。每個關(guān)系必定有且僅有一個主關(guān)系鍵,因為關(guān)系的元組無重復。通常用較小的屬性組合作為主關(guān)系鍵。主屬性與非碼屬性主屬性:包含在候選碼中的的各屬性稱為主屬性。非碼屬性:不包含在任何候選碼中的屬性稱為非碼屬性。主屬性和非主屬性相排斥、互補。16外碼 外碼:引用其它關(guān)系的鍵或本關(guān)系的鍵稱外鍵。如果一個關(guān)系的屬性或?qū)傩越M并非該關(guān)系的關(guān)鍵字,

7、但它們是另外的一個關(guān)系關(guān)鍵字,則稱其為該關(guān)系的外碼。17例: 學生(學號,姓名,年齡,宿舍,專業(yè)) 主碼 候選碼(假設(shè)沒有重名)課程(課程號,課程名,學分) 主碼選修(學號,課程號,成績) 外碼 外碼課程1(課程號,課程名,學分,開課時間, 主碼 先修課程號) 外碼18關(guān)系的類型:基本表、查詢視圖關(guān)系是滿足特定規(guī)范性要求的二維表格在關(guān)系模型中關(guān)系具有如下特性: 1.關(guān)系中不允許出現(xiàn)相同的元組。但許多關(guān)系數(shù)據(jù)庫產(chǎn)品沒有遵循這一性質(zhì)。 例如:Oracle,F(xiàn)oxPro等都允許關(guān)系表中存在兩個完全相同的元組,除非用戶特別定義了相應的約束條件。二、 關(guān)系的類型和性質(zhì) 192. 關(guān)系中元組的順序(即行序

8、)是無關(guān)緊要的,在一個關(guān)系中可以任意交換兩行的次序。可以改變元組的順序使其具有某種排序,然后按照順序查詢數(shù)據(jù),可以提高查詢速度。203. 關(guān)系中屬性的順序是無關(guān)緊要的,即列 的順序可以任意交換。交換時,應連同屬性名一起交換,否則 將得到不同的關(guān)系。4. 同一屬性名下的各個屬性值必須來自同一個域,是同一類型的數(shù)據(jù)。215. 關(guān)系中各個屬性必須有不同的名字,不同的屬性可來自同一個域,即它們的分量可取自同一個域。例:有如下表中關(guān)系,職業(yè)與兼職是兩個不同的屬性,但它們?nèi)∽酝粋€域。職業(yè)教師,工人,輔導員。 姓名職業(yè)兼職張強教師輔導員王麗工人教師劉寧教師輔導員226. 關(guān)系中每一分量必須是不可分的數(shù)據(jù)項

9、。所有屬性值都是原子的,即是一個確 定的值,而不是值的集合。 屬性值可以為空值,表示“未知”或“不可使用”。滿足此條件的關(guān)系稱為規(guī)范化關(guān)系,否則稱為非規(guī)范化關(guān)系。 23例:籍貫含有省、市兩項,出現(xiàn)了“表中有表”的現(xiàn)象,則為非規(guī)范化關(guān)系,而把籍貫分成省、市兩列,則將其規(guī)范化。 姓名籍貫姓名省市省市張強吉林長春張強吉林長春王麗山西大同王麗山西大同24三、關(guān)系模式 關(guān)系模式是對關(guān)系的描述關(guān)系模式可以形式化地表示為: R(U,D,dom,F(xiàn)) R 關(guān)系名U 組成該關(guān)系的屬性名集合D 屬性組U中屬性所來自的域dom 屬性向域的映象集合F 屬性間的數(shù)據(jù)依賴關(guān)系集合25例:“學生”的關(guān)系, U=學號,姓名,

10、成績 設(shè) S1=01001,01002,.,01999 , S2=張三,李四,.,王五, S3=0,1,.,100, 則 D = S1 S2 S3 DOM(學號)= S1 DOM(姓名)= S2 DOM(成績)= S3 26關(guān)系模式通??梢院営洖?R (U) 或 R (A1,A2,An) R 關(guān)系名A1,A2,An 屬性名注:域名及屬性向域的映象常常直接說明為 屬性的類型、長度27四. 關(guān)系數(shù)據(jù)庫在一個給定的應用領(lǐng)域中,所有實體及實體之間聯(lián)系的關(guān)系的集合構(gòu)成一個關(guān)系數(shù)據(jù)庫。一個數(shù)據(jù)庫可以包含多個基本表。關(guān)系數(shù)據(jù)庫也有型和值之分關(guān)系數(shù)據(jù)庫的型稱為關(guān)系數(shù)據(jù)庫模式,是對關(guān)系數(shù)據(jù)庫的描述若干域的定義在

11、這些域上定義的若干關(guān)系模式關(guān)系數(shù)據(jù)庫的值是這些關(guān)系模式在某一時刻對應的關(guān)系的集合,通常簡稱為關(guān)系數(shù)據(jù)庫282.1.2 關(guān)系的完整性關(guān)系模型的完整性規(guī)則是對關(guān)系的某種約束條件。關(guān)系模型中三類完整性約束:實體完整性參照完整性用戶定義的完整性實體完整性和參照完整性是關(guān)系模型必須滿足的完整性約束條件,被稱作是關(guān)系的兩個不變性,應該由關(guān)系系統(tǒng)自動支持。29關(guān)系數(shù)據(jù)模型用關(guān)系描述事物之間的聯(lián)系,且這種聯(lián)系都隱含在它們的公共屬性中,尤其是外鍵。因此關(guān)系模型不能顯示的表示這種實物之間的聯(lián)系,這是一個缺點。30學號姓名性別班級001張三豐男計1002小昭女計1003滅絕女計1007邦得男計1008周星星男計1課

12、號課名學分k001武功6k002英語4k003語文2k004數(shù)據(jù)庫4學號課號成績001k00190002k00168003k00180007k00170008k0017531實體完整性:若屬性A是基本關(guān)系R的主屬性,則A不能取空值(空值代表不確定或不知道)。 一個基本關(guān)系對應現(xiàn)實世界的一個實體集。現(xiàn)實世界中的實體是相互區(qū)分的,即具有唯一標識。主屬性取空值,就說明存在某個不可標識的實體,即存在不可區(qū)分的實體,所以叫實體完整性。例:選修(學號,課程號,成績)“學號、課程號”為主碼,則兩個屬性都不能取空值。32參照完整性:在關(guān)系模型中實體及實體間的聯(lián)系都是用關(guān)系來描述的,因此可能存在著關(guān)系與關(guān)系間的

13、引用。 例:學生實體、專業(yè)實體以及專業(yè)與學生 間的一對多聯(lián)系。學生(學號,姓名,性別,專業(yè)號,年齡)專業(yè)(專業(yè)號,專業(yè)名)33參照完整性:若屬性F是關(guān)系R的外碼,它與基本關(guān)系S的主碼KS相對應,則對于R中的每一個元組在F上的值必為:或者取空值(F的每個屬性值均為空值)或者等于S中某個元組的主碼值。例: 關(guān)系 R: 學生(學號,姓名,性別,專業(yè)號, 年齡) F 關(guān)系 S: 專業(yè)(專業(yè)號,專業(yè)名) KS34學生(學號,姓名,性別,專業(yè)號,年齡)專業(yè)(專業(yè)號,專業(yè)名)35學生關(guān)系中每個元組的“專業(yè)號”屬性只取下面兩類值:(1)空值,表示尚未給該學生分配專業(yè)(2)非空值,這時該值必須是專業(yè)關(guān)系中某個元

14、組的“專業(yè)號”值,表示該學生不可能分配到一個不存在的專業(yè)中36用戶定義的完整性是針對某一具體關(guān)系數(shù)據(jù)庫的約束條件,反映某一具體應用所涉及的數(shù)據(jù)必須滿足的語義要求。關(guān)系模型應提供定義和檢驗這類完整性的機制,以便用統(tǒng)一的系統(tǒng)的方法處理它們,而不要由應用程序承擔這一功能。37例: 課程(課程號,課程名,學分)“課程名”屬性必須取唯一值非主屬性“課程名”也不能取空值“學分”屬性只能取值1,2,3,4382.1.3 關(guān)系代數(shù)概述傳統(tǒng)的集合運算 專門的關(guān)系運算39一、概述1. 關(guān)系代數(shù)2. 關(guān)系代數(shù)運算的三個要素3. 關(guān)系代數(shù)運算的分類4. 表示記號1.關(guān)系代數(shù)一種抽象的查詢語言用對關(guān)系的運算來表達查詢2

15、關(guān)系代數(shù)運算的三個要素運算對象:關(guān)系運算結(jié)果:關(guān)系運算符:四類40四類運算符有:集合運算符(并),-(差),(交),(廣義笛卡爾積)。將關(guān)系看成元組的集合運算是從關(guān)系的“水平”方向即行的角度來進行專門的關(guān)系運算符(選擇),(投影),(連接), (除);不僅涉及行而且涉及列41算術(shù)比較符輔助專門的關(guān)系運算符進行操作邏輯運算符輔助專門的關(guān)系運算符進行操作423關(guān)系代數(shù)運算的分類傳統(tǒng)的集合運算:把關(guān)系看成元組的集合,以元組作為集合中元素來進行運算,其運算是從關(guān)系的“水平”方向即行的角度進行的。傳統(tǒng)的集合運算:并、差、交、笛卡爾積專門的關(guān)系運算:不僅涉及行運算,也涉及列運算,這種運算是為數(shù)據(jù)庫的應用而

16、引進的特殊運算。專門的關(guān)系運算:選擇、投影、連接、除434表示記號 (1) R,tR,tAi 設(shè)關(guān)系模式為R(A1,A2,An) 它的一個關(guān)系設(shè)為R。tR表示t是R的一個元組 tAi則表示元組t中相應于屬性Ai的一個分量 44(2) A,tA, A 若A=Ai1,Ai2,Aik,其中Ai1,Ai2,Aik是A1,A2,An中的一部分,則A稱為屬性列或域列。tA=(tAi1,tAi2,tAik)表示元組t在屬性列A上諸分量的集合。A則表示A1,A2,An中去掉Ai1,Ai2,Aik后剩余的屬性組。 45(3) tr ts R為n目關(guān)系,S為m目關(guān)系。tr R,tsS, tr ts稱為元組的連接。

17、它是一個n + m列的元組,前n個分量為R中的一個n元組,后m個分量為S中的一個m元組。 46二、傳統(tǒng)的集合運算并差交笛卡爾積471. 并 R和S具有相同的目n(即兩個關(guān)系都有n個屬性)相應的屬性取自同一個域RS 仍為n目關(guān)系,由屬于R或?qū)儆赟的元組組成 RS = t|t Rt S 48并運算實例ABCa1b1c1a1b2c2a2b2c1ABCa1b1c1a1b2c2a1b3c2a2b2c1ABCa1b2c2a1b3c2a2b2c1RSRS492. 差R和S具有相同的目n相應的屬性取自同一個域R - S 具有相同的目n,由屬于R而不屬于S的所有元組組成 R -S = t|tRtS 50差運算實

18、例ABCa1b1c1a1b2c2a2b2c1ABCa1b1c1ABCa1b2c2a1b3c2a2b2c1RSR-S 51 3. 交R 和S具有相同的目n相應的屬性取自同一個域R S仍為n目關(guān)系,由既屬于R又屬于S的元組組成 R S = t|t Rt S 52交運算實例ABCa1b1c1a1b2c2a2b2c1ABCa1b2c2a2b2c1ABCa1b2c2a1b3c2a2b2c1RSR S 534. 廣義笛卡爾積Rn目關(guān)系,k1個元組Sm目關(guān)系,k2個元組RS 列:(n+m)列的元組的集合元組的前n列是關(guān)系R的一個元組后m列是關(guān)系S的一個元組行:k1k2個元組RS = tr ts |tr R

19、tsS 54廣義笛卡爾積運算實例ABCa1b1c1a1b2c2a2b2c1ABCa1b1c1a1b1c1a1b1c1a1b2c2a1b2c2a1b2c2a2b2c1a2b2c1a2b2c1ABCa1b2c2a1b3c2a2b2c1RSR S ABCa1b2c2a1b3c2a2b2c1a1b2c2a1b3c2a2b2c1a1b2c2a1b3c2a2b2c155三、專門的關(guān)系運算選擇投影連接除561. 選擇 (1)選擇又稱為限制 (2)選擇運算符的含義 是單目運算,即只對一個關(guān)系施加操作在關(guān)系R中選擇滿足給定條件的諸元組的集合語法格式: () F(R) = t|tRF(t)= 真F:選擇條件,是一

20、個邏輯表達式 57(3)選擇運算是從行的角度進行的運算 (4)舉例設(shè)有一個學生-課程數(shù)據(jù)庫,包括學生關(guān)系Student、課程關(guān)系Course和選修關(guān)系SC。58 例1 查詢信息系(IS系)全體學生 Sdept = IS (Student)或 5 =IS (Student) 學 號Sno姓 名Sname性 別Ssex年 齡Sage所 在 系Sdept95001李勇男20CS95002劉晨女19IS95003王敏女18MA95004張立男19IS Student例2例3例1例459Course課程號課程名先行課學分CnoCnameCpnoCcredit1數(shù)據(jù)庫542數(shù)學23信息系統(tǒng)144操作系統(tǒng)6

21、35數(shù)據(jù)結(jié)構(gòu)746數(shù)據(jù)處理27PASCAL語言6460SC學 號課 程 號成 績SnoCnoGrade9500119295001285950013889500229095002380例961例1 查詢信息系(IS系)全體學生 Sdept = IS (Student)或 5 =IS (Student)結(jié)果: StudentSnoSnameSsexSageSdept95002劉晨女19IS95004張立男19IS62例2 查詢年齡小于20歲的學生 Sage 20(Student) 或 4 20(Student)SnoSnameSsexSageSdept95002劉晨女19IS95003王敏女18M

22、A95004張立男19IS結(jié)果: Student632. 投影1)投影運算符的含義從R 中選擇出若干屬性列組成新的關(guān)系 A(R) = tA | t R A:R 中的屬性列642)投影操作主要是從列的角度進行運算但投影之后不僅取消了原關(guān)系中的某些列,而且還可能取消某些元組(避免重復行)653) 舉例例3 查詢學生的姓名和所在系即求Student關(guān)系上學生姓名和所在系兩個屬性上的投影 Sname,Sdept(Student)或 2,5(Student)66Student投影結(jié)果:SnameSdept李勇CS劉晨IS王敏MA張立IS67例4 查詢學生關(guān)系Student中都有哪些系 Sdept(Stu

23、dent) Student投影結(jié)果:SdeptCSISMA683. 連接1)連接也稱為連接2)連接運算的含義從兩個關(guān)系的笛卡爾積中選取屬性間滿足一定條件的元組 R S = | tr Rts StrAtsB A和B:分別為R和S上度數(shù)相等且可比的屬性組:比較運算符連接運算從R和S的廣義笛卡爾積RS中選?。≧關(guān)系)在A屬性組上的值與(S關(guān)系)在B屬性組上值滿足比較關(guān)系的元組。 ABtr ts69 3)兩類常用連接運算等值連接什么是等值連接為“”的連接運算稱為等值連接 等值連接的含義從關(guān)系R與S的廣義笛卡爾積中選取A、B屬性值相等的那些元組,即等值連接為: R S = | tr Rts StrA =

24、 tsB A=Btr ts70自然連接什么是自然連接自然連接是一種特殊的等值連接兩個關(guān)系中進行比較的分量必須是相同的屬性組在結(jié)果中把重復的屬性列去掉自然連接的含義R和S具有相同的屬性組B R S = | tr Rts StrB = tsB tr ts71 4)一般的連接操作是從行的角度進行運算。 自然連接還需要取消重復列,所以是同時從行和列的角度進行運算。 ABRS725)連接舉例 ABCa1b15a1b26a2b38a2b412BEb13b27b310b32b52RS例5例6例773 R S AR.BCS.BEa1b15b27a1b15b310a1b26b27a1b26b310a2b38b3

25、10 CE例574 等值連接 R S R.B=S.B AR.BCS.BEa1b15b13a1b26b27a2b38b310a2b38b32例675 自然連接 R S ABCEa1b153a1b267a2b3810a2b382例776 4. 除1)除的定義給定關(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上投影的集合。 RS = tr X | tr RY (S) Yx Yx:x在R中的象集,x =

26、trX772)象集Y 給定一個關(guān)系R(X,Y),X和Y為屬性組。當tX=x時,x在R中的象集為: Yx=tY| t R,tX=x 它表示R中屬性組X上值為x的諸元組在Y上分量的集合。 783)例7除法舉例ABCa1b1c2a2b3c7a3b4c6a1b2c3a4b6c6a2b2c3a1b2c1BCDb1c2d1b2c1d1b2c3d2RSAa1RS79分析:ABCa1b1c2a2b3c7a3b4c6a1b2c3a4b6c6a2b2c3a1b2c1R例7中x=tX在R中的象集Yx:關(guān)系R的屬性組X為A,A可以取四個值 a1, a2, a3,a4 。其中:a1的象集為(b1,c2), b2,c3)

27、, b2,c1) a2的象集為(b3,c7), (b2,c3) a3的象集為(b4,c6) a4的象集為(b6,c6) 80關(guān)系S在(B,C)上的投影為(b1,c2), b2,c3), b2,c1) 只有a1的象集(B,C) a1包含 (B,C)屬性組上的投影,所以RS=a1.關(guān)系R的屬性A中,a1的象集為(b1,c2), b2,c3), b2,c1) a2的象集為(b3,c7), (b2,c3) a3的象集為(b4,c6) a4的象集為(b6,c6) BCDb1c2d1b2c1d1b2c3d2S81 例7除法舉例ABCa1b1c2a2b3c7a3b4c6a1b2c3a4b6c6a2b2c3a

28、1b2c1BCDb1c2d1b2c1d1b2c3d2RSAa1RSRS = tr X | tr RY (S) Yx Yx:x在R中的象集,x = trX824)除操作是同時從行和列角度進行運算RS835 綜合舉例例8 查詢選修了2號課程的學生的學號。 Sno(Cno=2(SC) 95001,95002SC學 號課 程 號成 績SnoCnoGrade950011929500128595001388950022909500238084例9 查詢至少選修了一門其直接先行課為5號 課程的學生姓名。 Sname(Cpno=5(Course SC Student)或 Sname(Cpno=5(Course

29、) SC Sno,Sname(Student) 85小結(jié) 關(guān)系代數(shù)運算關(guān)系代數(shù)運算并、差、交、笛卡爾積、投影、選擇、連接、除基本運算并、差、笛卡爾積、投影、選擇交、連接、除可以用5種基本運算來表達 引進它們并不增加語言的能力,但可以簡化表達862.2 關(guān)系數(shù)據(jù)庫標準語言SQLSQL概述數(shù)據(jù)定義查詢數(shù)據(jù)更新視圖數(shù)據(jù)控制嵌入式SQL872.2.1 SQL概述SQL(Structured Query Language 結(jié)構(gòu)化查詢語言)。從1974年提出到至今已SQL成為國際標準。廣泛應用于各種數(shù)據(jù)庫中。SQL是一種介于關(guān)系代數(shù)和關(guān)系演算之間的結(jié)構(gòu)化查詢語言,但其功能并非僅是查詢。SQL是一個通用的功

30、能極強的RDB語言。88一、SQL的特點1. 綜合統(tǒng)一SQL集DDL、DML、DCL功能于一體。SQL數(shù)據(jù)操作符的統(tǒng)一。(查詢、插入、刪除、修改都只有一種操作符。)2. 高度非過程化SQL語言是一種非過程語言,即用戶只要提出“干什么”即可,不必管具體操作過程,也不必了解數(shù)據(jù)的存取路徑,只要指明所需的數(shù)據(jù)即可。893. 面向集合的操作方式SQL語言是一種面向集合的語言,每個命令的操作對象是一個或多個關(guān)系,結(jié)果也是一個關(guān)系。4. SQL語言既是自含式語言,又是嵌入式語言。可獨立使用,也可嵌入到宿主語言中。自含式語言可以獨立使用交互命令。嵌入式語言使其嵌入在高級語言中使用,供應用程序員開發(fā)應用程序。

31、5. 語言簡潔,易學易用SQL設(shè)計巧妙,核心功能只需9個動詞。在語言上接近英語。90二、SQL語言功能概述SQL功能命令動詞數(shù)據(jù)查詢SELECT數(shù)據(jù)定義CREATE、DROP、ALTER數(shù)據(jù)操縱 INSERT、UPDATE、DELETE數(shù)據(jù)控制GRANT、REVOKE四部分:數(shù)據(jù)定義功能、數(shù)據(jù)控制功能、 數(shù)據(jù)查詢功能、數(shù)據(jù)操縱功能。 91三、 SQL的數(shù)據(jù)類型數(shù)值型 字符串型日期時間型92 SQL 視圖1 視圖2 外模式基本表1 基本表2 基本表3 模式 存儲文件1 存儲文件2 內(nèi)模式四、 SQL支持RDB的三級模式結(jié)構(gòu)932.2.2 數(shù) 據(jù) 定 義 94 一、定義、刪除和更改基本表1 定義基

32、本表CREATE TABLE ( , , );:所要定義的基本表的名字:組成該表的各個屬性(列):涉及相應屬性列的完整性約束條件:涉及一個或多個屬性列的完整性約束條件 95例1 建立一個“學生”表Student,它由學號Sno、姓名Sname、性別Ssex、年齡Sage、所在系Sdept五個屬性組成。其中學號不能為空并設(shè)為主鍵,姓名取值也唯一。 CREATE TABLE Student (Sno CHAR(5) NOT NULL PRIMARY KEY , Sname CHAR(20) UNIQUE,/列級完整性約束 Ssex CHAR(2) DEFAULT 男 , Sage INT CHEC

33、K (Sage = 15 AND Sage =45) , Sdept CHAR(15); 96例2 建立一個“學生選課”表SC,它由學號Sno、課程號Cno,修課成績Grade組成,其中(Sno, Cno)為主碼。CREATE TABLE SC( Sno CHAR(5) , Cno CHAR(3) , Grade int, Primary key (Sno, Cno); /表級完整性約束 FOREIGN KEY ( Sno ) REFERENCES Student ( Sno ), FOREIGN KEY ( Cno ) REFERENCES Course ( Cno ) ); 97常用完整性

34、約束主碼約束: PRIMARY KEY唯一性約束:UNIQUE非空值約束:NOT NULL參照完整性約束執(zhí)行該語句后,便產(chǎn)生了學生基本表的表框架,此表為一個空表。如果完整性約束條件涉及到該表的多個屬性列,則必須定義在表級上,否則既可以定義在列級也可以定義在表級。982、刪除基本表 DROP TABLE ; 基本表刪除 數(shù)據(jù)、表上的索引都刪除 表上的視圖往往仍然保留, 但無法引用刪除基本表時,系統(tǒng)會從數(shù)據(jù)字典中刪去有關(guān)該基本表及其索引的描述 例3 刪除Student表 DROP TABLEStudent ;993、修改基本表ALTER TABLE語句可以對表添加列、刪除列、修改列的定義、定義主碼

35、、外碼,也可以添加和刪除約束。 ALTER TABLE ADD 完整性約束 DROP MODIFY ;:要修改的基本表ADD子句:增加新列和新的完整性約束條件DROP子句:刪除指定的完整性約束條件MODIFY子句:用于修改列名和數(shù)據(jù)類型100 例4向Student表增加“入學時間”列,其數(shù) 據(jù)類型為日期型。 ALTER TABLE Student ADD Scome DATE;不論基本表中原來是否已有數(shù)據(jù),新增加的列一律為空值。101刪除屬性列間接刪除/直接把表中要保留的列及其內(nèi)容復制到一個新表中刪除原表再將新表重命名為原表名例5:直接刪除屬性列:(新) ALTER TABLE Student

36、 Drop Scome;102 例6 將年齡的數(shù)據(jù)類型改為半字長整數(shù)。 ALTER TABLE Student MODIFY Sage SMALLINT;注:修改原有的列定義有可能會破壞已有數(shù)據(jù) 例7 刪除學生姓名必須取唯一值的約束。ALTER TABLE Student DROP UNIQUE(Sname); 103二、建立與刪除索引 建立索引是加快查詢速度的有效手段建立索引DBA或表的屬主(即建立表的人)根據(jù)需要建立有些DBMS自動建立以下列上的索引 PRIMARY KEY UNIQUE維護索引 DBMS自動完成使用索引 DBMS自動選擇是否使用索引以及使用哪些 索引104 1、建立索引

37、例8 為學生-課程數(shù)據(jù)庫中的Student,Course表建立索引。其中Student表按學號升序建唯一索引,Course表按課程號升序建唯一索引。CREATE UNIQUE INDEX Stusno ON Student(Sno);CREATE UNIQUE INDEX Coucno ON Course(Cno);1052、刪除索引 DROP INDEX ;刪除索引時,系統(tǒng)會從數(shù)據(jù)字典中刪去有關(guān)該索引的描述。例9 刪除Student表的Stusno索引。DROP INDEX Stusno ;106簡單的SQL查詢與關(guān)系代數(shù)的聯(lián)系:-SELECT A1,A2,An FROM T1,T2,.,T

38、k WHERE F;相當于: A1,A2,An F(T1T2 Tk)-其中F是連接條件,與后面的廣義笛卡兒集構(gòu)成連接。2.2.3 查 詢 107一、概述 語句格式SELECT ALL|DISTINCT , FROM , WHERE GROUP BY HAVING ORDER BY ASC|DESC ;108SELECT子句:指定要顯示的屬性列FROM子句:指定查詢對象(基本表或視圖)WHERE子句:指定查詢條件 GROUP BY子句:對查詢結(jié)果按指定列的值分組,該屬性列值相等的元組為一個組。通常會在每組中作用集函數(shù)。HAVING短語:篩選出只有滿足指定條件的組ORDER BY子句:對查詢結(jié)果表

39、按指定列值的升序或降序排序 109示例數(shù)據(jù)庫 學生-課程數(shù)據(jù)庫學生表:Student(Sno,Sname,Ssex,Sage,Sdept)課程表:Course(Cno,Cname,Cpno,Ccredit) 學生選課表:SC(Sno,Cno,Grade) 110二、 單表查詢 查詢僅涉及一個表,是一種最簡單的查詢操作1、選擇表中的若干列2、選擇表中的若干元組3、對查詢結(jié)果排序4、使用集函數(shù)5、對查詢結(jié)果分組 111 1、選擇表中的若干列(1)查詢指定列例1 查詢?nèi)w學生的學號與姓名。SELECT Sno,SnameFROM Student;112 (2)查詢?nèi)苛欣? 查詢?nèi)w學生的詳細記錄。

40、SELECT Sno,Sname,Ssex,Sage, Sdept FROM Student; 或SELECT *FROM Student; 113 (3)查詢經(jīng)過計算的值 SELECT子句的為表達式算術(shù)表達式字符串常量函數(shù)列別名 114例3 查詢?nèi)w學生的姓名、出生年份和所有 系,要求用小寫字母表示所有系名。SELECT Sname,Year of Birth: , 2009-Sage,ISLOWER(Sdept)FROM Student; 115輸出結(jié)果: Sname Year of Birth: 2009-Sage ISLOWER(Sdept) - - - - 李勇 Year of Bi

41、rth: 1986 cs 劉晨 Year of Birth: 1987 is 王名 Year of Birth: 1988 ma 張立 Year of Birth: 1987 is 1162、選擇表中的若干元組(1)消除取值重復的行在SELECT子句中使用DISTINCT短語 假設(shè)SC表中有下列數(shù)據(jù) Sno Cno Grade - - - 95001 1 92 95001 2 85 95001 3 88 95002 2 90 95002 3 80117 例4 查詢選修了課程的學生學號。(1) SELECT Sno FROM SC;或 SELECT ALL Sno FROM SC;結(jié)果: Sno

42、 - 95001 95001 95001 95002 95002 (2) SELECT DISTINCT Sno FROM SC;結(jié)果: Sno - 95001 95002 118 比較大小在WHERE子句的中使用比較運算符=,=,=,!= 或 邏輯運算符NOT + 比較運算符(2)查詢滿足條件的元組119 例5 查詢所有年齡在20歲以下的學生姓名及其 年齡。 SELECT Sname,Sage FROM Student WHERE Sage 20; 120 確定范圍使用謂詞 BETWEEN AND NOT BETWEEN AND 例6 查詢年齡在2023歲(包括20歲和23歲) 之間的學生的

43、姓名、系別和年齡。 SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23;121 確定集合使用謂詞 IN , NOT IN :用逗號分隔的一組取值例7查詢信息系(IS)、數(shù)學系(MA)和計 算機科學系(CS)學生的姓名和性別。SELECT Sname,SsexFROM StudentWHERE Sdept IN ( IS,MA,CS );122 字符串匹配 (模糊查詢)% (百分號) 代表任意長度(長度可以為0)的字符串例:a%b表示以a開頭,以b結(jié)尾的任意長度的字符串。如acb,addgb,ab 等都滿足該匹配串_

44、 (下橫線) 代表任意單個字符例:a_b表示以a開頭,以b結(jié)尾的長度為3的任意字符串。如acb,afb等都滿足該匹配串123例8 查詢所有姓劉學生的姓名、學號和性別。 SELECT Sname,Sno,Ssex FROM Student WHERE Sname LIKE 劉%;例9 查詢姓“歐陽”且全名為三個漢字的學 生的姓名。 SELECT Sname FROM Student WHERE Sname LIKE 歐陽- -;124 涉及空值的查詢 使用謂詞 IS NULL 或 IS NOT NULL “IS NULL” 不能用 “= NULL” 代替 例10 某些學生選修課程后沒有參加考試,

45、所以有選課記錄,但沒有考試成績。查詢?nèi)鄙俪煽兊膶W生的學號和相應的課程號。 SELECT Sno,Cno FROM SC WHERE Grade IS NULL;1253、對查詢結(jié)果排序 使用ORDER BY子句 可以按一個或多個屬性列排序 升序:ASC;降序:DESC;缺省值為升序當排序列含空值時ASC:排序列為空值的元組最后顯示DESC:排序列為空值的元組最先顯示 126例11 查詢選修了3號課程的學生的學號及其 成績,查詢結(jié)果按分數(shù)降序排列。 SELECT Sno,Grade FROM SC WHERE Cno= 3 ORDER BY Grade DESC; 127查詢結(jié)果 Sno Gra

46、de - - 95020 95024 95007 92 95003 82 95010 82 95009 75 95014 61 95002 551284、使用集函數(shù) 5類主要集函數(shù)計數(shù)COUNT(DISTINCT|ALL *)COUNT(DISTINCT|ALL )計算總和SUM(DISTINCT|ALL ) 計算平均值A(chǔ)VG(DISTINCT|ALL )129求最大值MAX(DISTINCT|ALL )求最小值MIN(DISTINCT|ALL )DISTINCT短語:在計算時要取消指定列中的重復值A(chǔ)LL短語:不取消重復值A(chǔ)LL為缺省值130 例12 查詢學生總?cè)藬?shù)。 SELECT COUNT

47、(*)/空值也統(tǒng)計,只有這個函數(shù)這樣 FROM Student;例13 查詢選修了課程的學生人數(shù)。 SELECT COUNT( DISTINCT Sno) FROM SC;注:用DISTINCT以避免重復計算學生人數(shù)1315、對查詢結(jié)果分組 使用GROUP BY子句分組 細化集函數(shù)的作用對象 未對查詢結(jié)果分組,集函數(shù)將作用于整個查詢結(jié)果 對查詢結(jié)果分組后,集函數(shù)將分別作用于每個組 132例14 求各個課程號及相應的選課人數(shù)。 SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno ; 結(jié)果: Cno COUNT (Sno) 1 22 2 34 3 44 4 33

48、5 48133GROUP BY子句的作用對象是查詢的中間結(jié)果表分組方法:按指定的一列或多列值分組,值相等的為一組使用GROUP BY子句后,SELECT子句的列名列表中只能出現(xiàn)分組屬性和集函數(shù) 134使用HAVING短語篩選最終輸出結(jié)果例15 查詢有3門以上課程是90分以上的學生 的學號及(90分以上的)課程數(shù)。 SELECT Sno, COUNT(*) FROM SC WHERE Grade=90 GROUP BY Sno HAVING COUNT(*)=3; 135只有滿足HAVING短語指定條件的組才輸出HAVING短語與WHERE子句的區(qū)別:作用對象不同WHERE子句作用于基表或視圖,

49、從中選擇滿足條件的元組。HAVING短語作用于組,從中選擇滿足條件的組。 136二、連接查詢 同時涉及多個表的查詢稱為連接查詢用來連接兩個表的條件稱為連接條件或連接謂詞 一般格式:. . 比較運算符:=、=、=、!=. BETWEEN . AND .137連接操作的執(zhí)行過程嵌套循環(huán)法首先在表1中找到第一個元組,然后從頭開始掃描表2,逐一查找滿足連接件的元組,找到后就將表1中的第一個元組與該元組拼接起來,形成結(jié)果表中一個元組。表2全部查找完后,再找表1中第二個元組,然后再從頭開始掃描表2,逐一查找滿足連接條件的元組,找到后就將表1中的第二個元組與該元組拼接起來,形成結(jié)果表中一個元組。重復上述操作

50、,直到表1中的全部元組都處理完畢 138排序合并法(常用于=連接)首先按連接屬性對表1和表2排序?qū)Ρ?的第一個元組,從頭開始掃描表2,順序查找滿足連接條件的元組,找到后就將表1中的第一個元組與該元組拼接起來,形成結(jié)果表中一個元組。當遇到表2中第一條大于表1連接字段值的元組時,對表2的查詢不再繼續(xù)。139找到表1的第二條元組,然后從剛才的中斷點處繼續(xù)順序掃描表2,查找滿足連接條件的元組,找到后就將表1中的第一個元組與該元組拼接起來,形成結(jié)果表中一個元組。直接遇到表2中大于表1連接字段值的元組時,對表2的查詢不再繼續(xù)。重復上述操作,直到表1或表2中的全部元組都處理完畢為止。 1401、等值與非等值

51、連接查詢 (1)等值連接 例16 查詢每個學生及其選修課程的情況。SELECT Student.*,SC.*FROM Student,SCWHERE Student.Sno = SC.Sno;任何子句中引用表1和表2中同名屬性時,都必須加表名前綴。141結(jié)果表 Student.Sno Sname Ssex Sage Sdept SC.Sno Cno Grade 95001 李勇 男 20 CS95001 1 92 95001 李勇 男 20CS95001 2 85 95001 李勇 男 20CS95001 3 88 95002 劉晨 女 19IS 95002 2 90 95002 劉晨 女 1

52、9IS95002 3 80 142(2)自然連接把目標列中重復的屬性列去掉。例17 對例16用自然連接完成。 SELECT Student.Sno,Sname,Ssex,Sage, Sdept,Cno,Grade FROM Student,SC WHERE Student.Sno = SC.Sno;1432、復合條件連接WHERE子句中含多個連接條件時,稱為復合條件連接例18查詢選修2號課程且成績在90分以上的所有學生的學號、姓名SELECT Student.Sno, Student.SnameFROM Student, SCWHERE Student.Sno = SC.Sno AND SC.

53、Cno= 2 AND SC.Grade 90;144結(jié)果:Student.Sno Sname Cname Grade 95001 李勇 數(shù)據(jù)庫 92 95001 李勇 數(shù)學 85 95001 李勇 信息系統(tǒng) 88 95002 劉晨 數(shù)學 90 95002 劉晨 信息系統(tǒng) 80 145多表連接例19 查詢每個學生的學號、姓名、選修的課 程名及成績。 SELECT Student.Sno,Sname,Cname, Grade FROM Student,SC,Course WHERE Student.Sno = SC.Sno AND SC.Cno = Course.Cno;1463、嵌套查詢嵌套查詢

54、概述一個SELECT-FROM-WHERE語句稱為一個查詢塊將一個查詢塊嵌套在另一個查詢塊的WHERE子句或HAVING短語的條件中的查詢稱為嵌套查詢 147不相關(guān)子查詢是由里向外逐層處理。即每個子查詢在上一級查詢處理之前求解,子查詢的結(jié)果用于建立其父查詢的查找條件。148相關(guān)子查詢首先取外層查詢中表的第一個元組,根據(jù)它與內(nèi)層查詢相關(guān)的屬性值處理內(nèi)層查詢,若WHERE子句返回值為真,則取此元組放入結(jié)果表;然后再取外層表的下一個元組;重復這一過程,直至外層表全部檢查完為止。149(1)、帶有IN謂詞的子查詢例20 查詢與“劉晨”在同一個系學習的學生。此查詢要求可以分步來完成 確定“劉晨”所在系名

55、 SELECT Sdept FROM Student WHERE Sname= 劉晨 ;結(jié)果為: Sdept IS150 查找所有在IS系學習的學生。 SELECT Sno,Sname,Sdept FROM Student WHERE Sdept= IS ; 結(jié)果為: Sno Sname Sdept 95001 劉晨 IS 95004 張立 IS151 構(gòu)造嵌套查詢將第一步查詢嵌入到第二步查詢的條件中 SELECT Sno,Sname,Sdept FROM Student WHERE Sdept IN (SELECT Sdept FROM Student WHERE Sname= 劉晨 );此

56、查詢?yōu)椴幌嚓P(guān)子查詢。DBMS求解該查詢時也是分步去做的。152(2)帶有EXISTS謂詞的子查詢EXISTS謂詞帶有EXISTS謂詞的子查詢不返回任何數(shù)據(jù),只產(chǎn)生邏輯真值“true”或邏輯假值“false”。若內(nèi)層查詢結(jié)果非空,則返回真值若內(nèi)層查詢結(jié)果為空,則返回假值由EXISTS引出的子查詢,其目標列表達式通常都用* ,因為帶EXISTS的子查詢只返回真值或假值,給出列名無實際意義NOT EXISTS謂詞153例21 查詢所有選修了1號課程的學生姓名。思路分析: 本查詢涉及Student和SC關(guān)系。 在Student中依次取每個元組的Sno值,用此值去檢查SC關(guān)系。 若SC中存在這樣的元組,

57、其Sno值等于此Student.Sno值,并且其Cno= 1,則取此Student.Sname送入結(jié)果關(guān)系。154例21 查詢所有選修了1號課程的學生姓名。用嵌套查詢 SELECT Sname FROM Student WHERE EXISTS (SELECT * FROM SC /*相關(guān)子查詢*/ WHERE SC.Sno = Student.Sno AND Cno= 1 ); 1552.2.4 數(shù) 據(jù) 更 新一、 插入數(shù)據(jù)兩種插入數(shù)據(jù)方式 插入單個元組 插入子查詢結(jié)果1561. 插入單個元組語句格式 INSERT INTO (,) VALUES ( , )功能 將新元組插入指定表中。157

58、例1 將一個新學生記錄(學號:95020;姓名:陳冬;性別:男;所在系:IS;年齡:18歲)插入到Student表中。 INSERT INTO Student VALUES (95020,陳冬,男,IS,18);158 2. 插入子查詢結(jié)果語句格式 INSERT INTO ( , ) 子查詢;功能 以批量插入,一次將子查詢結(jié)果插入指定表中159例2 對每一個系,求學生的平均年齡,并把結(jié) 果存入數(shù)據(jù)庫。 第一步:建表 CREATE TABLE Deptage (Sdept CHAR(15) /* 系名*/ Avgage SMALLINT); /*學生平均年齡*/ 160第二步:插入數(shù)據(jù) INSE

59、RT INTO Deptage(Sdept,Avgage) SELECT Sdept,AVG(Sage) FROM Student GROUP BY Sdept;161DBMS在執(zhí)行插入語句時會檢查所插元組是否破壞表上已定義的完整性規(guī)則實體完整性參照完整性用戶定義的完整性對于有NOT NULL約束的屬性列是否提供了非空值對于有UNIQUE約束的屬性列是否提供了非重復值對于有值域約束的屬性列所提供的屬性值是否在值域范圍內(nèi)162二、 修改數(shù)據(jù)語句格式 UPDATE SET =,= WHERE ;功能 修改指定表中滿足WHERE子句條件的元組163三種修改方式修改某一個元組的值修改多個元組的值帶子查

60、詢的修改語句1641. 修改某一個元組的值例3 將學生95001的年齡改為22歲。 UPDATE Student SET Sage=22 WHERE Sno= 95001 ; 1652 、修改多個元組的值例4 將信息系所有學生的年齡增加1歲。 UPDATE Student SET Sage= Sage+1 WHERE Sdept= IS ;1663. 帶子查詢的修改語句例5 將計算機科學系全體學生的成績置零。 UPDATE SC SET Grade=0 WHERE CS= (SELETE Sdept FROM Student WHERE Student.Sno = SC.Sno);167SET

溫馨提示

  • 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

提交評論