




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Page 1計(jì)教中心計(jì)教中心數(shù)據(jù)庫(kù)原理及應(yīng)用數(shù)據(jù)庫(kù)原理及應(yīng)用 2 2 關(guān)系數(shù)據(jù)庫(kù)關(guān)系數(shù)據(jù)庫(kù)姚普選姚普選Page 2內(nèi)內(nèi) 容容 關(guān)系模型關(guān)系模型 關(guān)系及關(guān)系模式關(guān)系及關(guān)系模式 關(guān)系模型的數(shù)據(jù)操作關(guān)系模型的數(shù)據(jù)操作 數(shù)據(jù)完整性約束數(shù)據(jù)完整性約束 關(guān)系代數(shù)關(guān)系代數(shù) 關(guān)系運(yùn)算關(guān)系運(yùn)算 關(guān)系代數(shù)的運(yùn)算種類關(guān)系代數(shù)的運(yùn)算種類 三種關(guān)系運(yùn)算三種關(guān)系運(yùn)算 SQL語(yǔ)言語(yǔ)言 2.1 關(guān)系模型關(guān)系模型關(guān)系模型由三部份組成關(guān)系模型由三部份組成 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)操作數(shù)據(jù)操作、完整性約束完整性約束1.1.關(guān)系模型的數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)的邏輯結(jié)構(gòu)關(guān)系模型的數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)的邏輯結(jié)構(gòu)_ _二維表二維表學(xué)生學(xué)生選修選修課程課程m
2、n概念模型概念模型關(guān)系模式關(guān)系模式表示為表示為 關(guān)系名(屬性名關(guān)系名(屬性名1 1,屬性名,屬性名2 2,屬性名,屬性名n n)例:例:學(xué)生學(xué)生(學(xué)號(hào),姓名,性別,年齡,班級(jí),學(xué)院學(xué)號(hào),姓名,性別,年齡,班級(jí),學(xué)院)注意:注意:l關(guān)系模式關(guān)系模式是是型型(type),描述一個(gè)關(guān)系的結(jié)構(gòu),描述一個(gè)關(guān)系的結(jié)構(gòu)l關(guān)系是值,是元組的集合關(guān)系是值,是元組的集合 描述某一時(shí)刻關(guān)系模式的內(nèi)容描述某一時(shí)刻關(guān)系模式的內(nèi)容l故關(guān)系模式是相對(duì)穩(wěn)定的,靜態(tài)的;故關(guān)系模式是相對(duì)穩(wěn)定的,靜態(tài)的; 而關(guān)系是隨時(shí)間變化的,動(dòng)態(tài)的而關(guān)系是隨時(shí)間變化的,動(dòng)態(tài)的l關(guān)系關(guān)系可用來(lái)表示可用來(lái)表示實(shí)體實(shí)體(如學(xué)生,課程等)(如學(xué)生,課程
3、等) 也可用來(lái)表示也可用來(lái)表示實(shí)體間的聯(lián)系實(shí)體間的聯(lián)系(如選課)(如選課)關(guān)系的性質(zhì)關(guān)系的性質(zhì)l 每列都是不可再分的每列都是不可再分的基本字段基本字段(原子屬性)(原子屬性) 一列中各個(gè)分量具有相同的性質(zhì)和意義;一列中各個(gè)分量具有相同的性質(zhì)和意義;l 列名列名是唯一的(不同不二名)是唯一的(不同不二名)l 行的次序行的次序可任意交換,不會(huì)改變關(guān)系的意義可任意交換,不會(huì)改變關(guān)系的意義l 列的次序列的次序可任意交換,不會(huì)改變關(guān)系的意義可任意交換,不會(huì)改變關(guān)系的意義l 元組代表了一個(gè)實(shí)體元組代表了一個(gè)實(shí)體 因此表中因此表中不允許出現(xiàn)相同的行不允許出現(xiàn)相同的行故,判別兩個(gè)關(guān)系是否相等,與屬性次序、元組
4、次故,判別兩個(gè)關(guān)系是否相等,與屬性次序、元組次序、關(guān)系名均無(wú)關(guān)序、關(guān)系名均無(wú)關(guān)若僅這三點(diǎn)有別,其余完全相同,若僅這三點(diǎn)有別,其余完全相同, 可認(rèn)為兩個(gè)關(guān)系相等可認(rèn)為兩個(gè)關(guān)系相等2.2.關(guān)系模型的數(shù)據(jù)操作關(guān)系模型的數(shù)據(jù)操作l 數(shù)據(jù)操作數(shù)據(jù)操作包括對(duì)包括對(duì)表、行、列表、行、列的操作的操作l 主要操作包括主要操作包括查詢、添加(或插入)、刪除、修改查詢、添加(或插入)、刪除、修改例如:查找來(lái)自于江蘇的例如:查找來(lái)自于江蘇的02級(jí)學(xué)生的信息級(jí)學(xué)生的信息 l 關(guān)系模型的數(shù)據(jù)操作的特點(diǎn)關(guān)系模型的數(shù)據(jù)操作的特點(diǎn):n關(guān)系模型的操作對(duì)象是集合關(guān)系模型的操作對(duì)象是集合 操作對(duì)象和操作結(jié)果都是關(guān)系(表)操作對(duì)象和操
5、作結(jié)果都是關(guān)系(表)n用戶只要指明干什么,而不必考慮怎么干用戶只要指明干什么,而不必考慮怎么干 細(xì)節(jié)由細(xì)節(jié)由DBMS處理處理nSQL語(yǔ)言實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫(kù)操作語(yǔ)言實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫(kù)操作 RDBMS支持支持SQL語(yǔ)言語(yǔ)言3.3.關(guān)系模型的數(shù)據(jù)完整性約束關(guān)系模型的數(shù)據(jù)完整性約束完整性約束:完整性約束:規(guī)定了特定數(shù)據(jù)模型中規(guī)定了特定數(shù)據(jù)模型中 數(shù)據(jù)必須滿足的條件數(shù)據(jù)必須滿足的條件l無(wú)論對(duì)數(shù)據(jù)進(jìn)行什么操作,無(wú)論對(duì)數(shù)據(jù)進(jìn)行什么操作, 其結(jié)果都必須滿足完整性約束的條件其結(jié)果都必須滿足完整性約束的條件l完整性約束的目的:完整性約束的目的: 使對(duì)數(shù)據(jù)的操作能夠正確進(jìn)行使對(duì)數(shù)據(jù)的操作能夠正確進(jìn)行 使數(shù)據(jù)有意義使數(shù)據(jù)有意
6、義例如:例如: 學(xué)號(hào)既不能為空也不能重復(fù)學(xué)號(hào)既不能為空也不能重復(fù) 年齡不大于年齡不大于60歲歲 學(xué)生所屬班級(jí)名稱不能寫成根本不存在的班級(jí)學(xué)生所屬班級(jí)名稱不能寫成根本不存在的班級(jí) 考試成績(jī)是考試成績(jī)是0-100之間的整數(shù)之間的整數(shù)四類完整性約束四類完整性約束實(shí)體完整性,引用完整性,值域完整性,實(shí)體完整性,引用完整性,值域完整性,用戶定義的完整性用戶定義的完整性實(shí)體完整性實(shí)體完整性(EI,Entity Integrity) 強(qiáng)制保證表的主碼的完整性強(qiáng)制保證表的主碼的完整性 通過(guò)主碼實(shí)現(xiàn): 主碼的任一屬性都不能取空值主碼的任一屬性都不能取空值l “空空”(null)指無(wú)值(或不知道)指無(wú)值(或不知道
7、) 0不是不是null。null”null”主碼是區(qū)分各個(gè)實(shí)體和聯(lián)系的惟一標(biāo)識(shí)主碼是區(qū)分各個(gè)實(shí)體和聯(lián)系的惟一標(biāo)識(shí) 為空則意味著可存在不以主碼為標(biāo)識(shí)的實(shí)體,為空則意味著可存在不以主碼為標(biāo)識(shí)的實(shí)體, 與主碼定義矛盾與主碼定義矛盾引用引用( (參照參照) )完整性完整性(RI,Referential Integrity)插入、修改或刪除數(shù)據(jù)時(shí),維護(hù)各表間數(shù)據(jù)一致性插入、修改或刪除數(shù)據(jù)時(shí),維護(hù)各表間數(shù)據(jù)一致性 主要通過(guò)主要通過(guò)主碼與外碼主碼與外碼實(shí)現(xiàn)實(shí)現(xiàn)若二表通過(guò)主碼與外碼建立了聯(lián)系,則:若二表通過(guò)主碼與外碼建立了聯(lián)系,則:l外碼所在表(子表)不能引用主碼所在表(主表)外碼所在表(子表)不能引用主碼所
8、在表(主表)中不存在的數(shù)據(jù)中不存在的數(shù)據(jù)l主表中數(shù)據(jù)變化時(shí),子表中相關(guān)數(shù)據(jù)相應(yīng)變化。反主表中數(shù)據(jù)變化時(shí),子表中相關(guān)數(shù)據(jù)相應(yīng)變化。反之也一樣之也一樣l有時(shí)外碼可取空值。如有時(shí)外碼可取空值。如“學(xué)生學(xué)生”關(guān)系的關(guān)系的“宿舍號(hào)宿舍號(hào)”例:例:“學(xué)生學(xué)生”、“專業(yè)專業(yè)”二實(shí)體表示為關(guān)系二實(shí)體表示為關(guān)系 學(xué)生學(xué)生(學(xué)號(hào)學(xué)號(hào),姓名,性別,專業(yè)號(hào),出生日期),姓名,性別,專業(yè)號(hào),出生日期) 專業(yè)專業(yè)(專業(yè)號(hào)專業(yè)號(hào),專業(yè)名),專業(yè)名)引用完整性引用完整性值域完整性值域完整性(DI,Domain Integrity )限制屬性值的范圍限制屬性值的范圍。例如:。例如: 性別只能是性別只能是”男男”或或”女女”,年
9、齡不大于,年齡不大于30等等 Access中的中的“有效性規(guī)則有效性規(guī)則”: “男男” or “女女” =30 SQL語(yǔ)句的語(yǔ)句的Where子句子句中寫:中寫: 性別性別=“男男” or “女女” 年齡年齡=30屬性值可為空,例如,學(xué)生管理信息系統(tǒng)中,屬性值可為空,例如,學(xué)生管理信息系統(tǒng)中, 新生報(bào)到后要記錄其住宿房號(hào),新生報(bào)到后要記錄其住宿房號(hào), 若該生不在學(xué)校住宿,則宿舍號(hào)可為空若該生不在學(xué)校住宿,則宿舍號(hào)可為空用戶定義的完整性用戶定義的完整性實(shí)現(xiàn)應(yīng)用系統(tǒng)的業(yè)務(wù)規(guī)則實(shí)現(xiàn)應(yīng)用系統(tǒng)的業(yè)務(wù)規(guī)則,由用戶自行定義,由用戶自行定義如:項(xiàng)目書(shū)的名稱必須以如:項(xiàng)目書(shū)的名稱必須以“XM”開(kāi)頭開(kāi)頭 折扣額不能
10、大于銷售額,等等折扣額不能大于銷售額,等等DBMS提供了用戶自定義完整性的手段:提供了用戶自定義完整性的手段:n 約束(約束(constraint)n 標(biāo)識(shí)列(標(biāo)識(shí)列(identity column)n 默認(rèn)值(默認(rèn)值(default)n 規(guī)則(規(guī)則(rule)n 觸發(fā)器(觸發(fā)器(trigger)n 數(shù)據(jù)類型驗(yàn)證(數(shù)據(jù)類型驗(yàn)證(data type)n 索引(索引(index)n 存儲(chǔ)過(guò)程(存儲(chǔ)過(guò)程(stored procedure)Page 13 2.2 關(guān)系代數(shù)關(guān)系代數(shù) 1. 關(guān)系代數(shù)簡(jiǎn)介關(guān)系代數(shù)簡(jiǎn)介關(guān)系模型關(guān)系模型:提供一組完備的關(guān)系運(yùn)算,:提供一組完備的關(guān)系運(yùn)算, 支持關(guān)系數(shù)據(jù)庫(kù)檢索和修
11、改支持關(guān)系數(shù)據(jù)庫(kù)檢索和修改(插入、更新、刪除)(插入、更新、刪除)操作操作關(guān)系運(yùn)算方法分為兩類:關(guān)系運(yùn)算方法分為兩類:關(guān)系代數(shù)關(guān)系代數(shù):關(guān)系數(shù)據(jù)操縱的傳統(tǒng)表達(dá)方式,關(guān)系數(shù)據(jù)操縱的傳統(tǒng)表達(dá)方式, 以集合代數(shù)運(yùn)算方法對(duì)關(guān)系進(jìn)行數(shù)據(jù)操作以集合代數(shù)運(yùn)算方法對(duì)關(guān)系進(jìn)行數(shù)據(jù)操作 以若干個(gè)關(guān)系為運(yùn)算對(duì)象,運(yùn)算結(jié)果產(chǎn)生新關(guān)系以若干個(gè)關(guān)系為運(yùn)算對(duì)象,運(yùn)算結(jié)果產(chǎn)生新關(guān)系關(guān)系演算關(guān)系演算:以謂詞表達(dá)式描述關(guān)系操作的:以謂詞表達(dá)式描述關(guān)系操作的 條件和要求條件和要求Page 14關(guān)系代數(shù)運(yùn)算的種類:關(guān)系代數(shù)運(yùn)算的種類:二元二元二元二元按列按列輔助專門的關(guān)系運(yùn)算輔助專門的關(guān)系運(yùn)算按行按行按行運(yùn)算按行運(yùn)算說(shuō)明說(shuō)明不等于不
12、等于小于等于小于等于大于等于大于等于等于等于小于小于或或與與除除 連接連接投影投影 廣義笛卡爾積廣義笛卡爾積交交差差大于大于比較比較運(yùn)算符運(yùn)算符傳統(tǒng)的傳統(tǒng)的集合集合運(yùn)算符運(yùn)算符并并非非 邏輯邏輯運(yùn)算符運(yùn)算符選擇選擇 專門的專門的關(guān)系關(guān)系運(yùn)算符運(yùn)算符含義含義運(yùn)算符運(yùn)算符Page 152. 關(guān)系運(yùn)算關(guān)系運(yùn)算并運(yùn)算并運(yùn)算:RS 元組屬于元組屬于R或或S 差運(yùn)算差運(yùn)算:R-S 元組屬于元組屬于R交運(yùn)算交運(yùn)算:RS 元組既屬元組既屬R 又屬于又屬于S集合運(yùn)算集合運(yùn)算(按元組按元組)設(shè)關(guān)系設(shè)關(guān)系R、S度度(屬性個(gè)數(shù)屬性個(gè)數(shù))為為n,相應(yīng)屬性值取,相應(yīng)屬性值取自同一個(gè)域自同一個(gè)域Page 16三種關(guān)系運(yùn)算三
13、種關(guān)系運(yùn)算:選擇、投影、連接選擇、投影、連接例例7-4:“學(xué)生學(xué)生”關(guān)系關(guān)系 Access數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)中的“學(xué)生學(xué)生”表表Page 17選擇運(yùn)算:選擇運(yùn)算:按條件從一個(gè)或多個(gè)關(guān)系中按條件從一個(gè)或多個(gè)關(guān)系中 抽取若干個(gè)元組組成新關(guān)系,抽取若干個(gè)元組組成新關(guān)系,新關(guān)系是原關(guān)系的子集。新關(guān)系是原關(guān)系的子集。例如,條件:性別例如,條件:性別= =“女女”Page 18投影運(yùn)算:投影運(yùn)算:從一個(gè)或多個(gè)關(guān)系中從一個(gè)或多個(gè)關(guān)系中 選擇一些屬性組成新關(guān)系,選擇一些屬性組成新關(guān)系, 新關(guān)系是原關(guān)系子集新關(guān)系是原關(guān)系子集 例例:學(xué)生學(xué)生關(guān)系在關(guān)系在學(xué)號(hào)學(xué)號(hào)、姓名姓名、 性別性別、班級(jí)班級(jí)四個(gè)屬性上投影四個(gè)屬性
14、上投影Page 19連接運(yùn)算:連接運(yùn)算:連接運(yùn)算:連接運(yùn)算:將兩個(gè)關(guān)系中滿足條件的元組連接起來(lái)將兩個(gè)關(guān)系中滿足條件的元組連接起來(lái) 組成新關(guān)系組成新關(guān)系等連接:等連接:取兩關(guān)系笛卡爾積中取兩關(guān)系笛卡爾積中A、B屬性值相等的元組屬性值相等的元組R.C=S.TRSPage 20 2.3 SQL語(yǔ)言介紹語(yǔ)言介紹SQL(Structured Query Language,l 結(jié)構(gòu)化查詢語(yǔ)言)結(jié)構(gòu)化查詢語(yǔ)言) ISO命名為國(guó)際標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)語(yǔ)言命名為國(guó)際標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)語(yǔ)言提供了提供了數(shù)據(jù)定義數(shù)據(jù)定義、數(shù)據(jù)查詢數(shù)據(jù)查詢、數(shù)據(jù)操縱數(shù)據(jù)操縱和和數(shù)據(jù)控制數(shù)據(jù)控制語(yǔ)句語(yǔ)句,是一種綜合性的數(shù)據(jù)庫(kù)語(yǔ)言,可獨(dú)立完成,是一種綜合性
15、的數(shù)據(jù)庫(kù)語(yǔ)言,可獨(dú)立完成數(shù)據(jù)庫(kù)生命周期中的全部活動(dòng)數(shù)據(jù)庫(kù)生命周期中的全部活動(dòng)用戶可用戶可直接鍵入直接鍵入SQL命令命令來(lái)操縱數(shù)據(jù)庫(kù),來(lái)操縱數(shù)據(jù)庫(kù), 也可將其也可將其嵌入嵌入高級(jí)語(yǔ)言高級(jí)語(yǔ)言(C、Pascal、Java等)等)程序中使用程序中使用各種各種RDBMS一般都支持一般都支持SQL或提供或提供SQL接口接口。其。其影響已超出數(shù)據(jù)庫(kù)領(lǐng)域,擴(kuò)展到了其他領(lǐng)域影響已超出數(shù)據(jù)庫(kù)領(lǐng)域,擴(kuò)展到了其他領(lǐng)域Page 211. SQL對(duì)關(guān)系數(shù)據(jù)庫(kù)的支持對(duì)關(guān)系數(shù)據(jù)庫(kù)的支持SQL視圖視圖1視圖視圖2基表基表1基表基表2基表基表3基表基表4存儲(chǔ)文件存儲(chǔ)文件1存儲(chǔ)文件存儲(chǔ)文件2外模式外模式模模 式式內(nèi)模式內(nèi)模式從從
16、DBMS的角度看,數(shù)據(jù)庫(kù)系統(tǒng)有一個(gè)嚴(yán)謹(jǐn)?shù)捏w系的角度看,數(shù)據(jù)庫(kù)系統(tǒng)有一個(gè)嚴(yán)謹(jǐn)?shù)捏w系結(jié)構(gòu),從而保證其功能得以實(shí)現(xiàn)結(jié)構(gòu),從而保證其功能得以實(shí)現(xiàn) SQL語(yǔ)言支持三級(jí)模式結(jié)構(gòu)語(yǔ)言支持三級(jí)模式結(jié)構(gòu)Page 22說(shuō)明:說(shuō)明:由由基表基表構(gòu)成關(guān)系數(shù)據(jù)庫(kù)的構(gòu)成關(guān)系數(shù)據(jù)庫(kù)的“模式模式” 基表是實(shí)際的表,一個(gè)基對(duì)應(yīng)一個(gè)關(guān)系;基表是實(shí)際的表,一個(gè)基對(duì)應(yīng)一個(gè)關(guān)系; 一個(gè)或多個(gè)表對(duì)應(yīng)一個(gè)存儲(chǔ)文件;一個(gè)或多個(gè)表對(duì)應(yīng)一個(gè)存儲(chǔ)文件;存儲(chǔ)文件的邏輯結(jié)構(gòu)組成關(guān)系數(shù)據(jù)庫(kù)內(nèi)模式;存儲(chǔ)文件的邏輯結(jié)構(gòu)組成關(guān)系數(shù)據(jù)庫(kù)內(nèi)模式;視圖是從一個(gè)或多個(gè)表中導(dǎo)出的表,為虛表,視圖是從一個(gè)或多個(gè)表中導(dǎo)出的表,為虛表, 數(shù)據(jù)庫(kù)只存放其定義而數(shù)據(jù)仍在原表中數(shù)
17、據(jù)庫(kù)只存放其定義而數(shù)據(jù)仍在原表中視圖和基表都是關(guān)系視圖和基表都是關(guān)系用戶使用用戶使用SQL語(yǔ)言對(duì)基表和視圖進(jìn)行查詢、語(yǔ)言對(duì)基表和視圖進(jìn)行查詢、 更新等各種操作更新等各種操作SQL語(yǔ)言功能概要語(yǔ)言功能概要四類功能:四類功能:數(shù)據(jù)定義數(shù)據(jù)定義:CREATE、DROP、ALTER 創(chuàng)建表、索引、查詢創(chuàng)建表、索引、查詢數(shù)據(jù)操縱數(shù)據(jù)操縱:INSERT、UPDATE、DELETE 插入、更新、刪除插入、更新、刪除數(shù)據(jù)查詢數(shù)據(jù)查詢:SELECT 查詢查詢數(shù)據(jù)控制數(shù)據(jù)控制:GRANT、REVOTE 授予、收回權(quán)限授予、收回權(quán)限閱讀:閱讀:SQL語(yǔ)言的發(fā)展語(yǔ)言的發(fā)展SQL:Structured Query La
18、nguagel1974年年 IBM公司公司Boyce 和和Chamberlin提出提出l1975-1979年年 IBM在在System R關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)原型關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)原型中實(shí)現(xiàn)中實(shí)現(xiàn)l1986年年10月月 成為成為ANSI標(biāo)準(zhǔn):標(biāo)準(zhǔn):SQL-86l1987年年6月月 接納為接納為ISO標(biāo)準(zhǔn)標(biāo)準(zhǔn) l1989年年4月月 ISO較為完整的較為完整的SQL-89標(biāo)準(zhǔn)標(biāo)準(zhǔn)l1992年年8月月 ISO推出更完善的推出更完善的SQL-92標(biāo)準(zhǔn)標(biāo)準(zhǔn)l1999年年 ISO推出新的推出新的SQL-99標(biāo)準(zhǔn)標(biāo)準(zhǔn)閱讀:閱讀:SQL語(yǔ)言的特點(diǎn)語(yǔ)言的特點(diǎn)l一體化 集數(shù)據(jù)定義語(yǔ)言集數(shù)據(jù)定義語(yǔ)言DDL、數(shù)據(jù)操縱語(yǔ)言、數(shù)據(jù)
19、操縱語(yǔ)言DML和數(shù)據(jù)和數(shù)據(jù)控制語(yǔ)言控制語(yǔ)言DCL于一體,綜合管理功能于一身于一體,綜合管理功能于一身l高度非過(guò)程化 用戶只需提出用戶只需提出“做什么做什么”,而不需指明,而不需指明“怎么做怎么做”l面向集合的操作方式 操作的數(shù)據(jù)不是一條記錄,而是記錄的集合操作的數(shù)據(jù)不是一條記錄,而是記錄的集合l同樣語(yǔ)法提供兩種使用方式 用戶可直接鍵盤交互方式使用用戶可直接鍵盤交互方式使用SQL命令,也可將命令,也可將SQL語(yǔ)句嵌入其他高級(jí)語(yǔ)言(語(yǔ)句嵌入其他高級(jí)語(yǔ)言(VB、Delphi、VC、Java等)等)l語(yǔ)言簡(jiǎn)潔,容易掌握 命令(語(yǔ)句)只有命令(語(yǔ)句)只有9條,語(yǔ)法接近于自然語(yǔ)言條,語(yǔ)法接近于自然語(yǔ)言2.
20、 SQL語(yǔ)言的數(shù)據(jù)類型語(yǔ)言的數(shù)據(jù)類型不同數(shù)據(jù)庫(kù)產(chǎn)品所支持的數(shù)據(jù)類型稍有差別不同數(shù)據(jù)庫(kù)產(chǎn)品所支持的數(shù)據(jù)類型稍有差別 (以(以SQL Server 2000為例)為例)兩大類:兩大類: 系統(tǒng)數(shù)據(jù)類型 系統(tǒng)內(nèi)含的系統(tǒng)內(nèi)含的 用戶自定義數(shù)據(jù)類型 在系統(tǒng)數(shù)據(jù)類型的基礎(chǔ)上建立在系統(tǒng)數(shù)據(jù)類型的基礎(chǔ)上建立 使用系統(tǒng)存儲(chǔ)過(guò)程使用系統(tǒng)存儲(chǔ)過(guò)程sp_addtype定義定義SQL Server 2000的系統(tǒng)數(shù)據(jù)類型如下:的系統(tǒng)數(shù)據(jù)類型如下:1)數(shù)值型)數(shù)值型 數(shù)據(jù)類型數(shù)據(jù)類型說(shuō)明說(shuō)明精精確確整數(shù)型整數(shù)型Bigint8字節(jié),字節(jié), -263263-1Int4字節(jié),字節(jié), -231231-1Smallint2字節(jié),字節(jié)
21、, -215215-1Tinyint1字節(jié),字節(jié), 0255精確數(shù)值精確數(shù)值型型Decimal(p,q)或或Numeric(p,q)-1038+1 1038-1p為總位數(shù),為總位數(shù),q為小數(shù)位為小數(shù)位數(shù)數(shù)位型位型Bit存儲(chǔ)二進(jìn)制存儲(chǔ)二進(jìn)制0或或1近近似似浮點(diǎn)型浮點(diǎn)型Float-1.79E+308 1.79E+308Real-3.4E+38 3.4E+382) 字符型字符型 數(shù)據(jù)類型說(shuō)明定長(zhǎng)字符串定長(zhǎng)字符串Char(n)n18000變長(zhǎng)字符串變長(zhǎng)字符串Varchar(n)n18000文本文本Text最多最多2311個(gè)字符個(gè)字符定長(zhǎng)定長(zhǎng)UnicodeNchar(n)n14000變長(zhǎng)變長(zhǎng)Unicod
22、eNvarchar(n)n14000Unicode文本文本Ntext最多最多2301個(gè)字符個(gè)字符定長(zhǎng)二進(jìn)制字定長(zhǎng)二進(jìn)制字符符Binary(n)n18000變長(zhǎng)二進(jìn)制字變長(zhǎng)二進(jìn)制字符符Varbinary(n)n18000任意二進(jìn)制數(shù)任意二進(jìn)制數(shù)據(jù)據(jù)Image最多最多2311個(gè)字節(jié),約個(gè)字節(jié),約2GB3) 日期時(shí)間型日期時(shí)間型數(shù)據(jù)類型數(shù)據(jù)類型說(shuō)明說(shuō)明Datetime8字節(jié),字節(jié),1753年年1月月1日日9999年年12月月31日日精度百分之三秒精度百分之三秒Smalldatetime4字節(jié),字節(jié),1900年年1月月1日日2079年年6月月6日,日,精度精度1分鐘分鐘日期日期:英文數(shù)字:英文數(shù)字 O
23、ct 25 2005 數(shù)字加分隔符數(shù)字加分隔符 2005-10-25 或或 2005/12/25 純數(shù)字純數(shù)字 20051025時(shí)間時(shí)間:24小時(shí)制小時(shí)制 15:28:56 12小時(shí)制小時(shí)制 3:28:56 PM4) 貨幣型貨幣型數(shù)據(jù)類型數(shù)據(jù)類型說(shuō)明說(shuō)明Money8字節(jié),字節(jié), -263 263-1,精確度為精確度為4位小數(shù),位小數(shù),最多最多19位數(shù)字位數(shù)字Smallmoney4字節(jié),字節(jié), -214748.3648 214748.3647,精確度為精確度為4位小數(shù)位小數(shù)SQL語(yǔ)言的數(shù)據(jù)定義語(yǔ)句語(yǔ)言的數(shù)據(jù)定義語(yǔ)句操作對(duì)象操作對(duì)象 創(chuàng)建創(chuàng)建 刪除刪除 修改修改 表表 CREATE TABLE D
24、ROP TABLE ALTER TABLE 視圖視圖 CREATE VIEW DROP VIEW 索引索引 CREATE INDEX DROP INDEX 觸發(fā)器觸發(fā)器 CREATE TRIGGER 存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程 CREATE PROCEDURE 2.3 SQL語(yǔ)言數(shù)據(jù)定義功能語(yǔ)言數(shù)據(jù)定義功能1. 表的定義與刪除表的定義與刪除1) 建立表結(jié)構(gòu)建立表結(jié)構(gòu) _基本語(yǔ)法:基本語(yǔ)法:列名列名表中列的名字表中列的名字類型類型該列該列數(shù)據(jù)類型約束約束該列該列完整性約束條件: NOT NULL 列值不能為空(不能用于表級(jí)約束)列值不能為空(不能用于表級(jí)約束) DEFAULT 指定列的默認(rèn)值(不能用于表級(jí)
25、約束)指定列的默認(rèn)值(不能用于表級(jí)約束) UNIQUE 列值不能重復(fù)列值不能重復(fù) CHECK 限定列的取值范圍限定列的取值范圍 PRIMARY KEY 指定本列為主碼指定本列為主碼 FOREIGN KEY 本列為引用其他表的外碼,用法如下本列為引用其他表的外碼,用法如下 FOREIGN KEY 列名列名 REFERENCES 外表名外表名 (外表列名外表列名) CREATE TABLE 表名表名 (列名列名 類型類型 約束,約束,),表級(jí)約束表級(jí)約束 例:創(chuàng)建例:創(chuàng)建student表表 CREATE TABLE student ( Sno char(7) PRIMARY KEY, Sname
26、char(10) NOT NULL, Ssex char(2) CHECK (Ssex = 男男 OR Ssex = 女女 ), Sage tinyint CHECK (Sage = 15 AND Sage 0), Semester tinyint CHECK (Semester 0), Period int CHECK (Period 0), PRIMARY KEY (Cno) )取值大于取值大于0整數(shù)整數(shù)學(xué)時(shí)學(xué)時(shí)Period取值大于取值大于0整數(shù)整數(shù)學(xué)期學(xué)期Cemester取值大于取值大于0整數(shù)整數(shù)學(xué)分學(xué)分Ccredit非空非空字符串,長(zhǎng)度為字符串,長(zhǎng)度為20課程名課程名Cname主碼主碼
27、字符串,長(zhǎng)度為字符串,長(zhǎng)度為10課程號(hào)課程號(hào)Cno約約 束束數(shù)據(jù)類型數(shù)據(jù)類型說(shuō)說(shuō) 明明列列 名名例:創(chuàng)建例:創(chuàng)建SC表表CREATE TABLE SC ( Sno char(7) NOT NULL, Cno char(10) NOT NULL, Grade tinyint CHECK (Grade=0 AND Grade=100), PRIMARY KEY(Sno, Cno), FOREIGN KEY(Sno) REFERENCES student (Sno), FOREIGN KEY(Cno) REFERENCES course (Cno) )取值取值0100整數(shù)整數(shù)成績(jī)成績(jī)Grade主碼,
28、引用主碼,引用course的外碼的外碼字符串,長(zhǎng)度為字符串,長(zhǎng)度為10課程號(hào)課程號(hào)Cno主碼,引用主碼,引用student的外碼的外碼字符串,長(zhǎng)度為字符串,長(zhǎng)度為7學(xué)號(hào)學(xué)號(hào)Sno約約 束束數(shù)據(jù)類型數(shù)據(jù)類型說(shuō)說(shuō) 明明列列 名名說(shuō)明:說(shuō)明: 刪除表時(shí)會(huì)將表結(jié)構(gòu)和表中的數(shù)據(jù)一起刪除刪除表時(shí)會(huì)將表結(jié)構(gòu)和表中的數(shù)據(jù)一起刪除例:例:刪除刪除test表表 DROP TABLE test 2) 刪除表(刪除表(DROP TABLE)基本語(yǔ)法:基本語(yǔ)法: DROP TABLE 表名表名3) 修改表結(jié)構(gòu)修改表結(jié)構(gòu)基本語(yǔ)法:基本語(yǔ)法:例例1:為:為SC表添加表添加“選課類別選課類別”列:列:XKLB char(4)
29、 ALTER TABLE SC ADD XKLB char(4)例例2:將新添加的:將新添加的XKLB列的類型改為列的類型改為char(6) ALTER TABLE SC ALTER COLUMN XKLB char(6)ALTER TABLE 表名表名 ALTER COLUMN 列名列名 新類型新類型 修改列定義修改列定義 | ADD COLUMN 列名列名 類型類型 約束約束 增加新列增加新列 | DROP COLUMN 列名列名 刪除列刪除列 | ADD PRIMARY KEY (列名列表列名列表 ) 增加主碼約束增加主碼約束 | ADD FOREIGN KEY (列名列名 ) REFE
30、RENCES 外表名外表名 (列名列名 ) 增加外碼約束增加外碼約束更新:插入、刪除、修改更新:插入、刪除、修改表中插入一行數(shù)據(jù):表中插入一行數(shù)據(jù): insert into student () VALUES ()修改(更新)表中數(shù)據(jù):修改(更新)表中數(shù)據(jù): UPDATE student SET Sage=Sage+1刪除數(shù)據(jù):刪除數(shù)據(jù): DELETE SC WHERE Grade 60清空整個(gè)表:清空整個(gè)表: TRUNCATE TABLE SC 2.4 SQL語(yǔ)言數(shù)據(jù)定義功能語(yǔ)言數(shù)據(jù)定義功能1. 插入數(shù)據(jù)插入數(shù)據(jù)基本語(yǔ)法:基本語(yǔ)法:列名表列名表表中的列名的列表,列名之間用逗號(hào)分隔表中的列名的
31、列表,列名之間用逗號(hào)分隔 未指定列名表時(shí),值列表中值的順序須與表中定義列的順序未指定列名表時(shí),值列表中值的順序須與表中定義列的順序一致,且每列都要有值(或?yàn)榭眨┮恢?,且每列都要有值(或?yàn)榭眨┲盗斜碇盗斜硐鄳?yīng)列的值,值之間用逗號(hào)分隔相應(yīng)列的值,值之間用逗號(hào)分隔 值列表中的值要與列名表中的列按位置順序?qū)?yīng),且應(yīng)滿足值列表中的值要與列名表中的列按位置順序?qū)?yīng),且應(yīng)滿足約束條件約束條件 INSERT INTO 表名表名 (列名表列名表) VALUES (值列表值列表)例:學(xué)生記錄(9512101,李勇,男,19,計(jì)算機(jī)系)插入student表insert into student (Sno, Snam
32、e, Ssex, Sage, Sdept) VALUES (9512101, 李勇李勇, 男男, 19, 計(jì)算機(jī)系計(jì)算機(jī)系)2. 更新數(shù)據(jù)更新數(shù)據(jù)基本語(yǔ)法:基本語(yǔ)法:例例1:所有學(xué)生年齡加:所有學(xué)生年齡加1 UPDATE student SET Sage=Sage+1 例例2:9512101學(xué)生年齡加學(xué)生年齡加1 UPDATE student SET Sage=Sage+1 WHERE Sno = 9512101SET子句子句指定要改的列及改后的值,可一次修改多列指定要改的列及改后的值,可一次修改多列WHERE子句子句指定要修改表中哪些記錄,如果省略,指定要修改表中哪些記錄,如果省略, 則所有
33、記錄的指定列都被修改則所有記錄的指定列都被修改 UPDATE 表名表名 SET 列名列名=表達(dá)式表達(dá)式 , WHERE 條件條件 3. 刪除數(shù)據(jù)刪除數(shù)據(jù)基本語(yǔ)法:基本語(yǔ)法:例例1:刪除所有學(xué)生的選課記錄:刪除所有學(xué)生的選課記錄 DELETE FROM SC 例例2:刪除所有不及格學(xué)生的選課記錄:刪除所有不及格學(xué)生的選課記錄 DELETE SC WHERE Grade 、=、=、(或或!=)、NOT 確定范圍確定范圍BETWEENAND、NOT BETWEENAND確定集合確定集合IN、NOT IN相似字符串匹配相似字符串匹配 LIKE、NOT LIKE空值空值IS NULL、IS NOT NU
34、LL多重條件多重條件AND、OR查詢過(guò)程中,可以使用篩選條件,使得查詢結(jié)果中查詢過(guò)程中,可以使用篩選條件,使得查詢結(jié)果中只包含滿足條件的元組(記錄行)只包含滿足條件的元組(記錄行)查詢滿足條件的元組是通過(guò)查詢滿足條件的元組是通過(guò)WHERE子句實(shí)現(xiàn)的。子句實(shí)現(xiàn)的。WHERE子句中常用的查詢條件如下:子句中常用的查詢條件如下:帶條件的查詢比較大小帶條件的查詢比較大小例例1:查詢計(jì)算機(jī)系全體學(xué)生的姓名:查詢計(jì)算機(jī)系全體學(xué)生的姓名 SELECT Sname FROM student WHERE Sdept = 計(jì)算機(jī)系計(jì)算機(jī)系 例例2:查詢所有不小于:查詢所有不小于20歲的學(xué)生的姓名及年齡歲的學(xué)生的姓
35、名及年齡 SELECT Sname, Sage FROM student WHERE Sage = 20 帶條件的查詢確定范圍帶條件的查詢確定范圍條件:條件:列名列名|表達(dá)式表達(dá)式 NOT BETWEEN 下限下限 AND 上限上限例:查詢年齡例:查詢年齡2025歲間的學(xué)生的姓名及年齡歲間的學(xué)生的姓名及年齡 SELECT Sname, Sage FROM student WHERE Sage BETWEEN 20 AND 25等價(jià)于:等價(jià)于: SELECT Sname, Sage FROM student WHERE Sage = 20 AND Sage = 25帶條件的查詢確定集合帶條件的查
36、詢確定集合l用于查找列值屬于指定集合的元組用于查找列值屬于指定集合的元組l條件格式:條件格式: 列名列名 NOT IN (常量常量1, 常量常量2, , 常量常量n)例:查詢信息系和計(jì)算機(jī)系學(xué)生的姓名和性別例:查詢信息系和計(jì)算機(jī)系學(xué)生的姓名和性別 SELECT Sname, Ssex FROM student WHERE Sdept IN (信息系信息系, 計(jì)算機(jī)系計(jì)算機(jī)系)帶條件的查詢相似字符串匹配帶條件的查詢相似字符串匹配用于查詢指定列中與匹配模板相似的元組用于查詢指定列中與匹配模板相似的元組條件:條件: 列名列名 NOT LIKE 匹配字符串模板匹配字符串模板模板中可包含如下四種通配符:
37、模板中可包含如下四種通配符:_ 代表任意單個(gè)字代表任意單個(gè)字% 代表任意長(zhǎng)度的字符串(包括代表任意長(zhǎng)度的字符串(包括0個(gè))個(gè)) 匹配匹配 中的任意一個(gè)字符中的任意一個(gè)字符 如如xyz表示匹配表示匹配x、y、z中的任意一個(gè)中的任意一個(gè) 不匹配不匹配 中任意一個(gè)字符中任意一個(gè)字符相似字符串匹配(相似字符串匹配(Cont.)例例1:查詢姓:查詢姓“李李”的學(xué)生的信息的學(xué)生的信息 SELECT * FROM student WHERE Sname LIKE 李李%例例2:查詢姓:查詢姓“王王”、姓、姓“賈賈”的學(xué)生的信息的學(xué)生的信息 SELECT * FROM student WHERE Sname
38、LIKE 王賈王賈%例例3:查詢學(xué)號(hào)第:查詢學(xué)號(hào)第2、3位為位為52的學(xué)生的信息的學(xué)生的信息 SELECT * FROM student WHERE Sno LIKE _52%帶條件的查詢空值帶條件的查詢空值空值(空值(NULLNULL):不確定的值:不確定的值比較一個(gè)值是否為空,不能用普通比較運(yùn)算符比較一個(gè)值是否為空,不能用普通比較運(yùn)算符 必須使用必須使用“IS NOT NULL”來(lái)判斷來(lái)判斷例:查詢無(wú)考試成績(jī)的學(xué)生的學(xué)號(hào)和相應(yīng)課程號(hào)例:查詢無(wú)考試成績(jī)的學(xué)生的學(xué)號(hào)和相應(yīng)課程號(hào) SELECT Sno, Cno FROM SC WHERE Grade IS NULL 帶條件的查詢多重條件帶條件的
39、查詢多重條件多條件查詢:多條件查詢: 使用邏輯運(yùn)算符使用邏輯運(yùn)算符AND、OR構(gòu)成條件表達(dá)式構(gòu)成條件表達(dá)式例:查詢計(jì)算機(jī)系年齡在例:查詢計(jì)算機(jī)系年齡在20歲以下的歲以下的 學(xué)生的學(xué)號(hào)、姓名和性別學(xué)生的學(xué)號(hào)、姓名和性別 SELECT Sno, Sname, Ssex FROM student WHERE Sdept = 計(jì)算機(jī)系計(jì)算機(jī)系 AND Sage 32.5.2 多表連接查詢多表連接查詢多表連接查詢多表連接查詢: 多個(gè)相關(guān)聯(lián)表中獲取信息多個(gè)相關(guān)聯(lián)表中獲取信息l實(shí)際上是計(jì)算多個(gè)表的笛卡爾積(一種關(guān)系運(yùn)算)實(shí)際上是計(jì)算多個(gè)表的笛卡爾積(一種關(guān)系運(yùn)算)連接查詢主要包括連接查詢主要包括內(nèi)連接、自連
40、接和和外連接1. 內(nèi)連接內(nèi)連接使用內(nèi)連接使用內(nèi)連接: 兩個(gè)表的相關(guān)字段滿足連接條件,則從兩個(gè)表的相關(guān)字段滿足連接條件,則從兩個(gè)表中提取數(shù)據(jù)并拼接成新記錄兩個(gè)表中提取數(shù)據(jù)并拼接成新記錄內(nèi)連接格式:內(nèi)連接格式:FROM 表表1 INNER JOIN 表表2 ON 連接條連接條連接條件的一般格式:連接條件的一般格式: 表名表名1.列名列名1 表名表名2.列名列名2 注意:參與比較的兩個(gè)列在語(yǔ)義上必須相同注意:參與比較的兩個(gè)列在語(yǔ)義上必須相同 多表連接查詢內(nèi)連接(多表連接查詢內(nèi)連接(Cont.)例如,兩表根據(jù)條件例如,兩表根據(jù)條件 number = scale 進(jìn)行內(nèi)連接進(jìn)行內(nèi)連接numbername
41、1張山張山2李斯李斯scaleAddress1北京北京1上海上海2西安西安2成都成都numbernamescaleAddress1張山張山1北京北京1張山張山1上海上海2李斯李斯2西安西安2李斯李斯2成都成都例例1:查詢每名學(xué)生的情況及其選課情況。:查詢每名學(xué)生的情況及其選課情況。 SELECT * FROM student JOIN SC ON student.Sno = SC.Sno注意注意: 結(jié)果中有重復(fù)的結(jié)果中有重復(fù)的Sno列列例例2:查詢計(jì)算機(jī)系學(xué)生選課情況,:查詢計(jì)算機(jī)系學(xué)生選課情況, 列出學(xué)生的姓名、課程號(hào)和成績(jī)列出學(xué)生的姓名、課程號(hào)和成績(jī)SELECT Sname, Cno, G
42、radeFROM student JOIN SC ON student.Sno = SC.SnoWHERE Sdept = 計(jì)算機(jī)系計(jì)算機(jī)系可為表指定別名,以簡(jiǎn)化書(shū)寫。但一旦指定別名,用可為表指定別名,以簡(jiǎn)化書(shū)寫。但一旦指定別名,用到該表名的地方都必須使用別名到該表名的地方都必須使用別名例例3:查詢信息系選修:查詢信息系選修VB的課程的學(xué)生的成績(jī)的課程的學(xué)生的成績(jī) 列出學(xué)號(hào)、姓名、課程名和成績(jī)列出學(xué)號(hào)、姓名、課程名和成績(jī) SELECT a.Sno, a.Sname, c.Cname, b.Grade FROM student a JOIN SC b ON a.Sno = b.Sno JOIN
43、course c ON c.Cno = b.CnoWHERE a.Sdept = 信息系信息系 AND c.Cname = VB編程語(yǔ)言編程語(yǔ)言2. 多表連接查詢自連接多表連接查詢自連接自連接自連接: 特殊的內(nèi)連接,把一個(gè)表特殊的內(nèi)連接,把一個(gè)表自己與自己做內(nèi)連接 即物理上一個(gè)表,邏輯上是兩個(gè)表即物理上一個(gè)表,邏輯上是兩個(gè)表使用自連接時(shí)必須為自連接的表起使用自連接時(shí)必須為自連接的表起兩個(gè)別名,使之在邏,使之在邏輯上成為兩個(gè)表輯上成為兩個(gè)表自連接的格式:自連接的格式: SELECT .列名列名1, .列名列名2 FROM 表名表名 AS 別名別名1 JOIN 表名表名 AS 別名別名2 ON 連
44、接條件連接條件 (其它子句其它子句)2. 多表連接查詢自連接(多表連接查詢自連接(Cont.)例:查詢與李勇在同一個(gè)系的學(xué)生的姓名和系名例:查詢與李勇在同一個(gè)系的學(xué)生的姓名和系名 SELECT S2.Sname, S2.Sdept FROM student S1 JOIN student S2 ON S1.Sdept = S2.Sdept WHERE S1.Sname = 李勇李勇 AND S2.Sname != 李勇李勇 3. 多表連接查詢外連接多表連接查詢外連接在內(nèi)連接中,只有滿足連接條件的元組才在結(jié)果中。在內(nèi)連接中,只有滿足連接條件的元組才在結(jié)果中。結(jié)果中需要不滿足連接條件的元組時(shí):外連
45、接結(jié)果中需要不滿足連接條件的元組時(shí):外連接外連接只限制一個(gè)表的數(shù)據(jù)必須滿足連接條件,而另外連接只限制一個(gè)表的數(shù)據(jù)必須滿足連接條件,而另一個(gè)表中的數(shù)據(jù)可以不滿足連接條件一個(gè)表中的數(shù)據(jù)可以不滿足連接條件外連接格式:外連接格式: FROM 表表1 LEFT|RIGHT OUTER JOIN 表表2 ON 連接條件連接條件LEFT OUTER JOIN稱為左外連接,它限制表稱為左外連接,它限制表2中中的數(shù)據(jù)必須滿足連接條件,表的數(shù)據(jù)必須滿足連接條件,表1不限不限RIGHT OUTER JOIN稱為右外連接,它限制表稱為右外連接,它限制表1中中的數(shù)據(jù)必須滿足連接條件,表的數(shù)據(jù)必須滿足連接條件,表2不限不
46、限多表連接查詢外連接多表連接查詢外連接例:查詢學(xué)生選課情況,包括選課及未選課的學(xué)生例:查詢學(xué)生選課情況,包括選課及未選課的學(xué)生 SELECT a.Sno, Sname, Cno, Grade FROM student a LEFT JOIN SC ON a.Sno = SC.Sno可知:可知:LEFT JOIN:左表:左表(表表1)數(shù)據(jù)全在結(jié)果中數(shù)據(jù)全在結(jié)果中RIGHT JOIN:右表:右表(表表2)數(shù)據(jù)全在結(jié)果中數(shù)據(jù)全在結(jié)果中不滿足條件的那個(gè)表的列在結(jié)果中的值均為不滿足條件的那個(gè)表的列在結(jié)果中的值均為NULL2.5.4 子查詢子查詢子查詢:嵌入某個(gè)子查詢:嵌入某個(gè)SELECT、INSERT、
47、UPDATE 或或DELETE語(yǔ)句中的語(yǔ)句中的SELECT語(yǔ)句語(yǔ)句子查詢可以嵌套多層子查詢可以嵌套多層子查詢?cè)试S出現(xiàn)在任何能夠使用表達(dá)式的地方,子查詢?cè)试S出現(xiàn)在任何能夠使用表達(dá)式的地方, 一般位于外層語(yǔ)句的一般位于外層語(yǔ)句的WHERE子句或子句或HAVING子句子句中,與比較運(yùn)算符或邏輯運(yùn)算符一起構(gòu)成查詢條件中,與比較運(yùn)算符或邏輯運(yùn)算符一起構(gòu)成查詢條件嵌套查詢的一般處理方法:嵌套查詢的一般處理方法: 先處理子查詢,其結(jié)果作為父查詢的條件先處理子查詢,其結(jié)果作為父查詢的條件涉及多表的查詢,可連接查詢,也可嵌套查詢涉及多表的查詢,可連接查詢,也可嵌套查詢 若查詢結(jié)果來(lái)自一個(gè)關(guān)系,適用于嵌套查詢?nèi)舨?/p>
48、詢結(jié)果來(lái)自一個(gè)關(guān)系,適用于嵌套查詢1. 使用子查詢進(jìn)行基于集合的測(cè)試使用子查詢進(jìn)行基于集合的測(cè)試 子查詢返回的結(jié)果是一個(gè)集合子查詢返回的結(jié)果是一個(gè)集合用用IN(或(或NOT IN)操作符比較集合中的數(shù)據(jù))操作符比較集合中的數(shù)據(jù)例例1:查詢與宋江在同一個(gè)系的學(xué)生:查詢與宋江在同一個(gè)系的學(xué)生 SELECT Sno, Sname, Sdept FROM student WHERE Sdept IN ( SELECT Sdept FROM student WHERE Sname = 宋江宋江 ) AND Sname != 宋江宋江 例例2:查詢成績(jī)小于:查詢成績(jī)小于60分的學(xué)生及其課程分的學(xué)生及其課程
49、 SELECT a.Sno, Sname, Sdept, b.Cname, Grade FROM student a JOIN SC ON a.Sno = SC.Sno JOIN course b ON b.Cno = SC.Cno WHERE a.Sno IN ( SELECT Sno FROM SC WHERE Grade 60) AND Grade ( SELECT AVG(Grade) FROM SC WHERE Cno = c02 ) 3. 使用子查詢進(jìn)行存在性測(cè)試使用子查詢進(jìn)行存在性測(cè)試 先執(zhí)行外層查詢,再執(zhí)行子查詢先執(zhí)行外層查詢,再執(zhí)行子查詢 子查詢返回的是一個(gè)邏輯值(真或假)子
50、查詢返回的是一個(gè)邏輯值(真或假) 用用EXISTS(或(或NOT EXISTS)確定外層查詢的數(shù))確定外層查詢的數(shù)據(jù)是否是滿足要求的結(jié)果據(jù)是否是滿足要求的結(jié)果 子查詢不需指定列名,一般用星號(hào)(子查詢不需指定列名,一般用星號(hào)(*)代替。)代替。例:查詢選擇了例:查詢選擇了c01課程的學(xué)生姓名課程的學(xué)生姓名 SELECT Sname FROM student a WHERE EXISTS ( SELECT * FROM SC WHERE Sno = a.Sno AND Cno = c01 ) 小結(jié)小結(jié)lSQL語(yǔ)言的發(fā)展語(yǔ)言的發(fā)展l常用數(shù)據(jù)類型常用數(shù)據(jù)類型l數(shù)據(jù)定義語(yǔ)句:表的建立、修改、刪除數(shù)據(jù)定義
51、語(yǔ)句:表的建立、修改、刪除l數(shù)據(jù)的增、刪、改操作數(shù)據(jù)的增、刪、改操作l數(shù)據(jù)查詢操作數(shù)據(jù)查詢操作l單表查詢單表查詢n無(wú)條件、條件、分組、排序、聚集函數(shù)計(jì)算無(wú)條件、條件、分組、排序、聚集函數(shù)計(jì)算l多表連接查詢多表連接查詢n內(nèi)連接、自連接、左外連接、右外連接內(nèi)連接、自連接、左外連接、右外連接l子查詢子查詢練練 習(xí)習(xí) 題題1. 利用本章提供的三個(gè)表(利用本章提供的三個(gè)表(Student、Course和和SC)實(shí)現(xiàn)如下操作,寫出相應(yīng)的實(shí)現(xiàn)如下操作,寫出相應(yīng)的SQL語(yǔ)句,并上機(jī)驗(yàn)證語(yǔ)句,并上機(jī)驗(yàn)證結(jié)果結(jié)果a)查詢查詢SC表中的全部記錄表中的全部記錄b)查詢計(jì)算機(jī)系學(xué)生的姓名、年齡查詢計(jì)算機(jī)系學(xué)生的姓名、年
52、齡c)查詢成績(jī)小于查詢成績(jī)小于60分的學(xué)生的學(xué)號(hào)、姓名、課程名和分的學(xué)生的學(xué)號(hào)、姓名、課程名和分?jǐn)?shù)分?jǐn)?shù)d)統(tǒng)計(jì)每門課程的選課人數(shù)和考試最高分統(tǒng)計(jì)每門課程的選課人數(shù)和考試最高分e)查詢哪些課程沒(méi)有學(xué)生選修,列出課程號(hào)和課程名查詢哪些課程沒(méi)有學(xué)生選修,列出課程號(hào)和課程名練練 習(xí)習(xí) 題題2. 寫出創(chuàng)建下表的寫出創(chuàng)建下表的SQL語(yǔ)句,表名為語(yǔ)句,表名為test, 表結(jié)構(gòu)如下:表結(jié)構(gòu)如下: COL1:字符型,主碼:字符型,主碼 COL2: 整型,允許空值整型,允許空值 COL3:字符型,長(zhǎng)度為:字符型,長(zhǎng)度為10,不允許空值,不允許空值3. 用用ALTER語(yǔ)句修改上題創(chuàng)建的表結(jié)構(gòu):語(yǔ)句修改上題創(chuàng)建的表結(jié)
53、構(gòu):a) 增加一個(gè)新列增加一個(gè)新列COL4,貨幣類型,允許空值,貨幣類型,允許空值b) 將將COL3的長(zhǎng)度改為的長(zhǎng)度改為203.2 視圖視圖l 內(nèi)容內(nèi)容l視圖概念 l定義視圖 l刪除視圖 2.6 視圖視圖視圖視圖: :數(shù)據(jù)庫(kù)基本表中取出的數(shù)據(jù)組成的邏輯窗口,數(shù)據(jù)庫(kù)基本表中取出的數(shù)據(jù)組成的邏輯窗口,其它表中導(dǎo)出的其它表中導(dǎo)出的虛表虛表數(shù)據(jù)庫(kù)中只存放視圖的定義,不存放其包含的數(shù)據(jù),數(shù)據(jù)庫(kù)中只存放視圖的定義,不存放其包含的數(shù)據(jù),這些數(shù)據(jù)仍存放在原來(lái)的基本表中這些數(shù)據(jù)仍存放在原來(lái)的基本表中視圖對(duì)應(yīng)于數(shù)據(jù)庫(kù)結(jié)構(gòu)中的外模式視圖對(duì)應(yīng)于數(shù)據(jù)庫(kù)結(jié)構(gòu)中的外模式視圖可以建立在基本表上,也可以建立在其他的視圖視圖可以
54、建立在基本表上,也可以建立在其他的視圖上,即可以在一個(gè)視圖之上再定義視圖上,即可以在一個(gè)視圖之上再定義視圖一個(gè)基本表上可以建立多個(gè)視圖。一個(gè)視圖也可以建一個(gè)基本表上可以建立多個(gè)視圖。一個(gè)視圖也可以建立在多個(gè)基本表上立在多個(gè)基本表上從視圖中查詢與從表中查詢的語(yǔ)句基本相同從視圖中查詢與從表中查詢的語(yǔ)句基本相同視圖的示意圖視圖的示意圖基本表基本表1基本表基本表2視圖視圖視圖有很多優(yōu)點(diǎn):視圖有很多優(yōu)點(diǎn):簡(jiǎn)化操作簡(jiǎn)化操作 多表間查詢時(shí),通過(guò)視圖實(shí)現(xiàn),將復(fù)雜查詢封裝在多表間查詢時(shí),通過(guò)視圖實(shí)現(xiàn),將復(fù)雜查詢封裝在視圖內(nèi)部,用戶不必學(xué)習(xí)復(fù)雜的數(shù)據(jù)庫(kù)查詢技術(shù)視圖內(nèi)部,用戶不必學(xué)習(xí)復(fù)雜的數(shù)據(jù)庫(kù)查詢技術(shù) 增加了數(shù)據(jù)
55、安全性增加了數(shù)據(jù)安全性 授權(quán)用戶才能使用視圖;而且只能查詢授權(quán)的列授權(quán)用戶才能使用視圖;而且只能查詢授權(quán)的列分割數(shù)據(jù)分割數(shù)據(jù) 通過(guò)列名表縱向分割,通過(guò)通過(guò)列名表縱向分割,通過(guò)WHERE橫向分割橫向分割提供邏輯獨(dú)立性提供邏輯獨(dú)立性 對(duì)視圖進(jìn)行修改時(shí),不必修改使用視圖的應(yīng)用程序?qū)σ晥D進(jìn)行修改時(shí),不必修改使用視圖的應(yīng)用程序定義視圖的定義視圖的CREATE VIEW語(yǔ)句語(yǔ)句的一般格式:的一般格式: CREATE VIEW 視圖名視圖名 (視圖列名表視圖列名表) AS 子查詢語(yǔ)句子查詢語(yǔ)句其中子查詢可是任意其中子查詢可是任意SELECT語(yǔ)句,但要注意:語(yǔ)句,但要注意:子查詢中通常不含子查詢中通常不含OR
56、DER BY和和DISTINCT子句子句定義視圖時(shí)要么指定全部視圖列,要么全部省略。若定義視圖時(shí)要么指定全部視圖列,要么全部省略。若省略視圖的屬性列名,則其列名同子查詢列名省略視圖的屬性列名,則其列名同子查詢列名如下三種情況須明確指定組成視圖的所有列名:如下三種情況須明確指定組成視圖的所有列名: 某個(gè)目標(biāo)列是計(jì)算函數(shù)或列表達(dá)式;某個(gè)目標(biāo)列是計(jì)算函數(shù)或列表達(dá)式; 多表連接時(shí)選出了幾個(gè)同名列作為視圖的字段;多表連接時(shí)選出了幾個(gè)同名列作為視圖的字段; 需要在視圖中為某個(gè)列選用新的更合適的列名。需要在視圖中為某個(gè)列選用新的更合適的列名。1. 定義單源表視圖定義單源表視圖單源表視圖:視圖來(lái)自一個(gè)基本表的
57、部分行、列單源表視圖:視圖來(lái)自一個(gè)基本表的部分行、列 可查詢和修改數(shù)據(jù)操作可查詢和修改數(shù)據(jù)操作例:建立信息系學(xué)生的視圖例:建立信息系學(xué)生的視圖 CREATE VIEW V_IS_Student AS SELECT Sno, Sname, Sage FROM Student WHERE Sdept = 信息系信息系CREATE VIEW語(yǔ)句的結(jié)果僅保存視圖定義語(yǔ)句的結(jié)果僅保存視圖定義對(duì)視圖查詢時(shí),才按其定義從相應(yīng)基本表中查詢數(shù)對(duì)視圖查詢時(shí),才按其定義從相應(yīng)基本表中查詢數(shù)如:如:SELECT * FROM IS_Student2. 定義多源表視圖定義多源表視圖多源表視圖:視圖來(lái)自于多個(gè)表的數(shù)據(jù)。多
58、源表視圖:視圖來(lái)自于多個(gè)表的數(shù)據(jù)。多源表視圖一般只用于查詢,不用于修改數(shù)據(jù)多源表視圖一般只用于查詢,不用于修改數(shù)據(jù)例:建立信息系選了例:建立信息系選了c01號(hào)課程的學(xué)生的視圖號(hào)課程的學(xué)生的視圖 CREATE VIEW V_IS_S1(Sno, Sname, Grade) ASSELECT Student.Sno, Sname, Grade FROM Student JOIN SC ON Student.Sno = SC.Sno WHERE Sdept = 信息系信息系 AND SC.Cno = c013. 在已有視圖上定義新視圖在已有視圖上定義新視圖 視圖也可以建立在已存在的視圖上。視圖也可以建立在已存在的視圖上。例:建立信息系選修了例:建立信息系選修了c01號(hào)課程且號(hào)課程且 成績(jī)?cè)诔煽?jī)?cè)?0分以上的學(xué)生的視圖分以上的學(xué)生的視圖 CREATE VIEW V_IS_S2 AS SELECT Sno, Sname, Grade FROM V_IS_S1 WHERE Grade = 904. 定義帶表達(dá)式的視圖定義帶表達(dá)式的視圖定義視圖時(shí),可根據(jù)需要設(shè)置一些從基本表中的列定義視圖時(shí),可根據(jù)需要設(shè)置一些從基本表中的列派生出來(lái)屬性列,在這些派生屬性列中保存經(jīng)過(guò)派生出來(lái)屬性列,在這些派生屬性列中保存經(jīng)過(guò)計(jì)算的值計(jì)算的值例:定義一個(gè)反
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2020-2021深圳寶文學(xué)校小學(xué)三年級(jí)數(shù)學(xué)下期末第一次模擬試卷(及答案)
- 人教版(2024)七年級(jí)英語(yǔ)下冊(cè)Unit 7 單元檢測(cè)試卷(含答案)
- 甘肅木屋別墅施工方案
- 折扣(教學(xué)設(shè)計(jì))-2023-2024學(xué)年六年級(jí)下冊(cè)數(shù)學(xué)人教版
- 統(tǒng)戰(zhàn)理論知識(shí)培訓(xùn)班課件
- 知識(shí)產(chǎn)權(quán)業(yè)務(wù)培訓(xùn)課件
- 云南省麗江市華坪縣2025屆中考五模生物試題含解析
- epc合作內(nèi)部合同范例
- 財(cái)務(wù)共享服務(wù)中心的構(gòu)建計(jì)劃
- 公司合同范例填
- 餐廚廢棄物處理臺(tái)賬記錄表
- 廣東省廣州市2024年中考數(shù)學(xué)真題試卷(含答案)
- 存款代持協(xié)議書(shū)范文模板
- 國(guó)家基本藥物培訓(xùn)課件
- KPI績(jī)效考核管理辦法
- 2024年深圳市優(yōu)才人力資源有限公司招考聘用綜合網(wǎng)格員(派遣至吉華街道)高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 零星維修工程投標(biāo)方案(技術(shù)方案)
- 華能內(nèi)蒙古東部能源有限公司招聘筆試題庫(kù)2024
- 橫紋肌溶解癥護(hù)理查房
- 2023年部編人教版三年級(jí)《道德與法治》下冊(cè)全冊(cè)課件【全套】
- 部編版六年級(jí)語(yǔ)文下冊(cè)(10-古詩(shī)三首)課件
評(píng)論
0/150
提交評(píng)論