工商第三章mis技術基礎12節(jié).ppt_第1頁
工商第三章mis技術基礎12節(jié).ppt_第2頁
工商第三章mis技術基礎12節(jié).ppt_第3頁
工商第三章mis技術基礎12節(jié).ppt_第4頁
工商第三章mis技術基礎12節(jié).ppt_第5頁
已閱讀5頁,還剩102頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

3.1數(shù)據(jù)結(jié)構(gòu)技術,DATA STRUCTURE,什麼是數(shù)據(jù)結(jié)構(gòu)?,原始數(shù)據(jù) 所需數(shù)據(jù) 原始數(shù)據(jù) 有組織的數(shù)據(jù) 計算機中存儲 邏輯結(jié)構(gòu) 物理結(jié)構(gòu),數(shù)據(jù)的邏輯結(jié)構(gòu):集合、線性表、樹、圖,(1)集合結(jié)構(gòu)。在集合結(jié)構(gòu)中,數(shù)據(jù)元素間的關系是“屬于同一個集合”。集合是元素關系極為松散的一種結(jié)構(gòu)。,數(shù)據(jù)的邏輯結(jié)構(gòu),(2)線性結(jié)構(gòu)。該結(jié)構(gòu)的數(shù)據(jù)元素之間存在著一對一的關系。,數(shù)據(jù)的邏輯結(jié)構(gòu),(3)樹型結(jié)構(gòu)。該結(jié)構(gòu)的數(shù)據(jù)元素之間存在著一對多的關系。,數(shù)據(jù)的邏輯結(jié)構(gòu),(4)圖形結(jié)構(gòu)。該結(jié)構(gòu)的數(shù)據(jù)元素之間存在著多對多的關系,圖形結(jié)構(gòu)也稱作網(wǎng)狀結(jié)構(gòu)。,數(shù)據(jù)的存儲結(jié)構(gòu),順序存儲結(jié)構(gòu) 鏈式存儲結(jié)構(gòu) 索引存儲結(jié)構(gòu) 散列存儲結(jié)構(gòu),3.2數(shù)據(jù)庫技術,數(shù)據(jù)庫是由表構(gòu)成的,表實際上就是線性表數(shù)據(jù)結(jié)構(gòu),線性表雖然簡單,但是太重要了;拿出來專門研究,形成了現(xiàn)在的數(shù)據(jù)庫技術。(所以說,數(shù)據(jù)庫就是數(shù)據(jù)結(jié)構(gòu)的一種)。,3.2數(shù)據(jù)庫技術,3.2數(shù)據(jù)庫技術,1、E-R中的基本概念 實體:客觀事物;可以是人、物或者抽象的概念;例如:一個學生、一支粉筆 ;用矩形表示。 實體集(entity set):具有相同性質(zhì)的同類實體的集合。 屬性:實體具有的某種特性。如學生實體可由學號、姓名、年齡、性別、系和班級來刻畫。用橢圓型表示; 值域:每個屬性有一個取值范圍;,一、 E-R模型,實體,屬性,3.2.1 E-R模型和關系模型,聯(lián)系(relation):實體集與實體集之間可能有某種聯(lián)系用菱形表示。 聯(lián)系方式可以分為三類: 一對一聯(lián)系:對于A中的一個實體,B中有一個實體與其發(fā)生聯(lián)系,反之,對于B中的一個實體,A中有一個實體與其發(fā)生聯(lián)系,則稱A與B是一對一聯(lián)系,聯(lián)系,一對多聯(lián)系:如果對于A中的每個實體,實體B中有一個以上實體與之發(fā)生聯(lián)系,反之,對于B中的一個實體,A中只有一個實體與其發(fā)生聯(lián)系,則稱A與B是一對多聯(lián)系。,多對多聯(lián)系:如果對于A中的每個實體,實體B中有一個以上實體與之發(fā)生聯(lián)系,反之,對于B中的每個實體,實體集A中有一個以上實體與之發(fā)生聯(lián)系,則稱A與B是多對多聯(lián)系。,學生成績管理系統(tǒng)e-r圖,圖書出版管理系統(tǒng)ER圖,m,n,1、關系模型中的基本概念,二、關系模型,學生基本情況表,關系:對應通常所說的表,學生基本情況表; 元組:表中的一行即為一個元組,若表有1000行,也就有l(wèi)000個元組; 屬性:表中的一列即為個屬性,表有6列,對應6個屬性(學號,姓名,性別,院系,出生年月,籍貫); 主碼(key):圖中的某個屬性組,它可以唯一確定一個元組.學號,按照學生學號的編排方法,每個學生的學號都不相同,所以它可以唯一確定一個學生,也就成為本關系的碼; 域(domain):屬性的取值范圍,如人的年齡一般在0歲150歲之間。學生基本情況表中性別的域是(男,女),院系的域是一個學校所有院系名的集合; 分量:元組中的一個屬性值; 關系模式:關系的描述,一般表示為: 關系名(屬性l,屬性2,屬性n),E-R圖轉(zhuǎn)換為關系模型實際上就是要將實體和實體之間的聯(lián)系轉(zhuǎn)化為關系模式,這種轉(zhuǎn)換一般遵循如下原則: (1)一個實體型轉(zhuǎn)換為一個關系模式。實體的屬性就是關系的屬性,實體的碼就是關系的碼。 (2)一個m:n聯(lián)系轉(zhuǎn)換為一個關系模式。與該聯(lián)系相連的各實體的碼以及聯(lián)系本身的屬性均轉(zhuǎn)換為關系的屬性。關系的碼為各實體碼的組合。,三E-R模型如何向關系模型轉(zhuǎn)化?,學生(學號,姓名,年齡),課程(課程號,課程名,學時數(shù)),學習(學號,課程號,成績),(3)一個1:n聯(lián)系可以轉(zhuǎn)換為個獨立的關系模式,也可以與n端對應的關系模式合并。如果轉(zhuǎn)換為一個獨立的關系模式,則與該聯(lián)系相連的各實體的碼以及聯(lián)系本身的屬性均轉(zhuǎn)換為關系的屬性,而關系的碼為n端實體的碼, 如果與n端對應的關系模式合并,在n端對應的關系模式中加入1方碼和(聯(lián)系)屬性 。,三E-R模型如何向關系模型轉(zhuǎn)化?,倉庫號,地點,面積,倉庫,貨號,品名,價格,產(chǎn)品,存放,1,n,倉庫(倉庫號,地點,面積),產(chǎn)品(貨號,品名,價格),數(shù)量,存放(貨號,倉庫號,數(shù)量),倉庫(倉庫號,地點,面積),產(chǎn)品(貨號,品名,價格,倉庫號,數(shù)量),(4)一個1:1聯(lián)系可以轉(zhuǎn)換為一個獨立的關系模式,也可以與任意一端對應的關系模式合并。如果轉(zhuǎn)換為個獨立的關系模式,則與該聯(lián)系相連的各實體的碼以及聯(lián)系本身的屬性均轉(zhuǎn)換為關系的屬性,每個實體的碼均是該關系的候選碼。如果與某一端對應的關系模式合并,則需要在該關系模式的屬性中加入另個關系模式的碼和聯(lián)系本身的屬性。,廠長號,姓名,年齡,廠長,廠號,廠名,地點,工廠,管理,1,1,水平,(5)三個或三個以上實體間的一個多元聯(lián)系轉(zhuǎn)換為一個關系模式。 與該多元聯(lián)系相連的各實體的碼以及聯(lián)系本身的屬性均轉(zhuǎn)換為關系的屬性。而關系的碼為各實體碼的組合。 (6)具有相同碼的關系模式可合并,工廠(廠號,廠名,廠長,地址) 產(chǎn)品(產(chǎn)品號,型號,單價) 用戶(用戶號,姓名,地址,電話) 銷售(廠號,產(chǎn)品號,用戶號,數(shù)量),作業(yè):完成以下實體聯(lián)系模型向關系模型的轉(zhuǎn)換,某企業(yè)物資管理系統(tǒng)關系模型 供應商(供應商號,姓名,地址,電話號,賬號) 倉庫(倉庫號,面積,電話號) 職工(職工號,姓名,年齡,職稱) 項目(項目號,預算,開工日期) 零件(零件號,名稱,規(guī)格,單價,描述) 供應(供應商號,項目號,零件號,供應量) 庫存(零件號,倉庫號,庫存量) 工作(職工號,倉庫號,成績),3.2.2關系的規(guī)范化,為什麼要進行關系的規(guī)范化? 答:因為不對關系進行規(guī)范化,會存在很多問題。(插入異常、刪除異常、數(shù)據(jù)存儲冗余和修改復雜等等),所以要對關系進行規(guī)范化。 下頁的關系數(shù)據(jù)存儲冗余顯而易見:,3.2.2關系的規(guī)范化,一、關系的規(guī)范化過程中用到的基本概念 函數(shù)依賴:Functional Dependency 完全函數(shù)依賴: Full Functional Dependency 部分函數(shù)依賴: Partial Functional Dependency 傳遞函數(shù)依賴: Transmission Functional Dependency 碼: Key 主屬性: Primary Attribute 非主屬性: Nonprime Attribute 實體完整性: Entity Integrity 范式: Normal Formula,函數(shù)依賴: 函數(shù)依賴(Functional Dependency,F(xiàn)D),是屬性之間的一種聯(lián)系。 定義:設R(U)是屬性集U上的關系X,Y是U的子集R中不可能存在兩個元組在X上的屬性值相等,而在Y上的屬性值不等,(也就是說,只要存在兩個元組在X上的屬性值相等,那麼這兩個元組在Y上的屬性值就一定相等。)則稱 X函數(shù)確定Y或Y函數(shù)依賴于X,記作XY(有時簡稱X確定Y)。 其中X稱為決定因素,Y稱為被決定因素。 學號姓名(能不能函數(shù)確定?) 姓名學號(能不能函數(shù)確定?) 學生信息表,請根據(jù)函數(shù)依賴定義,判斷下列各式是否正確?,學號 性別? 學號 系別? 學號 系主任? 學號 成績? 課程號課程名? 課程號成績? (學號,課程號) 成績? 系別系主任? 學生信息表,學號 性別? 學號 系別? 學號 系主任? 學號 成績? 課程號課程名? 課程號成績? (學號,課程號) 成績? 系別系主任,完全函數(shù)依賴 在關系模式R中,X、Y為 R 的兩個屬性集 ,若Y函數(shù)依賴X(XY)但Y不函數(shù)依賴X的任一真子集X,則稱Y對X完全(Full)函數(shù)依賴,記為:Xf Y。 請根據(jù)定義判斷下式是否正確,為什麼? (學號,課程號)f 成績?,解:(學號,課程號) 成績 學號 成績? 課程號成績? 因為成績函數(shù)依賴于(學號,課程號),但成績不函數(shù)依賴于(學號,課程號)的任一真子集學號或課程號,所以說成績完全函數(shù)依賴于(學號,課程號),部分函數(shù)依賴: 在關系模式R中,X、Y為 R 的兩個屬性集,若存在X的任一真子集X,使得XY,稱Y部分(Partial)函數(shù)依賴于X。記為: Xp Y 請根據(jù)定義判斷下式是否正確?為什麼? (學號,課程號)p 姓名 ? (學號,課程號)p 性別 ? (學號,課程號)p 系別 ? (學號,課程號)p 系主任 ? (學號,課程號)p 課程名 ?,解:因為姓名函數(shù)依賴于(學號,課程號)中的真子集學號,所以 (學號,課程號)p 姓名 因為性別函數(shù)依賴于(學號,課程號)中的真子集學號,所以 (學號,課程號)p 性別 因為系別函數(shù)依賴于(學號,課程號)中的真子集學號,所以 (學號,課程號)p 系別 因為系主任函數(shù)依賴于(學號,課程號)中的真子集學號,所以 (學號,課程號)p 系主任 因為課程名函數(shù)依賴于(學號,課程號)中的真子集課程號,所以 (學號,課程號)p 課程名,傳遞函數(shù)依賴: 在關系R中,X、Y、Z是R的三個不同的屬性集,如果 XY,YZ,則稱Z傳遞函數(shù)依賴于X;記作XtZ 。 請根據(jù)傳遞函數(shù)依賴定義判定下式是否正確? 學號t系主任? 答:由以上分析可知: 學號系別 系別系主任 所以系主任傳遞函數(shù)依賴于學號,即學號t系主任。,碼: 對于屬性集X,關系R中不可能存在兩個元組在屬性集X上的屬性值相等(任何元組屬性集X上的值都是不相同的) ,則稱屬性集X是關系R的候選碼。若候選碼多于一個,則選其中的一個為主碼(Primary Key); 請根據(jù)定義找出關系學生信息表的候選碼。 (學號,課程號) 學生信息表,通過定義找有難度時,可以這樣找: 設R(U)是屬性集U上的關系X是U的子集,如X能函數(shù)確定(完全函數(shù)確定,部分函數(shù)確定均可)U-X中的任一屬性,則X就是關系的碼。 在學生信息表中 U=(學號,姓名,性別,系別,系主任,課程號,課程名,成績) X=(學號,課程號) U-X=(姓名,性別,系別,系主任,課程名,成績) (學號,課程號)p 姓名 (學號,課程號)p 性別 (學號,課程號)p 系別 (學號,課程號)p 系主任 (學號,課程號)p 課程名 (學號,課程號)f成績 所以(學號,課程號)是關系學生信息表的候選碼。,主屬性(Primary Attribute):包含在任一候選碼中的屬性,叫做主屬性。 非主屬性:不包含在任何碼中的屬性稱非主屬性(NonprimeAttribute)或非碼屬性(Nonkey Attribute)。 請根據(jù)定義找出關系學生信息表的主屬性和非主屬性 學生信息表 主屬性:學號,課程號 非主屬性:姓名,性別,系別,系主任,課程名,成績 實體完整性:主屬性不能取空值null,范式:(NF)是符合某一種級別的關系模式的集合。關系數(shù)據(jù)庫中的關系必須滿足一定的要求,滿足不同程度要求的為不同的范式。 二維表(關系)按其規(guī)范化程度從低到高可分為5級范式(Normal Form),分別稱為1NF、2NF、3NF(BCNF)、4NF、5NF。 若R(U)符合x范式的要求,則稱R為x范式,記作:RxNF。,第一范式(1NF) 如果一個關系模式R的所有屬性都是不可分的基本數(shù)據(jù)項,則 R 1NF 第二范式(2NF) 如果一個關系 R1NF(滿足第一范式的要求),而且它的所有非主屬性都完全函數(shù)依賴于R的任一候選碼,則R屬于第二范式,記作:R2NF。 第三范式(3NF) 若R2NF(滿足第二范式的要求), 且它的任何一個非主屬性都不傳遞依賴于任一候選碼, 則稱關系R滿足第三范式。 記為R3NF BCNF和4NF、5NF不做討論。,二、關系的規(guī)范化: 通過模式分解將一個低級范式轉(zhuǎn)換為若干個高級范式的過程稱作關系的規(guī)范化。,(一)1NF-2NF,1、1NF定義 如果一個關系模式R的所有屬性都是不可分的基本數(shù)據(jù)項,則 R 1NF 請根據(jù)1NF的定義判定下面兩個關系是否1NF ?,學生信息表,2、1NF的關系存在的問題 插入異常:若學生沒有選課,(為了保證實體完整性)則他的個人信息及所在系的信息就無法插入 刪除異常:若刪除學生的選課信息,則有關他的個人信息及所在系的信息也隨之刪除了(大一第一學期因病休學,無法上課,需要刪除選課信息,為了保證實體完整性,需要連有關他的個人信息及所在系的信息一起刪除) 數(shù)據(jù)存儲冗余和修改復雜:如果一個學生選修了k門課,則有關他的個人信息和所在系的信息重復存儲k次;如果學生改名,若他選修了k門課,則需要修改k條記錄,學生信息表,3、1NF 2NF 目的消除原關系中非主屬性對碼的部分函數(shù)依賴 步驟: 1)找出關系的碼(學號,課程號),寫出函數(shù)依賴 (學號,課程號)f 成績 (學號,課程號)p 姓名 即學號姓名 (學號,課程號)p 性別 即學號性別 (學號,課程號)p 系別 即學號系別 (學號,課程號)p 系主任 即學號系主任 (學號,課程號)p 課程名 即課程號課程名 2)分解關系 對碼(學號,課程號)完全函數(shù)依賴的屬性和碼構(gòu)成一個關系 (學號,課程號,成績) 對碼的真子集學號函數(shù)依賴的屬性和學號構(gòu)成一個關系 (學號,姓名,性別,系別,系主任) 對碼的真子集課程號函數(shù)依賴的屬性和課程號構(gòu)成一個關系 (課程號,課程名),(二) 2NF3NF,1、 2NF定義 如果一個關系 R1NF,且它的所有非主屬性都完全函數(shù)依賴于R的任一候選碼,則R屬于第二范式,記作:R2NF。 判斷下列三個關系是否屬于2NF?,(二) 2NF3NF),2、2NF的關系存在的問題 插入異常 新建一個系,但還沒有招生,(為了保證實體完整性)有關于系的信息無法插入進去。 刪除異常 刪除一個學生(該系唯一的一個學生),連系的信息也一塊刪除掉了,數(shù)據(jù)冗余度大 一個系有多少學生,關于系的信息就要被存儲多少遍 修改復雜 系主任發(fā)生變動,此系有多少學生,系主任就需要被修改多少遍。,3、2NF 3NF (學號,姓名,性別,系別,系主任) 目的: 消除非主屬性對碼的傳遞函數(shù)依賴 步驟: 1)找出非主屬性對碼的傳遞函數(shù)依賴 學號系別 系別系主任 XY, YZ 2)分解關系 Y和Z構(gòu)成一個關系(系別,系主任) 原關系中拋卻對碼傳遞函數(shù)依賴的非主屬性即Z構(gòu)成一個關系 (學號,姓名,性別,系別),請根據(jù)3 NF定義(如下所示)驗證以上兩個關系是不是3 NF的? 若R2NF(滿足第二范式的要求), 且它的任何一個非主屬性都不傳遞依賴于碼, 則稱關系R滿足第三范式。 記為R3NF,作業(yè),作業(yè):請將以下關系規(guī)范化為3NF的關系 一個職工(教師)可以參與多個項目,每個教師在項目中的角色可以是“負責人”或“參與者”,每個項目可以有多個教師參與,該關系的碼是(職工號,項目號) (職工號,姓名,職稱,系別,系主任 ,項目號,項目名稱,項目級別 項目角色),解:首先將它規(guī)范化為2NF的關系 1(職工號,項目號,項目角色) 2(職工號,姓名,職稱,系別,系主任) 3(項目號,項目名稱,項目級別) 因13關系滿足3NF的要求,再將第二個關系規(guī)范化為3NF的關系 4(職工號,姓名,職稱,系別) 5(系別,系主任) 該關系最后規(guī)范化成的一組3NF的關系:1、3、4、5,關系規(guī)范化的過程總結(jié),3.2.3關系數(shù)據(jù)庫標準語言SQL,3.2.3關系數(shù)據(jù)庫標準語言SQL SQL(Structured Query Language),1974年提出,1986年美國國家標準局把SQL作為關系數(shù)據(jù)庫語言的美國標準,1987年國際標準化組織(ISO)通過這一標準。此后各個數(shù)據(jù)庫廠家紛紛推出各自的SQL軟件或與SQL的接口軟件。這就使大多數(shù)數(shù)據(jù)庫均用SQL作為共同的數(shù)據(jù)存取語言和標準接口,使不同數(shù)據(jù)庫之間的互操作有了共同的基礎。SQL已成為數(shù)據(jù)庫領域中一個主流語言。人們把確立SQL為關系數(shù)據(jù)庫語言標準及其后的發(fā)展稱為是一場革命。,3.2.3關系數(shù)據(jù)庫標準語言SQL,3.2.3關系數(shù)據(jù)庫標準語言SQL SQL(Structured Query Language),1974年提出,1986年美國國家標準局把SQL作為關系數(shù)據(jù)庫語言的美國標準,1987年國際標準化組織(ISO)通過這一標準。人們把確立SQL為關系數(shù)據(jù)庫語言標準及其后的發(fā)展稱為是一場革命。 為什麼稱SQL為關系數(shù)據(jù)庫的標準語言?標準二字含義 答:foxpro語言(locate、replace)只能操作foxpro數(shù)據(jù)庫,locate、replace等命令只對foxpro數(shù)據(jù)庫有效,而SQL語言可以操作任意的關系數(shù)據(jù)庫(SQL SERVER 、ACCESS、FOXPRO、DB2、POWERBUIDER),3. 2.3關系數(shù)據(jù)庫標準語言SQL,SQL語言動詞共有九個,如下表所示(重點學習前7個):,1 1)建立數(shù)據(jù)庫命令(補充,書上沒有) 格式: CREATE DATABASE 例: CREATE DATABASE D:SCDATABASE (在D盤根目錄下建立了一個空的數(shù)據(jù)庫SCDATABASE),說明: 各種符號的含義跟foxpro命令一樣 必選項 可選項 項的延續(xù) 數(shù)據(jù)類型: 不同的數(shù)據(jù)庫系統(tǒng)有自己的數(shù)據(jù)類型規(guī)定,但一般都包括INT, FLOAT, CHAR(n), DATE等 完整性約束條件 列級完整性約束:涉及表的某一列 表級完整性約束:涉及表的一個或多個列(暫不討論),CREATE TABLE ( 列級完整性約束 , 列級完整性約束 , );,1 .2)建立基本表,完整性約束,CREATE TABLE的完整性約束 列級約束 UNIQUE 取值唯一 NOT NULL 屬性值禁止為空 表級約束(暫不討論) PRIMARY KEY (A1, ., An) 主碼-若干屬性列 CHECK(P) P為條件表達式,SQL-92以后版本中,一個屬性若有PRIMARY KEY聲明則隱含有NOT NULL約束,例:以下語句建立了一個怎樣的表? Create table student ( sno char(5) not null unique, sname char(20) unique, ssex char(2), sage int, sdept char(16);,解:該語句建立了一個表名為student的表,包含5個字段 Sno 字符型,長度為5,不允許取空值,字段值是唯一的 Sname字符型,長度為20 Ssex 字符型, 長度為2 Sage 整型 Sdept 字符型,長度是16,例:以下語句建立了一個怎樣的表? Create table sc ( sno char(5) not null, cno char(1) not null, grade int,); 解:該語句建立了一個表名為sc的表,包含3個字段 Sno 字符型,長度為5,不允許取空值 cno字符型,長度為1, 不允許取空值 grade 整型,例:以下語句建立了一個怎樣的表? Create table course(cno char(1) not null unique,cname char(20),pcno char(1),ccredit int) 解:該語句建立了一個名為course的表,包含4個字段 Cno,課程號,字符型,長度為1,不允許取空值,字段值是唯一的 Cname課程名,字符型,長度為20 Pcno 先行課課程號,字符型,長度為1 Ccredit 該課程學分,整型,上機試驗:,請你根據(jù)所學過的SQL命令,在FOXPRO環(huán)境下建立一個FOXPRO型數(shù)據(jù)庫:學生課程數(shù)據(jù)庫SCDATABASE:包含下面三個基本表: 學生表:student( sno, sname, ssex, sage, sdept) 課程表:course( cno, cname, pcno, ccredit) 學生選課表:sc( sno, cno, grade),1)、在FOXPRO環(huán)境中,建立如下一個程序文件,運行。 Set defa to d: CREATE DATABASE SCDATABASE *執(zhí)行完上面命令后,SCDATABASE默認是打開的,以下命令建的表都位于SCDATABASE Create table student (sno char(5) not null unique,sname char(20),ssex char(2),sage int,sdept char(16) Create table course(cno char(1) not null unique,cname char(20),pcno char(1) null,ccredit int) Create table sc(sno char(5) not null ,cno char(5) not null,grade int ) 2)、也可以在命令窗口中輸入以上四條語句,2.修改基本表 格式: ALTER TABLE ADD完整性約束 DROP COLUMN MODIFY(此子句暫不考慮) 例:向Student表增加“入學時間”列,其數(shù)據(jù)類型為日期型。 Alter table student ADD Scome DATE 例:刪除Student表的 “入學時間”列,其數(shù)據(jù)類型為日期型。 Alter table student DROP COLUMN Scome,3. 刪除基本表 格式: DROP TABLE 例:刪除Student表 Drop table Student,3. 2.3關系數(shù)據(jù)庫標準語言SQL,4.插入數(shù)據(jù) 格式: INTO子句中沒有出現(xiàn)的屬性列,新記錄在該列上將取空值 如果INTO子句中沒有指明任何列名,則新記錄的每個屬性列必須有值,INSERT INTO (,) VALUES(,);,INSERT INTO Student VALUES(95020, 陳冬, 男, IS, 18);,INSERT INTO SC(Sno, Cno) VALUES(“95002”, “1”);,例 將一個新學生記錄插入到Student表中,例 插入一條選課記錄(”95020”,”1”),新插入的記錄Grade取空值,如果INTO子句中沒有指明任何列名,則新記錄的每個屬性列必須有值,INTO子句中沒有出現(xiàn)的屬性列,新記錄在該列上將取空值,上機試驗:請你根據(jù)所學過的SQL命令,在建立的學生課程數(shù)據(jù)庫SCDATABASE中錄入如下數(shù)據(jù):,student,course,sc,1)在FOXPRO環(huán)境中,建立如下一個程序文件,運行 INSERT INTO student VALUES(“95001“,“李勇“,“男“,20 ,“CS“) INSERT INTO student VALUES(“95002“,“劉晨“,“男“,19,“IS“) INSERT INTO student VALUES(“95003“,“王敏“,“男“,18,“MA “) INSERT INTO student VALUES(“95004“,“張立“,“男“,19,“IS“) INSERT INTO course VALUES(“1“,“數(shù)據(jù)庫“,“5“,4) INSERT INTO course VALUES(“2“,“數(shù)學“,null , 2) INSERT INTO course VALUES(“3“,“信息系統(tǒng)“,“1“,4) INSERT INTO course VALUES(“4“,“操作系統(tǒng)“,“6“,3) INSERT INTO course VALUES(“5“,“數(shù)據(jù)結(jié)構(gòu)“,“7“,4) INSERT INTO course VALUES(“6“,“數(shù)據(jù)處理“, null,2) INSERT INTO course VALUES(“7“,“ C語言“,“6“,4) INSERT INTO sc VALUES(“95001“, “1“ ,92) INSERT INTO sc VALUES(“95001“, “2“ ,85) INSERT INTO sc VALUES(“95001“, “3“ ,88) INSERT INTO sc VALUES(“95002“, “2“ ,90) INSERT INTO sc VALUES(“95002“, “3“ ,80) 2)也可在命令窗口中運行各條命令,5.修改數(shù)據(jù) 格式: UPDATE SET =,= WHERE 例:update student set sage=22 where sno=“95001“ 例:update student set sage=sage+1 解釋上兩條語句完成了怎樣的功能 6.刪除數(shù)據(jù) 格式: DELETE FROM WHERE 例:delete from student where sno=“95004“ 解釋該語句完成了怎樣的功能,3. 2.3關系數(shù)據(jù)庫標準語言SQL,7.數(shù)據(jù)查詢(核心語句,功能強大) 格式: SELECT ALL | DISTINCT ,F(xiàn)ROM , WHERE GROUP By HAVING ORDER BYASC | DESC 必選項 可選項 項的延續(xù) | 任選其一,SELECT * FROM Student;,單表查詢,一、選擇表中若干列 查詢指定列:在中指定預查屬性 查詢?nèi)苛校涸谥惺褂? 查詢經(jīng)計算的值:在中可使用常量、表達式、函數(shù)等,SELECT Sname,“Year of Birth is“,2010-sage,LOWER(sdept) FROM Student ;,SELECT Sno, Sname FROM Student;,查詢實例,結(jié)果為: Sname year of Birth: 2002-Sage LOWER(Sdept) 李勇 Year of Birht: 1982 cs 劉晨 Year of Birht: 1983 is 王敏 Year of Birht: 1984 ma 張立 Year of Birht: 1983 is,SELECT Sname,“Year of Birth is“,2002-sage,LOWER(sdept) FROM Student ;,二、選擇表中若干元組,取消取值重復的列:指定DISTINCT短語 查詢滿足條件的元組:在WHERE子句中指定條件,DISTINCT 短語,SQL 允許重復的元組/行存在,如果需要去掉重復的元組/行,必須指定DISTINCT 短語,缺省為ALL 例: 查詢選修了課程的學生學號 結(jié)果為 : 結(jié)果為: Sno Sno 95001 95001 95001 95002 95001 95002 95002,SELECT DISTINCT Sno FROM SC;,SELECT Sno FROM SC; 或 SELECT ALL Sno FROM SC;,WHERE子句,查詢滿足條件的元組:在WHERE子句中指定條件 WHERE子句常用的查詢條件:,Where子句比較大小,SELECT Sname FROM Student WHERE Sdept = “CS“,SELECT DISTINCT Sno FROM SC WHERE Grade 60;,例 查詢計算機系全體學生的名單,例 查詢考試成績有不及格的學生的學號,例 查詢所有年齡在20歲以下的學生姓名及其年齡,SELECT Sname, Sage SELECT Sname, Sage FROM Student FROM Student WHERE Sage=20;,Where子句確定范圍,SELECT Sname, Sdept, Sage FROM Student WHERE Sage BETWEEN 20 AND 40;,例 查詢年齡在2040歲之間的學生姓名、系別和年齡,SELECT Sname, Sdept, Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23;,例 查詢年齡不在2023歲之間的學生姓名、系別和年齡,Where子句確定集合,SELECT Sname, Ssex FROM Student WHERE Sdept IN (IS, MA, CS);,例 查詢信息系(IS)、數(shù)學系(MA)和計算機系(CS)學生的姓名和性別,SELECT Sname, Ssex FROM Student WHERE Sdept NOT IN (IS,MA,CS),例 查詢除信息系(IS)、數(shù)學系(MA)和計算機系(CS)以外其它系學生的姓名和性別,Where子句字符串匹配,謂詞LIKE可以用來進行字符串的匹配 格式:NOT LIKE ESCAPE 匹配串中%代表任意長度的字符串,如a%b:acb, addgb, ab 匹配串中_ 代表任意單個字符,如a_b:acb afb,通配符例子,SELECT * FROM Student WHERE Sname LIKE 劉%;,SELECT * FROM Student WHERE Sname LIKE _ _明_ _;,例 查詢所有姓劉的學生的詳細信息,例 查詢所有全名為三個字且中間漢字為“明”的學生的詳細信息,換碼字符,例 查詢DB_ DESIGN課程的課程號和學分,SELECT Cno,CCredit FROM Course WHERE Cname LIKE DB_DESIGN ESCAPE ;,注:ESCAPE 表示為轉(zhuǎn)義換碼字符,緊跟其后的_不再具有通配符的含義, 轉(zhuǎn)義為普通_字符,SELECT Cno, CCredit FROM Course WHERE Cname LIKE DB_DESIGN,例 所有以”DB”開頭,中間為任意一個字符,結(jié)尾”DESIGN”課程的課程號和學分,Where子句涉及空值的查詢,SELECT Sno, Cno FROM SC WHERE Grade IS NULL;,SELECT Sno, Cno FROM SC WHERE Grade IS NOT NULL;,例:某些學生選修課程后沒有參加考試,所以有選修課記錄,但沒有考試成績。查詢?nèi)鄙俪煽兊膶W生的學號和相應的課程號:,例 查詢所有有成績的學生學號和課程號,注意這里的“IS” 不能用等號代替,Where子句多重條件查詢,SELECT Sname FROM Student WHERE Sdept = CS AND Sage 20;,SELECT Sname, Ssex FROM Student WHERE Sdept = IS OR Sdept = MA OR Sdept = CS;,例 查詢計算機系年齡在20歲以下的學生姓名,例 查詢信息系(IS)、數(shù)學系(MA)和計算機系(CS)學生的姓名和性別,練習,關系:圖書(書號,書名,作者,出版社,單價) BOOK(Bno, Bname, Author, Press, Price) 查詢“數(shù)據(jù)庫”一書的書號和單價 查詢單價在20至50元之間的圖書信息 查詢北京某出版社出版的圖書信息 查詢作者是張一,王二,劉三的書的信息 查詢所有圖書的書號,書名和半價信息 查詢?nèi)鄙俪霭嫔缧畔⒌膱D書的書號和書名,三、對查詢結(jié)果排序,SELECT Sno, Grade FROM SC WHERE Cno = 3 ORDER BY Grade DESC;,SELECT * FROM Student ORDER BY Sdept, Sage DESC;,例 查詢選修了3號課程的學生的學號及其成績,查詢結(jié)果按分數(shù)的降序排列,例 查詢?nèi)w學生情況,查詢結(jié)果按所在系的系號升序排列,同一系中的學生按年齡降序排列(見示例),ORDER BY 子句 可對查詢結(jié)果按照一個或多個屬性列的升序(ASC)或降序(DESC)排列,缺省值為升序,四、使用集函數(shù),實例,SELECT COUNT(*) FROM Student;,SELECT COUNT(DISTINCT Sno) FROM SC;,SELECT AVG(Grade) FROM SC WHERE Cno = 1;,SELECT MAX(Grade) FROM SC WHERE Cno = 1;,例 查詢學生總?cè)藬?shù),例 查詢選修了課程的學生人數(shù),例 計算選修了1號課程的學生平均成績,例 查詢選修1號課程的學生最高分數(shù),五、對查詢結(jié)果分組,GROUP BY 子句將查詢結(jié)果按某一列或多列分組,值相等的為一組。 對查詢結(jié)果分組的目的是為了細化集函數(shù)的作用對象,分組后每個組都有一個函數(shù)值 如果分組后還要求按一定的條件對這些組進行篩選,最終只輸出滿足指定條件的組, 則可以是使用HAVING短語指定篩選條件,分組實例,SELECT Cno, COUNT(Sno) FROM SC GROUP BY Cno;,SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*)3;,例 查詢選修了3門以上課程的學生學號,例 求各個課程號及相應的選課人數(shù),練習,數(shù)據(jù)庫模式如下: 倉庫(倉庫號,負責人) 貨物(貨物號,貨物名,貨物描述) 入庫記錄(貨物號,倉庫號,數(shù)量,入庫日期,經(jīng)辦人號) 用SQL實現(xiàn)以下查詢要求: 查詢倉庫中有多少種不同的貨物 查詢每天入庫數(shù)量的最大值 統(tǒng)計2003年3月20日以后每天入庫的貨物總數(shù)量 按貨物號統(tǒng)計每一種貨物在倉庫中的總數(shù)量 查詢“A-001”號經(jīng)辦人當日經(jīng)辦的入庫記錄數(shù),SELECT COUNT(*) FROM 貨物; 或 SELECT COUNT(DISTINCT 貨物號) FROM 入庫記錄;,SELECT入庫日期, MAX(數(shù)量) FROM 入庫記錄 GROUP BY 入庫日期;,SELECT入庫日期, SUM(數(shù)量) FROM 入庫記錄 GROUP BY 入庫日期 HAVING 入庫日期 “2003/03/20”;,SELECT 貨物號,SUM(數(shù)量) FROM 入庫記錄 GROUP BY 貨物號;,SELECT COUNT(*) FROM 入庫記錄 WHERE入庫日期=Today() GROUP BY 經(jīng)辦人號 HAVING 經(jīng)辦人號 = “A-001”;,連接查詢,連接(Join)查詢 查詢涉及兩個以上的表(在FROM子句中體現(xiàn)) From 子句 對應于關系代數(shù)中笛卡兒乘積運算, 它給出待掃描的關系/表(指定多個表), WHERE子句給出連接條件,連接查詢,連接條件的

溫馨提示

  • 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

提交評論