軟件開發(fā)技術(shù)數(shù)據(jù)庫復(fù)習(xí)PPT課件
數(shù)據(jù)庫設(shè)計(jì)過程E/RE/R圖到關(guān)圖到關(guān)系模式的系模式的轉(zhuǎn)換轉(zhuǎn)換關(guān)系模式關(guān)系模式的規(guī)范化的規(guī)范化需求分析需求分析概念模式設(shè)計(jì)概念模式設(shè)計(jì)邏輯模式設(shè)計(jì)邏輯模式設(shè)計(jì)數(shù)據(jù)庫實(shí)施數(shù)據(jù)庫實(shí)施E/RE/R圖圖UMLUMLRDBMSRDBMS模式模式存儲模式存儲模式數(shù)據(jù)庫運(yùn)行和維護(hù)數(shù)據(jù)庫運(yùn)行和維護(hù)第1頁/共57頁概念模式設(shè)計(jì)概念模式設(shè)計(jì)ER圖圖實(shí)體聯(lián)系模型(實(shí)體聯(lián)系模型(Entity-Relationship Model,簡稱,簡稱E-R模型)模型)第2頁/共57頁E-R模型的基本概念模型的基本概念 實(shí)體實(shí)體(entity):客觀存在,可以相互區(qū)別的事物稱為實(shí)體。:客觀存在,可以相互區(qū)別的事物稱為實(shí)體。 實(shí)體集實(shí)體集(entity set):性質(zhì)相同的同類實(shí)體的集合,稱實(shí)體集。:性質(zhì)相同的同類實(shí)體的集合,稱實(shí)體集。 屬性屬性(attribute):實(shí)體有很多特性,每一個(gè)特性稱為屬性。每:實(shí)體有很多特性,每一個(gè)特性稱為屬性。每一個(gè)屬性有一個(gè)值域,其類型可以是整數(shù)型、實(shí)數(shù)型、字符串型一個(gè)屬性有一個(gè)值域,其類型可以是整數(shù)型、實(shí)數(shù)型、字符串型等。等。 實(shí)體標(biāo)識符實(shí)體標(biāo)識符(identifier):能惟一標(biāo)識實(shí)體的屬性或?qū)傩约?,稱:能惟一標(biāo)識實(shí)體的屬性或?qū)傩约?,稱 為實(shí)體標(biāo)識符。有時(shí)也稱為關(guān)鍵碼為實(shí)體標(biāo)識符。有時(shí)也稱為關(guān)鍵碼(key),或簡稱為,或簡稱為鍵鍵。 聯(lián)系聯(lián)系(relationship)是實(shí)體之間的相互關(guān)系。是實(shí)體之間的相互關(guān)系。 數(shù)據(jù)模型數(shù)據(jù)模型: 能表示實(shí)體類型及實(shí)體間聯(lián)系的模型稱為能表示實(shí)體類型及實(shí)體間聯(lián)系的模型稱為“數(shù)據(jù)模數(shù)據(jù)模型型”。 第3頁/共57頁E-R圖的基本組成部分圖的基本組成部分 E/RE/R圖有四個(gè)主要部分:圖有四個(gè)主要部分:(1 1)實(shí)體集,用矩形表示。)實(shí)體集,用矩形表示。(2 2)屬性,用橢圓形表示。)屬性,用橢圓形表示。(3 3)聯(lián)系,用菱形表示。)聯(lián)系,用菱形表示。(4 4)直線,表示聯(lián)系的類型及實(shí)體與實(shí)體之間的聯(lián)系;)直線,表示聯(lián)系的類型及實(shí)體與實(shí)體之間的聯(lián)系;第4頁/共57頁數(shù)據(jù)聯(lián)系數(shù)據(jù)聯(lián)系 聯(lián)系(聯(lián)系(relationshiprelationship)是實(shí)體之間的相互關(guān)系。)是實(shí)體之間的相互關(guān)系。 二元聯(lián)系有以下三種類型:二元聯(lián)系有以下三種類型:一對一聯(lián)系一對一聯(lián)系:實(shí)體集:實(shí)體集E1E1中每個(gè)實(shí)體至多和實(shí)體集中每個(gè)實(shí)體至多和實(shí)體集E2E2中中的一個(gè)實(shí)體有聯(lián)系,反之亦然,那么實(shí)體集的一個(gè)實(shí)體有聯(lián)系,反之亦然,那么實(shí)體集E1E1和和E2E2的的聯(lián)系稱為聯(lián)系稱為“一對一聯(lián)系一對一聯(lián)系”,記為,記為“1:11:1”。一對多聯(lián)系一對多聯(lián)系:實(shí)體集:實(shí)體集E1E1中每個(gè)實(shí)體可以與實(shí)體集中每個(gè)實(shí)體可以與實(shí)體集E2E2中中任意個(gè)(零個(gè)或多個(gè))實(shí)體間有聯(lián)系,而任意個(gè)(零個(gè)或多個(gè))實(shí)體間有聯(lián)系,而E2E2中每個(gè)實(shí)中每個(gè)實(shí)體至多和體至多和E1E1中一個(gè)實(shí)體有聯(lián)系,那么稱中一個(gè)實(shí)體有聯(lián)系,那么稱E1E1對對E2E2的聯(lián)系的聯(lián)系是是“一對多聯(lián)系一對多聯(lián)系”,記為,記為“1:N1:N”。 多對多聯(lián)系多對多聯(lián)系:如果實(shí)體集:如果實(shí)體集E1E1中每個(gè)實(shí)體可以與實(shí)體集中每個(gè)實(shí)體可以與實(shí)體集E2E2中任意個(gè)(零個(gè)或多個(gè))實(shí)體有聯(lián)系,反之亦然,中任意個(gè)(零個(gè)或多個(gè))實(shí)體有聯(lián)系,反之亦然,那么稱那么稱E1E1和和E2E2的聯(lián)系是的聯(lián)系是“多對多聯(lián)系多對多聯(lián)系”,記為,記為“M:NM:N”。 第5頁/共57頁三種聯(lián)系的三種聯(lián)系的E-R圖圖實(shí)體實(shí)體1 1實(shí)體實(shí)體2 2聯(lián)系聯(lián)系實(shí)體實(shí)體1 1實(shí)體實(shí)體2 2聯(lián)系聯(lián)系實(shí)體實(shí)體1 1實(shí)體實(shí)體2 2聯(lián)系聯(lián)系 1 11 1聯(lián)系聯(lián)系 1 1n n聯(lián)系聯(lián)系 m mn n聯(lián)系聯(lián)系第6頁/共57頁三種聯(lián)系的三種聯(lián)系的E-R圖圖客人客人飛機(jī)座位飛機(jī)座位號號聯(lián)系聯(lián)系院系院系教師教師聯(lián)系聯(lián)系課程課程學(xué)生學(xué)生聯(lián)系聯(lián)系 1 11 1聯(lián)系聯(lián)系 1 1n n聯(lián)系聯(lián)系 m mn n聯(lián)系聯(lián)系第7頁/共57頁E-R圖實(shí)例圖實(shí)例例:設(shè)計(jì)一個(gè)學(xué)生選課數(shù)據(jù)庫。要求包括學(xué)生例:設(shè)計(jì)一個(gè)學(xué)生選課數(shù)據(jù)庫。要求包括學(xué)生(student)(student)、課程、課程(course)(course)和教師和教師(teacher)(teacher)的信息。的信息。 實(shí)體中存在如下聯(lián)系:實(shí)體中存在如下聯(lián)系: 一個(gè)學(xué)生可以選修多門課,而每門課也能由多個(gè)學(xué)生選修;一個(gè)學(xué)生可以選修多門課,而每門課也能由多個(gè)學(xué)生選修;一位教師可以教多門課,每門課也可以由多個(gè)教師講授;用一位教師可以教多門課,每門課也可以由多個(gè)教師講授;用E-RE-R圖來描述此數(shù)據(jù)庫。圖來描述此數(shù)據(jù)庫。 學(xué)生信息:學(xué)號(sNo)、學(xué)生姓名(sName)、年齡(age)、地址(sAddress)課程信息:課程號(cNo)、課程名(cName)、課程學(xué)分(credit)教師信息:工號(tNo)、姓名(tName)、教師的地址(tAddress)第8頁/共57頁學(xué)生學(xué)生-課程課程-教師教師E-R圖圖studentcourseteachertaketeachcreditscNamecNumsAddressagesNamesNotAddresstNametNoscore注意:如果一個(gè)聯(lián)系具有屬性,則這些屬性也與該注意:如果一個(gè)聯(lián)系具有屬性,則這些屬性也與該聯(lián)系連接起來。聯(lián)系連接起來。TeachCourseNo第9頁/共57頁概念模式設(shè)計(jì)概念模式設(shè)計(jì)UML從用例圖分析出對象StudentStudentstudentNostudentNostudentNamestudentNamesexsexdepartmentIddepartmentIdmajormajor第10頁/共57頁概念模式設(shè)計(jì)概念模式設(shè)計(jì)UMLTeacherteacherIdteacherNamesex對象之間的關(guān)系DepartmentDepartmentIddeptNamelocation工作第11頁/共57頁概念模式設(shè)計(jì)概念模式設(shè)計(jì)UML對象之間的關(guān)系分類一元關(guān)系第12頁/共57頁概念模式設(shè)計(jì)概念模式設(shè)計(jì)UMLTeacherteacherIdteacherNamesex對象之間的關(guān)系分類DepartmentDepartmentIddeptNamelocation工作二元關(guān)系第13頁/共57頁概念模式設(shè)計(jì)概念模式設(shè)計(jì)UMLTeacherteacherIdteacherNamesex關(guān)系的重?cái)?shù)DepartmentDepartmentIddeptNamelocation1.n1重?cái)?shù)1.n重?cái)?shù)1第14頁/共57頁概念模式設(shè)計(jì)概念模式設(shè)計(jì)UML關(guān)聯(lián)2個(gè)對象關(guān)聯(lián)產(chǎn)生屬性第15頁/共57頁關(guān)系模型的結(jié)構(gòu)關(guān)系模型的結(jié)構(gòu) - - 數(shù)據(jù)模型三要素之一數(shù)據(jù)模型三要素之一 一個(gè)關(guān)系的邏輯結(jié)構(gòu)是一張二維表,它由行和列組成。一個(gè)關(guān)系的邏輯結(jié)構(gòu)是一張二維表,它由行和列組成。關(guān)關(guān)系系關(guān)系名關(guān)系名第16頁/共57頁l 元組元組:表中的一行即為一個(gè)元組或記錄;:表中的一行即為一個(gè)元組或記錄;l 字段字段:表中的一列,列值稱為字段值,列名稱為字段名:表中的一列,列值稱為字段值,列名稱為字段名l 值域值域:字段值的取值范圍:字段值的取值范圍元組元組 ( (記錄)記錄)屬性屬性 ( (字段字段) )第17頁/共57頁l主鍵主鍵:能唯一標(biāo)識一個(gè)元組的屬性集合。:能唯一標(biāo)識一個(gè)元組的屬性集合。l外鍵外鍵:若屬性組:若屬性組F F不是關(guān)系不是關(guān)系R1R1的主鍵,但它是關(guān)系的主鍵,但它是關(guān)系R2R2的主的主 鍵,則鍵,則F F稱是關(guān)系稱是關(guān)系R1R1的外鍵。的外鍵。主鍵主鍵主鍵主鍵外鍵外鍵第18頁/共57頁關(guān)系的完整性關(guān)系的完整性域完整性域完整性 實(shí)體完整性實(shí)體完整性 參照完整性參照完整性 第19頁/共57頁1)第一范式)第一范式(First Normal Form,1NF) 定義:定義: 如果一個(gè)關(guān)系模式如果一個(gè)關(guān)系模式R的所有屬性都是不可分的基的所有屬性都是不可分的基 本本 數(shù)據(jù)項(xiàng),則關(guān)系數(shù)據(jù)項(xiàng),則關(guān)系R屬于第一范式。屬于第一范式。p第20頁/共57頁2)第二范式)第二范式( Second Normal Form,2NF ) 定義:定義:若關(guān)系模式若關(guān)系模式R屬于第一范式,且每個(gè)非主屬性都完屬于第一范式,且每個(gè)非主屬性都完 全函數(shù)依賴于主鍵,全函數(shù)依賴于主鍵,則則R屬于第二范式屬于第二范式。t第21頁/共57頁3 3)第三范式)第三范式定義:定義:如果一個(gè)關(guān)系如果一個(gè)關(guān)系R是第二范式的,并且每個(gè)非主是第二范式的,并且每個(gè)非主屬性屬性 都不傳遞依賴于主鍵,則都不傳遞依賴于主鍵,則R屬于第三范屬于第三范式。式。 第22頁/共57頁4 4、E-R(UML)E-R(UML)模型到關(guān)系模式的轉(zhuǎn)換模型到關(guān)系模式的轉(zhuǎn)換1)實(shí)體)實(shí)體(對象對象)到關(guān)系模式的轉(zhuǎn)換到關(guān)系模式的轉(zhuǎn)換2)聯(lián)系)聯(lián)系(關(guān)系關(guān)系)到關(guān)系模式的轉(zhuǎn)換到關(guān)系模式的轉(zhuǎn)換第23頁/共57頁1)實(shí)體到關(guān)系模式的轉(zhuǎn)換)實(shí)體到關(guān)系模式的轉(zhuǎn)換 規(guī)則:規(guī)則:將實(shí)體的名稱作為關(guān)將實(shí)體的名稱作為關(guān)系的名稱,將實(shí)體系的名稱,將實(shí)體的屬性作為關(guān)系的的屬性作為關(guān)系的屬性,并用下劃線屬性,并用下劃線標(biāo)識出主屬性。標(biāo)識出主屬性。 studentstudentcoursecoursetaketakesNosNosnamesnamesaddresssaddressageage cNocNo cnamecnamecreditscreditsgradegradestudent(sNo,sName,sex,age),表示student關(guān)系,其中sNo為主鍵。course(cNo,cName,credits),表示course關(guān)系,其中cNo為主鍵。第24頁/共57頁2)聯(lián)系到關(guān)系模式的轉(zhuǎn)換)聯(lián)系到關(guān)系模式的轉(zhuǎn)換 1:1 若實(shí)體間聯(lián)系是若實(shí)體間聯(lián)系是1:11:1,可以在兩個(gè)實(shí)體轉(zhuǎn)換成的兩個(gè),可以在兩個(gè)實(shí)體轉(zhuǎn)換成的兩個(gè)關(guān)系模式后,然后在其中任意一個(gè)關(guān)系模式的屬性集中關(guān)系模式后,然后在其中任意一個(gè)關(guān)系模式的屬性集中加入另一個(gè)關(guān)系模式的主鍵和聯(lián)系自身的屬性。加入另一個(gè)關(guān)系模式的主鍵和聯(lián)系自身的屬性。 也就也就是說是說1:11:1聯(lián)系不單獨(dú)轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系。聯(lián)系不單獨(dú)轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系。第25頁/共57頁2)聯(lián)系到關(guān)系模式的轉(zhuǎn)換)聯(lián)系到關(guān)系模式的轉(zhuǎn)換 1:N 若實(shí)體間聯(lián)系是若實(shí)體間聯(lián)系是1:N1:N,則在,則在N N端實(shí)體轉(zhuǎn)換成的關(guān)端實(shí)體轉(zhuǎn)換成的關(guān)系模式中加入系模式中加入1 1端實(shí)體的主鍵和聯(lián)系的屬性。端實(shí)體的主鍵和聯(lián)系的屬性。 同樣同樣1:N1:N聯(lián)系也不獨(dú)立構(gòu)成一個(gè)關(guān)系。聯(lián)系也不獨(dú)立構(gòu)成一個(gè)關(guān)系。TeacherteacherIdteacherNamesexDepartmentDepartmentIddeptNamelocation工作二元關(guān)系第26頁/共57頁2)聯(lián)系到關(guān)系模式的轉(zhuǎn)換)聯(lián)系到關(guān)系模式的轉(zhuǎn)換 M:N若實(shí)體間聯(lián)系是若實(shí)體間聯(lián)系是M:NM:N,則將聯(lián)系轉(zhuǎn)換成一個(gè)關(guān)系模式,其屬性為兩端實(shí)體的主鍵加,則將聯(lián)系轉(zhuǎn)換成一個(gè)關(guān)系模式,其屬性為兩端實(shí)體的主鍵加上聯(lián)系自身的屬性,而聯(lián)系關(guān)系的主鍵為一復(fù)合鍵,通常是兩端實(shí)體主鍵的組合。上聯(lián)系自身的屬性,而聯(lián)系關(guān)系的主鍵為一復(fù)合鍵,通常是兩端實(shí)體主鍵的組合。 第27頁/共57頁對于對于“學(xué)生選課學(xué)生選課”E/R圖的課程圖的課程和學(xué)生之間的多對多的聯(lián)系,和學(xué)生之間的多對多的聯(lián)系,可轉(zhuǎn)換成關(guān)系模式:可轉(zhuǎn)換成關(guān)系模式: take(sNo,cNo,grade) 主鍵為復(fù)合鍵主鍵為復(fù)合鍵sNo,cNo。 studentstudentcoursecoursetaketakesNosNosnamesnamesaddresssaddressageage cNocNo cnamecnamecreditscreditsgradegrade例:例:第28頁/共57頁關(guān)系數(shù)據(jù)庫的組織表1表2表3DBColumn or FieldRecord第29頁/共57頁SQL 2000SQL 2000字段類型Char varchar int dateTime第30頁/共57頁字段的屬性 請與Insertq 字段長度 對于字符類型,例如char和varchar,定義字段的同時(shí)可以 指 定 字 段 存 放 的 字 符 的 個(gè) 數(shù) , 例 如 定 義 姓 名 字 段 為 n a m e varchar(20),表示該字段最多存放20個(gè)字符。數(shù)值型的字段,除了decimal由用戶自己定義長度和小數(shù)位數(shù)外,其他的如int, float等,系統(tǒng)自定義其占用的字節(jié)數(shù)。q 小數(shù)位數(shù) 用于decimal和貨幣類型的字段q 標(biāo)識種子 用于數(shù)據(jù)庫表的記錄號的自動(dòng)增加,經(jīng)常用于做表中記錄的主鍵。用于整型數(shù)值.q 默認(rèn)值 當(dāng)表中新增加一個(gè)記錄時(shí),又不想具體指定某個(gè)字段的值??梢越o它一個(gè)默認(rèn)的值。q 非空限制 用于限制字段的值不能為空,例如學(xué)生的姓名字段,每一個(gè)記錄都必須有值,因?yàn)閷W(xué)生不能沒有名字。q 索引 對字段進(jìn)行索引,可以通過設(shè)定該字段為查詢條件來加快數(shù)據(jù)的檢索速度和統(tǒng)計(jì)、分組的速度。q 關(guān)鍵字 關(guān)系模式中的主鍵,用于唯一標(biāo)識數(shù)據(jù)庫表中的記錄。第31頁/共57頁簡單的SQL 查詢語句 Select SELECT 字段1,字段2,| * FROM 表名 WHERE 條件表達(dá)式第32頁/共57頁結(jié)構(gòu)化查詢語言SQLSQLSQL語言是一種關(guān)系數(shù)據(jù)庫語言,是結(jié)構(gòu)化查詢語言(Structured Query Language)的縮寫,它包括q 查詢q 定義q 操縱q 控制SQL的使用方法有兩種q 用戶交互的方式聯(lián)機(jī)使用,稱為交互式SQL;q 另一種是作為子語言嵌入到其他程序設(shè)計(jì)語言中使用,稱為嵌入式SQL。第33頁/共57頁SQL表達(dá)式SQL的表達(dá)式可分為兩類:1. 值表達(dá)式2. 邏輯表達(dá)式。值表達(dá)式包括幾種:1. 數(shù)值表達(dá)式:實(shí)現(xiàn)數(shù)值型數(shù)據(jù)的算術(shù)運(yùn)算;2. 字串值表達(dá)式完成了字串的操作;3. 日期時(shí)間值表達(dá)式處理日期時(shí)間數(shù)據(jù)。邏輯運(yùn)算包括與(AND)、或(OR)、否(NOT)。SQL還提供了比較謂詞(=、!=、=)、范圍謂詞(IN、LIKE、IS)和存在謂詞(EXIST)。第34頁/共57頁函數(shù)SQL內(nèi)置函數(shù)有三類:1. 統(tǒng)計(jì)函數(shù):COUNT、SUM、AVG、MAX和MIN2. 字串處理函數(shù) len, substring(studentName,1,2)大小寫轉(zhuǎn)換函數(shù)(Upper,Lower)3. 時(shí)間日期處理函數(shù)。 時(shí)間日期處理函數(shù)用于返回當(dāng)前的日期與時(shí)間。常用的有三個(gè):getDate (返回當(dāng)前日期時(shí)間)。Year, Month, Day函數(shù)第35頁/共57頁數(shù)據(jù)檢索語句select 語法格式為: SELECT ALL|DISTINCT 目標(biāo)列FROM 基本表 (或視圖)as 表別名WHERE 條件表達(dá)式GROUP BY 列名 HAVING 條件表達(dá)式ORDER BY 列名 ASC/DESC說明 DISTINCT為去掉查詢結(jié)果中重復(fù)的行,默認(rèn)為ALL,既列出所有的記錄;目標(biāo)列的格式可以寫為:列名1 as 別名1,列名n as 別名n,省略別名,返回的結(jié)果集中以列名標(biāo)記,否則以別名標(biāo)記,如果目標(biāo)列用*表示,則返回表中的所有的列;From子句指明了從那些表或視圖中得到數(shù)據(jù),所有的列名都必須存在于From后的表中,或出現(xiàn)于left join, inner join, full outer join之后的表,如果列名存在于From后的多個(gè)表中,則必須標(biāo)明該列來源于哪個(gè)表,格式為 表名.列名;目標(biāo)列可以是SQL中的庫函數(shù)或常數(shù)表達(dá)式。如Sum、Count、Avg等函數(shù)。第36頁/共57頁Select 語句Where 子句有雙重作用,一是返回需要的記錄,另一種是建立多表之間的內(nèi)連接聯(lián)合查詢。 GROUP BY 用來對查詢結(jié)果進(jìn)行分組,把某一列值相同的記錄分成一組,與統(tǒng)計(jì)函數(shù)如Sum、Count等聯(lián)合使用;在有Group子句時(shí),可以進(jìn)一步使用HAVING子句對分組后的記過進(jìn)行過濾顯示,是分組提取條件;ORDER BY 是查詢結(jié)果的排序方式,后面跟ASC為升序,DESC為降序,默認(rèn)為升序。第37頁/共57頁關(guān)系實(shí)例studentNonamebirthdaysexcourseNocourseNamestudentNocourseNoscore030318古待1986-1-2女S01高數(shù)一020301F0998020301張名1989-1-1男L02數(shù)值算法010101L0278010201張簡1981-2-2女J04操作系統(tǒng)010101J0489030501許昌1987-9-8男F09德語010201J0179030502劉放1988-1-9男F01日語010101J0491010101李燦1981-9-2男J01數(shù)據(jù)庫010101J0199010503顧爭1988-2-7男020002郭潔1988-1-5女學(xué)生表 tblStudent 課程表tblCourse 學(xué)生修課表 tblSelectCourse第38頁/共57頁SQL例例1 1:查看學(xué)生表中的全部數(shù)據(jù),即列出所有的學(xué)生Select * from tblStudent這里 * 代表表中所有的列,上述的語句等價(jià)如下的語句:Select studentNo, studentName, birthday, sex From tblStudent這時(shí),表中有多少條記錄,數(shù)據(jù)庫系統(tǒng)就列出多少條記錄。第39頁/共57頁Where子句子 例2:查詢學(xué)生表tblStudent中的全部女生的學(xué)號、姓名和年齡Select studentNo, studentName, birthdayfrom tblStudent where sex=女 例3: 查詢學(xué)生修課表中成績大于80分的學(xué)生:Select * from tblSelectCourse where score80在where條件中,可以使用邏輯運(yùn)算符和比較關(guān)系符,包括:=、!=、=。也可以使用關(guān)鍵字,如:between、like、in等。注意,如果值是字符串或者字符、日期類型的,就要用單引號把它括起來,例如例2中的where條件。 例4 查詢操作系統(tǒng)成績在70到80之間的學(xué)生的學(xué)號select studentNo from tblSelectCourse where score between 70 and 80 and courseNo=J003第40頁/共57頁日期型數(shù)據(jù)處理 羅列出每個(gè)同學(xué)的年齡現(xiàn)在有了生日,當(dāng)前日期可以用getDate()函數(shù)獲得,日期型字段的年份可以用Year函數(shù)獲得Select year(getDate()- year(birthday)From tblStudent第41頁/共57頁order by 子句 例5:查詢02級學(xué)生的選課信息,按學(xué)號從小到大排列。由于學(xué)號的頭兩位代表學(xué)生的年級,所以可以這么完成SQL語句的編寫:Select studentNo,courseNofrom tblSelectCourse where studentNo like 02% order by studentNo這里%代表任意個(gè)字符。第42頁/共57頁group by 和Having子句 例6:求每個(gè)學(xué)生的課程總分(大于260分的同學(xué)羅列)Select sc.studentNo, studentName, sum(score) as totfrom tblSelectCourse sc, tblStudent s where s.studentNo=sc.studentNo g ro u p b y s c . s t u d e n t N o , s t u d e n t N a m e h a v i n g sum(score) 260改為 having tot 260 對不對?例7:列出選修課程大于等于三門課程的學(xué)生,并按學(xué)號排序select s.studentName,sc.studentNo, count(*) as courses from tblStudent s, tblSelectCourse sc where sc.studentNo=s.studentNo group by sc.studentNo, s.studentName having count(*)=3 order by sc.studentNo第43頁/共57頁內(nèi)連接查詢 例8 查找軟件開發(fā)課程成績在80分以上的學(xué)生的姓名、學(xué)號、年齡以及具體成績。分析:直接觀察表tblSelectCourse和tblStudent,可以發(fā)現(xiàn),通過tblSelectCourse可以得到學(xué)生的學(xué)號,但無法得到學(xué)生的名字和年齡,但缺少的信息可以通過表tblStudent得到,表tblStudent和tblSelectCourse的studentNo如果統(tǒng)一起來,就可以唯一得到所需要的信息 S e l e c t s . s t u d e n t N o , s t u d e n t N a m e , year(getDate()-year(birthday), score from tblStudent s, tblSelectCourse sc where s.studentNo=sc.studentNo and courseNo=J001 and score80第44頁/共57頁例8的另外的寫法Select s.studentNo, studentName, birthday, score from tblStudent sinner join tblSelectCourse sc on s.studentNo=sc.studentNo where courseNo=J001 and score80第45頁/共57頁嵌套查詢 例9:找出成績(不分課程)大于80分的學(xué)生的姓名Select studentName from tblStudent where studentNo in (select studentNo from tblSelectCourse where score80)這 里 , s e l e c t s t u d e n t N o f ro m s c w h e re score80返回一個(gè)集合,第二個(gè)查詢使用In關(guān)鍵字,判定表S中的studentNo是否在返回結(jié)果集中。第46頁/共57頁左連接查詢問題:班主任查詢班級學(xué)生某門課的成績表,如果一個(gè)學(xué)生沒選該課程,用內(nèi)連接查詢能得到什么結(jié)果?studentNonamebirthdaysexcourseNocourseNamestudentNocourseNoscore030318古待1986-1-2女S01高數(shù)一020301F0998020301張名1989-1-1男L02數(shù)值算法010101L0278010201張簡1981-2-2女J04操作系統(tǒng)010101J0489030501許昌1987-9-8男F09德語010201J0179030502劉放1988-1-9男F01日語010101J0491010101李燦1981-9-2男J01數(shù)據(jù)庫010101J0199010503顧爭1988-2-7男020002郭潔1988-1-5女學(xué)生表 tblStudent 課程表tblCourse 學(xué)生修課表 tblSelectCourse第47頁/共57頁左連接 查詢 Left joinSelect studentName, a.studentNo, b.courseNo, courseNameFrom tblStudent aLeft join tblSelectCourse b on (a.studentNo = b.studentNoAnd b.courseNo=F001)Left join tblCourse c on b.courseNo=c.courseNo第48頁/共57頁什么時(shí)候用左連接n 左表在右表中對應(yīng)的記錄可能有,也可能沒有的情況下, 第49頁/共57頁SQL數(shù)據(jù)更新語句 語法數(shù)據(jù)更新語句 Updaten SQL的數(shù)據(jù)更新語句Update修改表中原有的數(shù)據(jù)記錄n 與Select 語句不同,Update語句不存在多表聯(lián)合操作,每個(gè)語句一次只能針對一個(gè)表。Update語法格式為:update 表 set 字段名 = 表達(dá)式, 字段名=表達(dá)式,. where條件第50頁/共57頁Update 例子例 1111:將所有學(xué)生的年齡加1歲update tblStudent set age = age+1update tblStudent set age = age+1 例1212:將學(xué)號為011101的學(xué)生的J01課程成績加5分update tblSelectCourse set score= score+5 update tblSelectCourse set score= score+5 where studentNo=where studentNo=011101011101 and courseNo = and courseNo = J01J01第51頁/共57頁插入新記錄語句 Insert 語法insert intoinsert into 表名(字段名,字段名2) valuesvalues (值1,值2,值n)注:1、不允許為空的字段,并且沒有字段默認(rèn)值的字段,必須出現(xiàn)在字段列表中.2、如果不寫字段名列表,則必須按表結(jié)構(gòu)定義的字段順序,在values后定義值的序列.第52頁/共57頁Insert 舉例例13 向?qū)W生表中插入一個(gè)新同學(xué),數(shù)據(jù)為 0300101, 張三,男,21歲 insert into tblStudent values(030101, 張三, 21, 男)比較下例 insert into tblStudent(studentName, studentNo) values(汪于人, 980145)放棄了性別和年齡的輸入,如果表tblStudent的age和sex字段允許為空,則上面的語句向數(shù)據(jù)庫中插入的記錄中,這兩個(gè)字段的值是Null。如果age和sex有默認(rèn)值,則取默認(rèn)值. 例14 向修課表中插入一個(gè)新的選課記錄,成績暫時(shí)不定 insert into tblSelectCourse(studentNo, courseNo) values(030101, J04)第53頁/共57頁刪除記錄 delete 語法 delete from 表名 where 條件第54頁/共57頁Delete 舉例例15 刪除表tblSelectCourse中011101的德語選課記錄delete from tblSelectCourse where studentNo=010101 and courseNo=F09第55頁/共57頁Sql作業(yè) 寫SQL語句1.將數(shù)據(jù)庫恢復(fù) (自己的準(zhǔn)備工作)2.羅列出所有可選的課程的課程號,課程名。 3.羅列出所有學(xué)生的姓名、學(xué)號,年齡(庫里是生日)。4.羅列出學(xué)號、姓名,所選課程的總分,按總分從大到小次序排列。5.羅列出學(xué)號、姓名、課程號、課程名、成績,按學(xué)號從小到大排列 第56頁/共57頁感謝您的觀看!第57頁/共57頁