




已閱讀5頁,還剩102頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
3.1數據結構技術,DATA STRUCTURE,什麼是數據結構?,原始數據 所需數據 原始數據 有組織的數據 計算機中存儲 邏輯結構 物理結構,數據的邏輯結構:集合、線性表、樹、圖,(1)集合結構。在集合結構中,數據元素間的關系是“屬于同一個集合”。集合是元素關系極為松散的一種結構。,數據的邏輯結構,(2)線性結構。該結構的數據元素之間存在著一對一的關系。,數據的邏輯結構,(3)樹型結構。該結構的數據元素之間存在著一對多的關系。,數據的邏輯結構,(4)圖形結構。該結構的數據元素之間存在著多對多的關系,圖形結構也稱作網狀結構。,數據的存儲結構,順序存儲結構 鏈式存儲結構 索引存儲結構 散列存儲結構,3.2數據庫技術,數據庫是由表構成的,表實際上就是線性表數據結構,線性表雖然簡單,但是太重要了;拿出來專門研究,形成了現在的數據庫技術。(所以說,數據庫就是數據結構的一種)。,3.2數據庫技術,3.2數據庫技術,1、E-R中的基本概念 實體:客觀事物;可以是人、物或者抽象的概念;例如:一個學生、一支粉筆 ;用矩形表示。 實體集(entity set):具有相同性質的同類實體的集合。 屬性:實體具有的某種特性。如學生實體可由學號、姓名、年齡、性別、系和班級來刻畫。用橢圓型表示; 值域:每個屬性有一個取值范圍;,一、 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圖轉換為關系模型實際上就是要將實體和實體之間的聯(lián)系轉化為關系模式,這種轉換一般遵循如下原則: (1)一個實體型轉換為一個關系模式。實體的屬性就是關系的屬性,實體的碼就是關系的碼。 (2)一個m:n聯(lián)系轉換為一個關系模式。與該聯(lián)系相連的各實體的碼以及聯(lián)系本身的屬性均轉換為關系的屬性。關系的碼為各實體碼的組合。,三E-R模型如何向關系模型轉化?,學生(學號,姓名,年齡),課程(課程號,課程名,學時數),學習(學號,課程號,成績),(3)一個1:n聯(lián)系可以轉換為個獨立的關系模式,也可以與n端對應的關系模式合并。如果轉換為一個獨立的關系模式,則與該聯(lián)系相連的各實體的碼以及聯(lián)系本身的屬性均轉換為關系的屬性,而關系的碼為n端實體的碼, 如果與n端對應的關系模式合并,在n端對應的關系模式中加入1方碼和(聯(lián)系)屬性 。,三E-R模型如何向關系模型轉化?,倉庫號,地點,面積,倉庫,貨號,品名,價格,產品,存放,1,n,倉庫(倉庫號,地點,面積),產品(貨號,品名,價格),數量,存放(貨號,倉庫號,數量),倉庫(倉庫號,地點,面積),產品(貨號,品名,價格,倉庫號,數量),(4)一個1:1聯(lián)系可以轉換為一個獨立的關系模式,也可以與任意一端對應的關系模式合并。如果轉換為個獨立的關系模式,則與該聯(lián)系相連的各實體的碼以及聯(lián)系本身的屬性均轉換為關系的屬性,每個實體的碼均是該關系的候選碼。如果與某一端對應的關系模式合并,則需要在該關系模式的屬性中加入另個關系模式的碼和聯(lián)系本身的屬性。,廠長號,姓名,年齡,廠長,廠號,廠名,地點,工廠,管理,1,1,水平,(5)三個或三個以上實體間的一個多元聯(lián)系轉換為一個關系模式。 與該多元聯(lián)系相連的各實體的碼以及聯(lián)系本身的屬性均轉換為關系的屬性。而關系的碼為各實體碼的組合。 (6)具有相同碼的關系模式可合并,工廠(廠號,廠名,廠長,地址) 產品(產品號,型號,單價) 用戶(用戶號,姓名,地址,電話) 銷售(廠號,產品號,用戶號,數量),作業(yè):完成以下實體聯(lián)系模型向關系模型的轉換,某企業(yè)物資管理系統(tǒng)關系模型 供應商(供應商號,姓名,地址,電話號,賬號) 倉庫(倉庫號,面積,電話號) 職工(職工號,姓名,年齡,職稱) 項目(項目號,預算,開工日期) 零件(零件號,名稱,規(guī)格,單價,描述) 供應(供應商號,項目號,零件號,供應量) 庫存(零件號,倉庫號,庫存量) 工作(職工號,倉庫號,成績),3.2.2關系的規(guī)范化,為什麼要進行關系的規(guī)范化? 答:因為不對關系進行規(guī)范化,會存在很多問題。(插入異常、刪除異常、數據存儲冗余和修改復雜等等),所以要對關系進行規(guī)范化。 下頁的關系數據存儲冗余顯而易見:,3.2.2關系的規(guī)范化,一、關系的規(guī)范化過程中用到的基本概念 函數依賴:Functional Dependency 完全函數依賴: Full Functional Dependency 部分函數依賴: Partial Functional Dependency 傳遞函數依賴: Transmission Functional Dependency 碼: Key 主屬性: Primary Attribute 非主屬性: Nonprime Attribute 實體完整性: Entity Integrity 范式: Normal Formula,函數依賴: 函數依賴(Functional Dependency,FD),是屬性之間的一種聯(lián)系。 定義:設R(U)是屬性集U上的關系X,Y是U的子集R中不可能存在兩個元組在X上的屬性值相等,而在Y上的屬性值不等,(也就是說,只要存在兩個元組在X上的屬性值相等,那麼這兩個元組在Y上的屬性值就一定相等。)則稱 X函數確定Y或Y函數依賴于X,記作XY(有時簡稱X確定Y)。 其中X稱為決定因素,Y稱為被決定因素。 學號姓名(能不能函數確定?) 姓名學號(能不能函數確定?) 學生信息表,請根據函數依賴定義,判斷下列各式是否正確?,學號 性別? 學號 系別? 學號 系主任? 學號 成績? 課程號課程名? 課程號成績? (學號,課程號) 成績? 系別系主任? 學生信息表,學號 性別? 學號 系別? 學號 系主任? 學號 成績? 課程號課程名? 課程號成績? (學號,課程號) 成績? 系別系主任,完全函數依賴 在關系模式R中,X、Y為 R 的兩個屬性集 ,若Y函數依賴X(XY)但Y不函數依賴X的任一真子集X,則稱Y對X完全(Full)函數依賴,記為:Xf Y。 請根據定義判斷下式是否正確,為什麼? (學號,課程號)f 成績?,解:(學號,課程號) 成績 學號 成績? 課程號成績? 因為成績函數依賴于(學號,課程號),但成績不函數依賴于(學號,課程號)的任一真子集學號或課程號,所以說成績完全函數依賴于(學號,課程號),部分函數依賴: 在關系模式R中,X、Y為 R 的兩個屬性集,若存在X的任一真子集X,使得XY,稱Y部分(Partial)函數依賴于X。記為: Xp Y 請根據定義判斷下式是否正確?為什麼? (學號,課程號)p 姓名 ? (學號,課程號)p 性別 ? (學號,課程號)p 系別 ? (學號,課程號)p 系主任 ? (學號,課程號)p 課程名 ?,解:因為姓名函數依賴于(學號,課程號)中的真子集學號,所以 (學號,課程號)p 姓名 因為性別函數依賴于(學號,課程號)中的真子集學號,所以 (學號,課程號)p 性別 因為系別函數依賴于(學號,課程號)中的真子集學號,所以 (學號,課程號)p 系別 因為系主任函數依賴于(學號,課程號)中的真子集學號,所以 (學號,課程號)p 系主任 因為課程名函數依賴于(學號,課程號)中的真子集課程號,所以 (學號,課程號)p 課程名,傳遞函數依賴: 在關系R中,X、Y、Z是R的三個不同的屬性集,如果 XY,YZ,則稱Z傳遞函數依賴于X;記作XtZ 。 請根據傳遞函數依賴定義判定下式是否正確? 學號t系主任? 答:由以上分析可知: 學號系別 系別系主任 所以系主任傳遞函數依賴于學號,即學號t系主任。,碼: 對于屬性集X,關系R中不可能存在兩個元組在屬性集X上的屬性值相等(任何元組屬性集X上的值都是不相同的) ,則稱屬性集X是關系R的候選碼。若候選碼多于一個,則選其中的一個為主碼(Primary Key); 請根據定義找出關系學生信息表的候選碼。 (學號,課程號) 學生信息表,通過定義找有難度時,可以這樣找: 設R(U)是屬性集U上的關系X是U的子集,如X能函數確定(完全函數確定,部分函數確定均可)U-X中的任一屬性,則X就是關系的碼。 在學生信息表中 U=(學號,姓名,性別,系別,系主任,課程號,課程名,成績) X=(學號,課程號) U-X=(姓名,性別,系別,系主任,課程名,成績) (學號,課程號)p 姓名 (學號,課程號)p 性別 (學號,課程號)p 系別 (學號,課程號)p 系主任 (學號,課程號)p 課程名 (學號,課程號)f成績 所以(學號,課程號)是關系學生信息表的候選碼。,主屬性(Primary Attribute):包含在任一候選碼中的屬性,叫做主屬性。 非主屬性:不包含在任何碼中的屬性稱非主屬性(NonprimeAttribute)或非碼屬性(Nonkey Attribute)。 請根據定義找出關系學生信息表的主屬性和非主屬性 學生信息表 主屬性:學號,課程號 非主屬性:姓名,性別,系別,系主任,課程名,成績 實體完整性:主屬性不能取空值null,范式:(NF)是符合某一種級別的關系模式的集合。關系數據庫中的關系必須滿足一定的要求,滿足不同程度要求的為不同的范式。 二維表(關系)按其規(guī)范化程度從低到高可分為5級范式(Normal Form),分別稱為1NF、2NF、3NF(BCNF)、4NF、5NF。 若R(U)符合x范式的要求,則稱R為x范式,記作:RxNF。,第一范式(1NF) 如果一個關系模式R的所有屬性都是不可分的基本數據項,則 R 1NF 第二范式(2NF) 如果一個關系 R1NF(滿足第一范式的要求),而且它的所有非主屬性都完全函數依賴于R的任一候選碼,則R屬于第二范式,記作:R2NF。 第三范式(3NF) 若R2NF(滿足第二范式的要求), 且它的任何一個非主屬性都不傳遞依賴于任一候選碼, 則稱關系R滿足第三范式。 記為R3NF BCNF和4NF、5NF不做討論。,二、關系的規(guī)范化: 通過模式分解將一個低級范式轉換為若干個高級范式的過程稱作關系的規(guī)范化。,(一)1NF-2NF,1、1NF定義 如果一個關系模式R的所有屬性都是不可分的基本數據項,則 R 1NF 請根據1NF的定義判定下面兩個關系是否1NF ?,學生信息表,2、1NF的關系存在的問題 插入異常:若學生沒有選課,(為了保證實體完整性)則他的個人信息及所在系的信息就無法插入 刪除異常:若刪除學生的選課信息,則有關他的個人信息及所在系的信息也隨之刪除了(大一第一學期因病休學,無法上課,需要刪除選課信息,為了保證實體完整性,需要連有關他的個人信息及所在系的信息一起刪除) 數據存儲冗余和修改復雜:如果一個學生選修了k門課,則有關他的個人信息和所在系的信息重復存儲k次;如果學生改名,若他選修了k門課,則需要修改k條記錄,學生信息表,3、1NF 2NF 目的消除原關系中非主屬性對碼的部分函數依賴 步驟: 1)找出關系的碼(學號,課程號),寫出函數依賴 (學號,課程號)f 成績 (學號,課程號)p 姓名 即學號姓名 (學號,課程號)p 性別 即學號性別 (學號,課程號)p 系別 即學號系別 (學號,課程號)p 系主任 即學號系主任 (學號,課程號)p 課程名 即課程號課程名 2)分解關系 對碼(學號,課程號)完全函數依賴的屬性和碼構成一個關系 (學號,課程號,成績) 對碼的真子集學號函數依賴的屬性和學號構成一個關系 (學號,姓名,性別,系別,系主任) 對碼的真子集課程號函數依賴的屬性和課程號構成一個關系 (課程號,課程名),(二) 2NF3NF,1、 2NF定義 如果一個關系 R1NF,且它的所有非主屬性都完全函數依賴于R的任一候選碼,則R屬于第二范式,記作:R2NF。 判斷下列三個關系是否屬于2NF?,(二) 2NF3NF),2、2NF的關系存在的問題 插入異常 新建一個系,但還沒有招生,(為了保證實體完整性)有關于系的信息無法插入進去。 刪除異常 刪除一個學生(該系唯一的一個學生),連系的信息也一塊刪除掉了,數據冗余度大 一個系有多少學生,關于系的信息就要被存儲多少遍 修改復雜 系主任發(fā)生變動,此系有多少學生,系主任就需要被修改多少遍。,3、2NF 3NF (學號,姓名,性別,系別,系主任) 目的: 消除非主屬性對碼的傳遞函數依賴 步驟: 1)找出非主屬性對碼的傳遞函數依賴 學號系別 系別系主任 XY, YZ 2)分解關系 Y和Z構成一個關系(系別,系主任) 原關系中拋卻對碼傳遞函數依賴的非主屬性即Z構成一個關系 (學號,姓名,性別,系別),請根據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ī)范化的過程總結,3.2.3關系數據庫標準語言SQL,3.2.3關系數據庫標準語言SQL SQL(Structured Query Language),1974年提出,1986年美國國家標準局把SQL作為關系數據庫語言的美國標準,1987年國際標準化組織(ISO)通過這一標準。此后各個數據庫廠家紛紛推出各自的SQL軟件或與SQL的接口軟件。這就使大多數數據庫均用SQL作為共同的數據存取語言和標準接口,使不同數據庫之間的互操作有了共同的基礎。SQL已成為數據庫領域中一個主流語言。人們把確立SQL為關系數據庫語言標準及其后的發(fā)展稱為是一場革命。,3.2.3關系數據庫標準語言SQL,3.2.3關系數據庫標準語言SQL SQL(Structured Query Language),1974年提出,1986年美國國家標準局把SQL作為關系數據庫語言的美國標準,1987年國際標準化組織(ISO)通過這一標準。人們把確立SQL為關系數據庫語言標準及其后的發(fā)展稱為是一場革命。 為什麼稱SQL為關系數據庫的標準語言?標準二字含義 答:foxpro語言(locate、replace)只能操作foxpro數據庫,locate、replace等命令只對foxpro數據庫有效,而SQL語言可以操作任意的關系數據庫(SQL SERVER 、ACCESS、FOXPRO、DB2、POWERBUIDER),3. 2.3關系數據庫標準語言SQL,SQL語言動詞共有九個,如下表所示(重點學習前7個):,1 1)建立數據庫命令(補充,書上沒有) 格式: CREATE DATABASE 例: CREATE DATABASE D:SCDATABASE (在D盤根目錄下建立了一個空的數據庫SCDATABASE),說明: 各種符號的含義跟foxpro命令一樣 必選項 可選項 項的延續(xù) 數據類型: 不同的數據庫系統(tǒng)有自己的數據類型規(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 該課程學分,整型,上機試驗:,請你根據所學過的SQL命令,在FOXPRO環(huán)境下建立一個FOXPRO型數據庫:學生課程數據庫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表增加“入學時間”列,其數據類型為日期型。 Alter table student ADD Scome DATE 例:刪除Student表的 “入學時間”列,其數據類型為日期型。 Alter table student DROP COLUMN Scome,3. 刪除基本表 格式: DROP TABLE 例:刪除Student表 Drop table Student,3. 2.3關系數據庫標準語言SQL,4.插入數據 格式: INTO子句中沒有出現的屬性列,新記錄在該列上將取空值 如果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子句中沒有出現的屬性列,新記錄在該列上將取空值,上機試驗:請你根據所學過的SQL命令,在建立的學生課程數據庫SCDATABASE中錄入如下數據:,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“,“數據庫“,“5“,4) INSERT INTO course VALUES(“2“,“數學“,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“,“數據結構“,“7“,4) INSERT INTO course VALUES(“6“,“數據處理“, 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.修改數據 格式: UPDATE SET =,= WHERE 例:update student set sage=22 where sno=“95001“ 例:update student set sage=sage+1 解釋上兩條語句完成了怎樣的功能 6.刪除數據 格式: DELETE FROM WHERE 例:delete from student where sno=“95004“ 解釋該語句完成了怎樣的功能,3. 2.3關系數據庫標準語言SQL,7.數據查詢(核心語句,功能強大) 格式: SELECT ALL | DISTINCT ,FROM , WHERE GROUP By HAVING ORDER BYASC | DESC 必選項 可選項 項的延續(xù) | 任選其一,SELECT * FROM Student;,單表查詢,一、選擇表中若干列 查詢指定列:在中指定預查屬性 查詢全部列:在中使用* 查詢經計算的值:在中可使用常量、表達式、函數等,SELECT Sname,“Year of Birth is“,2010-sage,LOWER(sdept) FROM Student ;,SELECT Sno, Sname FROM Student;,查詢實例,結果為: 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 例: 查詢選修了課程的學生學號 結果為 : 結果為: 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)、數學系(MA)和計算機系(CS)學生的姓名和性別,SELECT Sname, Ssex FROM Student WHERE Sdept NOT IN (IS,MA,CS),例 查詢除信息系(IS)、數學系(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 表示為轉義換碼字符,緊跟其后的_不再具有通配符的含義, 轉義為普通_字符,SELECT Cno, CCredit FROM Course WHERE Cname LIKE DB_DESIGN,例 所有以”DB”開頭,中間為任意一個字符,結尾”DESIGN”課程的課程號和學分,Where子句涉及空值的查詢,SELECT Sno, Cno FROM SC WHERE Grade IS NULL;,SELECT Sno, Cno FROM SC WHERE Grade IS NOT NULL;,例:某些學生選修課程后沒有參加考試,所以有選修課記錄,但沒有考試成績。查詢缺少成績的學生的學號和相應的課程號:,例 查詢所有有成績的學生學號和課程號,注意這里的“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)、數學系(MA)和計算機系(CS)學生的姓名和性別,練習,關系:圖書(書號,書名,作者,出版社,單價) BOOK(Bno, Bname, Author, Press, Price) 查詢“數據庫”一書的書號和單價 查詢單價在20至50元之間的圖書信息 查詢北京某出版社出版的圖書信息 查詢作者是張一,王二,劉三的書的信息 查詢所有圖書的書號,書名和半價信息 查詢缺少出版社信息的圖書的書號和書名,三、對查詢結果排序,SELECT Sno, Grade FROM SC WHERE Cno = 3 ORDER BY Grade DESC;,SELECT * FROM Student ORDER BY Sdept, Sage DESC;,例 查詢選修了3號課程的學生的學號及其成績,查詢結果按分數的降序排列,例 查詢全體學生情況,查詢結果按所在系的系號升序排列,同一系中的學生按年齡降序排列(見示例),ORDER BY 子句 可對查詢結果按照一個或多個屬性列的升序(ASC)或降序(DESC)排列,缺省值為升序,四、使用集函數,實例,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;,例 查詢學生總人數,例 查詢選修了課程的學生人數,例 計算選修了1號課程的學生平均成績,例 查詢選修1號課程的學生最高分數,五、對查詢結果分組,GROUP BY 子句將查詢結果按某一列或多列分組,值相等的為一組。 對查詢結果分組的目的是為了細化集函數的作用對象,分組后每個組都有一個函數值 如果分組后還要求按一定的條件對這些組進行篩選,最終只輸出滿足指定條件的組, 則可以是使用HAVING短語指定篩選條件,分組實例,SELECT Cno, COUNT(Sno) FROM SC GROUP BY Cno;,SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*)3;,例 查詢選修了3門以上課程的學生學號,例 求各個課程號及相應的選課人數,練習,數據庫模式如下: 倉庫(倉庫號,負責人) 貨物(貨物號,貨物名,貨物描述) 入庫記錄(貨物號,倉庫號,數量,入庫日期,經辦人號) 用SQL實現以下查詢要求: 查詢倉庫中有多少種不同的貨物 查詢每天入庫數量的最大值 統(tǒng)計2003年3月20日以后每天入庫的貨物總數量 按貨物號統(tǒng)計每一種貨物在倉庫中的總數量 查詢“A-001”號經辦人當日經辦的入庫記錄數,SELECT COUNT(*) FROM 貨物; 或 SELECT COUNT(DISTINCT 貨物號) FROM 入庫記錄;,SELECT入庫日期, MAX(數量) FROM 入庫記錄 GROUP BY 入庫日期;,SELECT入庫日期, SUM(數量) FROM 入庫記錄 GROUP BY 入庫日期 HAVING 入庫日期 “2003/03/20”;,SELECT 貨物號,SUM(數量) FROM 入庫記錄 GROUP BY 貨物號;,SELECT COUNT(*) FROM 入庫記錄 WHERE入庫日期=Today() GROUP BY 經辦人號 HAVING 經辦人號 = “A-001”;,連接查詢,連接(Join)查詢 查詢涉及兩個以上的表(在FROM子句中體現) From 子句 對應于關系代數中笛卡兒乘積運算, 它給出待掃描的關系/表(指定多個表), WHERE子句給出連接條件,連接查詢,連接條件的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)再造中的戰(zhàn)略與風險考量試題及答案
- 高考數學學習成績提升試題及答案
- 網絡管理員考試基礎建設試題及答案
- 成就未來2025年法學概論考試試題及答案
- 多角度分析法學概論試題及答案
- 軟件質量保證最佳實踐試題及答案
- VB考試策略試題及答案
- 全面提升VB能力的試題及答案
- 2025年軟件考試知識要點
- 軟考網絡管理員考試專業(yè)水平提升及試題答案
- 人教版八年級英語下冊導學案(全冊 共10個單元)
- 2025年新高考全國Ⅰ卷英語模擬試卷(含答案)
- 樓體字施工方案
- 臨時活動咖啡機租賃合同
- 山東省濟南市東南片區(qū)2024-2025學年八年級(上)期中物理試卷(含答案)
- 大部分分校:地域文化形考任務三-國開(CQ)-國開期末復習資料
- 【MOOC】模擬電子電路實驗-東南大學 中國大學慕課MOOC答案
- 信息光學知到智慧樹章節(jié)測試課后答案2024年秋華南農業(yè)大學
- 【MOOC】機械制圖-河北工程大學 中國大學慕課MOOC答案
- 2023年上海市浦東新區(qū)中考語文二模試卷
- 小學數學跨學科學習的實踐挑戰(zhàn)及突破策略
評論
0/150
提交評論