版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
數(shù)據(jù)庫系統(tǒng)概論李遷副教授南京大學工程管理學院
2015.9數(shù)據(jù)和信息緊密關(guān)聯(lián),是對對象結(jié)構(gòu)化的重要過程。有效的數(shù)據(jù)管理能更有效抽取信息、存儲信息和安全地使用信息。數(shù)據(jù)庫設計與管理存在于每個企事業(yè)單位,如ERP\CAD\CAPP\CIMS,OA,電子商務以及BIM及項目管理軟件。數(shù)據(jù)庫系統(tǒng)概論學習能夠幫助我們更好地理解現(xiàn)實世界到計算機世界轉(zhuǎn)化過程,指導我們更好地進行信息系統(tǒng)規(guī)劃、設計與開發(fā)。大數(shù)據(jù)時代的來臨所帶來的挑戰(zhàn)——復雜信息。背景
緒論
關(guān)系數(shù)據(jù)庫關(guān)系數(shù)據(jù)庫標準語言
數(shù)據(jù)庫安全性
數(shù)據(jù)庫完整性關(guān)系數(shù)據(jù)理論數(shù)據(jù)庫設計與編程關(guān)系查詢處理和查詢優(yōu)化數(shù)據(jù)庫恢復技術(shù)并發(fā)控制大綱3教材及參考書10–4教材王珊,薩師煊:數(shù)據(jù)庫系統(tǒng)概論(第四版)高等教育出版社,2006.5AFirstCourseinDatabaseSystems
Jeffrey.D.Ullman,JenniferWidomDept.OfComputerScienceStanfordUniversity參考書王珊:《數(shù)據(jù)庫系統(tǒng)概論(第4版)學習指導與習題解析》高等教育出版社,2008.6上機軟件MSSQLServer2005/2008/2012學習、開發(fā)、個人版系統(tǒng)可以從微軟或?qū)W校機器內(nèi)部網(wǎng)站下載考試成績平時成績10%(出勤、提問、書面作業(yè))實驗成績20%(上機實驗和大作業(yè)(數(shù)據(jù)庫設計))期中、期末閉卷筆試成績70%實驗報告提交格式數(shù)據(jù)庫實驗報告實驗內(nèi)容:姓名:學號:日期:實驗目的和要求:具體實驗題目:(一)實驗指導(1)********實驗方案:(2)****(二)練習題(1)出現(xiàn)的問題解決方案問題16第一章緒論7一、基本概念1、數(shù)據(jù):描述事務的符號記錄??捎梦淖帧D形等多種形式表示,經(jīng)數(shù)字化處理后可存入計算機。2、數(shù)據(jù)庫(DB):按一定的數(shù)據(jù)模型組織、描述和存儲在計算機內(nèi)的、有組織的、可共享的數(shù)據(jù)集合。3、數(shù)據(jù)庫管理系統(tǒng)(DBMS):位于用戶和操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件。主要功能包括:
數(shù)據(jù)定義功能:DBMS提供DDL,用戶通過它定義數(shù)據(jù)對象。
數(shù)據(jù)操縱功能:DBMS提供DML,用戶通過它實現(xiàn)對數(shù)據(jù)庫的查詢、插入、刪除和修改等操作。
數(shù)據(jù)庫的運行管理:DBMS對數(shù)據(jù)庫的建立、運行和維護進行統(tǒng)一管理、統(tǒng)一控制,以保證數(shù)據(jù)的安全性、完整性、并發(fā)控制及故障恢復。
數(shù)據(jù)庫的建立和維護功能:數(shù)據(jù)庫初始數(shù)據(jù)的輸入、轉(zhuǎn)換,數(shù)據(jù)庫的轉(zhuǎn)儲、恢復、重新組織及性能監(jiān)視與分析等。4、數(shù)據(jù)庫系統(tǒng)(DBS):計算機中引入數(shù)據(jù)庫后的系統(tǒng),包括數(shù)據(jù)庫DB數(shù)據(jù)庫管理系統(tǒng)DBMS應用系統(tǒng)數(shù)據(jù)庫管理員DBA和用戶
數(shù)據(jù)庫
應用系統(tǒng)應用開發(fā)工具
操作系統(tǒng)
數(shù)據(jù)庫管理系統(tǒng)
數(shù)據(jù)庫管理員用戶用戶用戶
數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)庫系統(tǒng)二、數(shù)據(jù)管理與數(shù)據(jù)處理1、數(shù)據(jù)管理:對數(shù)據(jù)收集、整理、組織、存儲、維護、檢索、傳送等對象操作目標:在妥當?shù)臅r候以妥當?shù)男问浇o妥當?shù)娜颂峁┩桩數(shù)臄?shù)據(jù)。2、數(shù)據(jù)處理:對數(shù)據(jù)進行加工、計算、提煉,從而產(chǎn)生新的有效數(shù)據(jù)的過程數(shù)據(jù)信息3、管理與處理的關(guān)系:管理是處理的基礎(chǔ)處理為管理服務數(shù)據(jù)處理數(shù)據(jù)處理……源數(shù)據(jù)新數(shù)據(jù)新數(shù)據(jù)
管理和處理又可看成一個問題的兩個階段,故可以統(tǒng)一起來,其中心是管理數(shù)據(jù)管理數(shù)據(jù)管理三、數(shù)據(jù)管理的發(fā)展階段
階段
人工管理階段(50年代中期以前)
文件系統(tǒng)階段(50年代中期至60年代后期)
數(shù)據(jù)庫系統(tǒng)階段(60年代后期以后)數(shù)據(jù)管理技術(shù)的發(fā)展動力應用需求的推動計算機硬件的發(fā)展計算機軟件的發(fā)展1、人工管理階段(程序員管理階段)
特點:數(shù)據(jù)不保存程序員負責數(shù)據(jù)管理的一切工作數(shù)據(jù)和程序一一對應,沒有獨立性和共享性數(shù)據(jù)和程序的關(guān)系:應用程序1數(shù)據(jù)1應用程序2數(shù)據(jù)2應用程序n數(shù)據(jù)n……硬件:有了大容量直接存儲外存設備,如磁盤、磁鼓等軟件:有了專門的數(shù)據(jù)管理軟件--文件系統(tǒng)處理方式:有批處理、聯(lián)機實時處理等2、文件系統(tǒng)階段基礎(chǔ){特點記錄內(nèi)有結(jié)構(gòu)。數(shù)據(jù)的結(jié)構(gòu)是靠程序定義和解釋的。數(shù)據(jù)只能是定長的。可以間接實現(xiàn)數(shù)據(jù)變長要求,但訪問相應數(shù)據(jù)的應用程序復雜了。文件間是獨立的,因此數(shù)據(jù)整體無結(jié)構(gòu)??梢蚤g接實現(xiàn)數(shù)據(jù)整體的有結(jié)構(gòu),但必須在應用程序中對描述數(shù)據(jù)間的聯(lián)系。數(shù)據(jù)的最小存取單位是記錄。三個主要缺點:數(shù)據(jù)高度冗余:數(shù)據(jù)基本上還是面向應用或特定用戶的。數(shù)據(jù)共享困難:文件基本上是私有的,只能提供很弱的文件級共享數(shù)據(jù)和程序缺乏獨立性:只有一定的物理獨立性,完全沒有邏輯獨立性。應用程序1數(shù)據(jù)1應用程序2數(shù)據(jù)2應用程序n數(shù)據(jù)n…………數(shù)據(jù)與程序的關(guān)系:存取方法操作系統(tǒng)負責3、數(shù)據(jù)庫系統(tǒng)階段文件系統(tǒng)不能適應大數(shù)據(jù)量、多應用共享數(shù)據(jù)的根本原因:
數(shù)據(jù)沒有集中管理數(shù)據(jù)庫方法的基本出發(fā)點:
把數(shù)據(jù)統(tǒng)一管理、控制,共享使用應用程序1應用程序2應用程序n……數(shù)據(jù)與程序的關(guān)系:DBMS數(shù)據(jù)庫(1)數(shù)據(jù)高度結(jié)構(gòu)化集成,面向全組織(2)數(shù)據(jù)共享性好??蔀槎鄠€不同的用戶共同使用(3)數(shù)據(jù)冗余少,易擴充(4)數(shù)據(jù)和程序的獨立性高物理獨立性:存儲結(jié)構(gòu)變,邏輯結(jié)構(gòu)可以不變,從而應用程序也不必改變。邏輯獨立性:總體邏輯結(jié)構(gòu)變,局部邏輯結(jié)構(gòu)可以不變,從而應用程序也不必改變。好處:簡化應用程序的編寫和維護(5)數(shù)據(jù)控制統(tǒng)一
安全性控制:防止泄密和破壞
完整性控制:正確、有效、相容
并發(fā)控制:多用戶并發(fā)操作的協(xié)調(diào)控制
故障恢復:發(fā)生故障時,將數(shù)據(jù)庫恢復到正確狀態(tài)主要優(yōu)點4、各個階段的比較:
人工管理文件系統(tǒng)數(shù)據(jù)庫系統(tǒng)誰管理數(shù)據(jù)面向誰共享性數(shù)據(jù)獨立性程序員特定應用不能沒有操作系統(tǒng)提供存取方法系統(tǒng)集中管理基本上是特定用戶共享很弱面向系統(tǒng)充分共享一定的物理獨立性較高的獨立性
文件系統(tǒng)和數(shù)據(jù)庫系統(tǒng)的本質(zhì)區(qū)別:內(nèi)部:數(shù)據(jù)庫的數(shù)據(jù)是結(jié)構(gòu)化的,有聯(lián)系的
文件系統(tǒng)的各記錄無聯(lián)系外部:數(shù)據(jù)庫系統(tǒng)是共享的文件系統(tǒng)基本上是面向特定用戶的§2數(shù)據(jù)模型數(shù)據(jù)處理的抽象過程(涉及三個領(lǐng)域)建立概念模型建立數(shù)據(jù)模型(便于用戶和DB設計人員交流)(便于機器實現(xiàn))一、概念模型(信息模型)把現(xiàn)實世界中的客觀對象抽象成的某種信息結(jié)構(gòu),主要用于數(shù)據(jù)庫設計。
獨立于具體的計算機系統(tǒng)
獨立于具體的DBMS支持的數(shù)據(jù)模型現(xiàn)實世界===信息世界抽象=====機器世界(數(shù)據(jù)世界)轉(zhuǎn)換實體:客觀存在并可相互區(qū)分的事物。實體集:性質(zhì)相同的同類實體的集合。屬性:實體具有的某一特性。實體標識符:能將一個實體與其它實體區(qū)分開來的一個或一組屬性。信息世界記錄
實體(抽象表示)文件
實體集字段或數(shù)據(jù)項
屬性關(guān)鍵字
實體標識符。唯一地標識一個記錄。又稱碼、鍵。數(shù)據(jù)世界1、實體與記錄2、型與值在DBS中,每一個對象廣義上講都有型與值之分:
——
型是對象的結(jié)構(gòu)或特性描述,
——值是一個具體的對象實例。類似于程序設計語言中數(shù)據(jù)類型與數(shù)據(jù)值的概念。(1)實體型:對實體固有特性或結(jié)構(gòu)的描述。用實體名及其屬性名集合來抽象和刻畫。如汽車(車牌號,車型,車主)實體值:實體型的一個實例,即一個具體的實體。如(豫A00001,豐田,張三)(2)記錄型:記錄格式。
記錄值:一個具體的記錄。如:車牌號名稱車主豫A00001豐田張三(3)幾點說明
?
區(qū)分型與值的實質(zhì)?DBS中討論的重點是型?通常只說實體、記錄,含義根據(jù)上下文自明3、實體間的聯(lián)系
實體內(nèi)部的聯(lián)系(屬性間的聯(lián)系):反映在數(shù)據(jù)上就是記錄內(nèi)部數(shù)據(jù)項間的聯(lián)系實體之間的聯(lián)系:反映在數(shù)據(jù)上就是記錄之間的聯(lián)系(1)1對1聯(lián)系(1:1):兩個實體集中的每一個實體至多和另一個實體集中的一個實體有聯(lián)系。如國家——部長學員隊——學員(2)1對多聯(lián)系(1:n):若實體集A中的每個實體與實體集B中0個或多個實體有聯(lián)系,而B中每個實體至多與A中的一個實體有聯(lián)系,則稱從A到B為1對多的聯(lián)系。如國家——總統(tǒng)學員隊——隊長實體之間的聯(lián)系可歸結(jié)為三類:(3)多對多聯(lián)系(m:n):兩個實體集中的每一個實體都和另一個實體集中0個或多個實體有聯(lián)系。如學員——課程DBS的核心問題之一:
如何表示和處理實體及實體間的聯(lián)系。4、概念模型的表示方法之一:
實體—聯(lián)系方法(Entity-RelationshipApproach)用E—R圖(Entity-RelationshipDiagram)描述:
實體型:用長方形表示聯(lián)系:用菱形表示屬性:用橢圓形表示框內(nèi)寫上相應的名稱用無向邊連接:實體與其屬性聯(lián)系與其屬性聯(lián)系與有關(guān)實體,并標上聯(lián)系類型實體名聯(lián)系名實體名屬性名屬性名屬性名1n說明:聯(lián)系也必須命名多個實體之間也可以有聯(lián)系聯(lián)系也可以有屬性學員領(lǐng)導1n供應量單個實體之間也可以有聯(lián)系項目供應商零件供應pmn例:某工廠物資管理E--R圖(P19)供應商供應商號姓名地址帳號電話號碼項目項目號預算開工日期倉庫倉庫號面積電話號職工職工號姓名年齡職稱零件零件號名稱規(guī)格單價描述庫存庫存量mn工作1n領(lǐng)導1n供應供應量mnp二、數(shù)據(jù)模型是對現(xiàn)實世界進行抽象的工具,它按計算機系統(tǒng)的觀點對數(shù)據(jù)建模,用于提供數(shù)據(jù)庫系統(tǒng)中信息表示和操作手段的形式框架,主要用于DBMS的實現(xiàn),是數(shù)據(jù)庫系統(tǒng)的核心和基礎(chǔ)。1、常用的數(shù)據(jù)模型層次模型網(wǎng)狀模型關(guān)系模型面向?qū)ο竽P头Q作非關(guān)系模型,是下列基本層次聯(lián)系的集合Ri,Rj是實體型(記錄型)Lij是從Ri到Rj的1:1或1:n聯(lián)系}RiRjLij2、數(shù)據(jù)模型的三要素形式化描述數(shù)據(jù)、數(shù)據(jù)之間的聯(lián)系以及數(shù)據(jù)操作和有關(guān)的語義約束規(guī)則的方法數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)操作完整性約束如何保證數(shù)據(jù)的約束條件得到滿足如何實現(xiàn)查、增、刪、改如何表示實體及聯(lián)系(難點是表示聯(lián)系)根據(jù)現(xiàn)實世界實體間聯(lián)系的特征用四種不同的方法進行抽象層次模型網(wǎng)狀模型關(guān)系模型面向?qū)ο竽P?因此,是按照數(shù)據(jù)結(jié)構(gòu)的類型來命名數(shù)據(jù)模型)(動態(tài))(靜態(tài))3、層次模型根據(jù)一個單位的組織結(jié)構(gòu)直觀地得出學院部系處學員隊教研室教員學員方框表示一個實體型(結(jié)點)
線表示聯(lián)系(邊)(1)定義:用樹形結(jié)構(gòu)來表示實體以及實體間聯(lián)系的模型。其特征是:(a)有且僅有一個結(jié)點無雙親(根結(jié)點);(b)其它結(jié)點有且僅有一個雙親。(2)說明:(a)樹中實體間聯(lián)系只能是從父到子的1:1或1:n聯(lián)系,對m:n聯(lián)系,須使用輔助手段轉(zhuǎn)換成多個1:n聯(lián)系,但不易掌握(b)簡單直觀,結(jié)構(gòu)清晰,運行效率高,但編程復雜
4、網(wǎng)狀模型(1)定義:用圖結(jié)構(gòu)來表示實體以及實體間聯(lián)系的模型。其特征是:任一結(jié)點都可以無雙親或有一個以上的雙親。例教員學校班級學生課程(2)優(yōu):可表示m:n的聯(lián)系,運行效率高缺:過于復雜,實現(xiàn)困難(3)說明(a)即使對網(wǎng)狀模型,具體在計算機上實現(xiàn)時,m:n的聯(lián)系仍需分解成若干個1:n的聯(lián)系。(因此,網(wǎng)狀模型的圖結(jié)構(gòu)實質(zhì)上是有向圖),如學生課程選課mn課程成績單學生成績單學號姓名年齡性別課程號名稱學號課程號得分(b)網(wǎng)狀模型中允許兩結(jié)點間有多條邊,層次模型則不允許5、關(guān)系模型層次、網(wǎng)狀模型基本上是面向?qū)I(yè)人員的,使用極不方便
問題:尋找一種能面向一般用戶的數(shù)據(jù)模型?(1)定義:用二維表(關(guān)系)來描述實體及實體間聯(lián)系的模型。(2)示例零件供應商供應mn
設備
工人使用保養(yǎng)供應商SS1張三北京S2李四鄭州………S#SNAMESADDR零件PP1電機2000P2螺絲2………P#PNAMEPRICE(聯(lián)系)供應SP
S1P1200
S1P322………S#P#QTY關(guān)系:對應一張表,每表起一個名稱即關(guān)系名元組:表中的一行屬性:表中一列,每列起一個名稱即屬性名主碼:唯一確定一個元組的屬性組域:屬性的取值范圍(3)關(guān)系模式:對關(guān)系的描述,一般表示為:關(guān)系名(屬性1,屬性2,…,屬性n)(4)優(yōu)點:
無論實體還是實體之間的聯(lián)系都用統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)(二維表、關(guān)系)來表示,可方便地表示m:n聯(lián)系,因此概念簡單,用戶易懂易用如:可表示為:學生(學號,姓名,性別,系和年級)課程(課程號,課程名,學分)選修(學號,課程號,成績)學生選修課程mn表格中行、列次序無關(guān)有堅實的理論基礎(chǔ)(關(guān)系理論)
存取路徑對用戶透明,用戶只需指出“做什么”,不需說明“怎么做”,因此數(shù)據(jù)獨立性更高缺點:由于存取路徑對用戶透明,查詢效率不夠高,必須對查詢請求進行優(yōu)化。說明:
關(guān)系必須規(guī)范化,關(guān)系的每個分量必須是一個不可分的數(shù)據(jù)項,不允許表中套表。規(guī)范化理論將在后續(xù)章節(jié)講解。(5)關(guān)系模型與非關(guān)系模型的比較統(tǒng)一不統(tǒng)一均為關(guān)系實體及實體間聯(lián)系采用的數(shù)據(jù)結(jié)構(gòu)操作方式存取路徑關(guān)系模型非關(guān)系模型對用戶透明對用戶不透明一次一集合一次一記錄三級模式(外模式、模式、內(nèi)模式)兩級映象(外模式/模式,模式/內(nèi)模式映象)一、DBS的三級模式結(jié)構(gòu)1、模式(Schema):又稱邏輯模式。DB的全局邏輯結(jié)構(gòu)。即DB中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述。
說明①模式只涉及到型的描述,不涉及具體的值(實例),反映的是數(shù)據(jù)的結(jié)構(gòu)及其聯(lián)系②模式不涉及物理存儲細節(jié)和硬件環(huán)境,也與應用程序無關(guān)③模式承上啟下,是DB設計的關(guān)鍵④DBS提供模式DDL(DataDefinitionLanguage)來定義模式(描述DB結(jié)構(gòu))§3DBS的結(jié)構(gòu)⑤模式定義的任務(概念模型模式)
定義全局邏輯結(jié)構(gòu)(構(gòu)成記錄的屬性名、類型、寬度等)定義有關(guān)的安全性、完整性要求
定義記錄間的聯(lián)系⑥一個數(shù)據(jù)庫只有一個模式2、外模式:又稱子模式或用戶模式。DB的局部邏輯結(jié)構(gòu)。即與某一應用有關(guān)的數(shù)據(jù)的一個邏輯表示。
說明:外模式是某個用戶的數(shù)據(jù)視圖,模式是所有用戶的公共數(shù)據(jù)視圖;一個DB只能有一個模式,但可以有多個外模式;外模式通常是模式的子集,但可以在結(jié)構(gòu)、類型、長度等方面有差異;DBS提供外模式DDL。3、內(nèi)模式:又稱存儲模式。數(shù)據(jù)的物理結(jié)構(gòu)和存儲方式的描述。即DB中數(shù)據(jù)的內(nèi)部表示方式。
說明:一個數(shù)據(jù)庫只有一個內(nèi)模式DBS提供內(nèi)模式DDL;內(nèi)模式定義的任務記錄存儲格式,索引組織方式,數(shù)據(jù)是否壓縮、是否加密等。4、兩級映象及其作用(1)外模式/模式映象:定義外模式和模式間的對應關(guān)系。對應同一個模式可以有多個外模式,對每個外模式都有一個外模式/模式映象。作用:模式變,可修改映象使外模式保持不變,從而應用程序不必修改,保證了程序和數(shù)據(jù)的邏輯獨立性。(2)模式/內(nèi)模式映象:定義DB全局邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)間的對應關(guān)系。一個數(shù)據(jù)庫只有一個模式,也只有一個內(nèi)模式,因此模式/內(nèi)模式的映象也是唯一的。
作用:存儲結(jié)構(gòu)變,可修改映象使邏輯結(jié)構(gòu)(模式)保持不變,從而應用程序不必修改,保證了數(shù)據(jù)與程序的物理獨立性?!?數(shù)據(jù)庫系統(tǒng)的組成1、數(shù)據(jù)庫:一個或多個數(shù)據(jù)庫數(shù)據(jù)庫的四要素:用戶數(shù)據(jù)、元數(shù)據(jù)、索引和應用元數(shù)據(jù)2、軟件操作系統(tǒng);支持DBMS的運行
數(shù)據(jù)庫管理系統(tǒng)DBMS(DataBaseManagementSystem):操縱和管理數(shù)據(jù)庫的大型軟件系統(tǒng),是數(shù)據(jù)庫系統(tǒng)的核心
數(shù)據(jù)庫應用開發(fā)工具等輔助軟件
具有數(shù)據(jù)庫接口的高級語言與編譯系統(tǒng),如PB、C++等
某個數(shù)據(jù)庫應用系統(tǒng)一、數(shù)據(jù)庫系統(tǒng)(DataBaseSystem,DBS)的組成廣義上講,DBS就是計算機系統(tǒng)中引進數(shù)據(jù)庫后的構(gòu)成。有下面四部分:3、人員用戶應用程序員數(shù)據(jù)庫管理員DBA(使用)(開發(fā))(管理)DBA(DataBasedministrator)的職責:①決定數(shù)據(jù)庫的內(nèi)容和邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)②確定數(shù)據(jù)的安全性要求和完整性約束條件③監(jiān)控數(shù)據(jù)庫的使用和運行,維護數(shù)據(jù)庫④決定數(shù)據(jù)庫的存儲結(jié)構(gòu)和存儲策略
⑤負責數(shù)據(jù)庫的改進和重組重構(gòu)4、硬件計算機及有關(guān)設備,要求有足夠大的內(nèi)、外存儲容量及較高的處理速度。數(shù)據(jù)庫系統(tǒng)圖示:用戶1用戶2用戶n應用程序1應用程序m輔助軟件
DBMS
操作系統(tǒng)數(shù)據(jù)庫數(shù)據(jù)庫DBA負責應用程序員?????????二、數(shù)據(jù)庫系統(tǒng)研究的對象如何高效巧妙地進行數(shù)據(jù)管理,而又花費最少如:占用空間少查詢快維護方便等三個主要研究領(lǐng)域:DBMS及其輔助軟件數(shù)據(jù)庫設計數(shù)據(jù)庫理論作業(yè):7,13,15,222023/4/944本章要求:本章內(nèi)容:1、掌握關(guān)系、關(guān)系模式、關(guān)系數(shù)據(jù)庫等基本概念2、掌握關(guān)系的三類完整性的含義3、掌握關(guān)系代數(shù)運算§1關(guān)系模型的基本概念§2RDBS的數(shù)據(jù)操縱語言:關(guān)系代數(shù)§3RDBS的數(shù)據(jù)操縱語言:關(guān)系演算語言第二章關(guān)系數(shù)據(jù)庫2.1關(guān)系模型關(guān)系數(shù)據(jù)結(jié)構(gòu)表結(jié)構(gòu)碼關(guān)系關(guān)系操縱查詢、插入、刪除、修改關(guān)系中的數(shù)據(jù)約束關(guān)系數(shù)據(jù)結(jié)構(gòu)關(guān)系的集合元組的集合關(guān)系關(guān)系數(shù)據(jù)庫關(guān)系模式是型,關(guān)系是值;表達方式R(U)關(guān)系操縱關(guān)系操縱小結(jié)關(guān)系中的數(shù)據(jù)約束小結(jié)2.2關(guān)系代數(shù)關(guān)系的表示關(guān)系操作的表示在講專門的關(guān)系運算之前,為敘述上的方便先引入幾個概念。
(1)設關(guān)系模式為R(A1,A2,……An),它的一個關(guān)系為R,t∈R表示t是R的一個元組,t[Ai]則表示元組t中相應于屬性Ai的一個分量。(2)若A={Ai1,Ai2,……,Aik},其中Ai1,Ai2,……,Aik是A1,A2,……,An中的一部分,則A稱為屬性列或域列,?則表示{A1,A2,……,An}中去掉{Ai1,Ai2,……,Aik}后剩余的屬性組。t[A]={t[Ai1],t[Ai2],……,t[Aik]}表示元組t在屬性列A上諸分量的集合。(3)R為n目關(guān)系,S為m目關(guān)系,tr∈R,ts∈S,trts稱為元組的連接(concatenation),它是一個n+m列的元組,前n個分量為R的一個n元組,后m個分量為S中的一個m元組。(4)給定一個關(guān)系R(X,Z),X和Z為屬性組,定義當t[X]=x時,x在R中的象集(imageset),為Zx={t[Z]|t∈R,t[X]=x},它表示R中的屬性組X上值為x的諸元組在Z上分量的集合。
投影運算選擇運算笛卡兒乘積舉例:客戶—代理商—產(chǎn)品關(guān)系代數(shù)中的擴充運算除法運算是二目運算,設有關(guān)系R(X,Y)與關(guān)系S(Y,Z),其中X,Y,Z為屬性集合,R中的Y與S中的Y可以有不同的屬性名,但對應屬性必須出自相同的域。關(guān)系R除以關(guān)系S所得的商是一個新關(guān)系P(X),P是R中滿足下列條件的元組在X上的投影:元組在X上分量值x的象集Yx包含S在Y上投影的集合。記作:R÷S={tr[X]|tr∈R∧Πy(S)Yx}其中,Yx為x在R中的象集,x=tr[X]。例2.11已知關(guān)系R和S,如圖2.11(a),(b)所示,則R÷S如圖(c)所示。與除法的定義相對應,本題中X={A,B}={(a1,b2),(a2,b4),(a3,b5)},Y={C,D}={(c3,d5),(c4,d6)},Z={F}={f3,f4}。其中,元組在X上各個分量值的象集分別為:(a1,b2)的象集為{(c3,d5),(c4,d6)}(a2,b4)的象集為{(c1,d3)}(a3,b5)的象集為{(c2,d8)}S在Y上的投影為{(c3,d5),(c4,d6)}顯然只有(a1,b2)的象集包含S在Y上的投影,所以R÷S={(a1,b2)}RSTABCD
CDF
ABa1b2c3d5
c3d5f3
a1b2a1b2c4d6
c4d6f4
a2b4c1d3
a3b5c2d8
`關(guān)系代數(shù)小結(jié)3.4.5關(guān)系代數(shù)實例3.5關(guān)系演算3.5關(guān)系演算3.5.0一階謂詞邏輯3.5.1關(guān)系的表示五種基本關(guān)系操作的表示小結(jié):關(guān)系代數(shù)與關(guān)系演算2023/4/9175二、未實現(xiàn)的元組關(guān)系演算語言——ALPHAE.F.Codd提出,但并未實現(xiàn)。
1、檢索操作(GET)
(1)不設元組變量例:取出計算機系學生的學號:工作空間名表達式限定條件GETW(S.S#):S.SD=‘CS’2023/4/91761、檢索操作(GET)(1)不設元組變量例:取出計算機系學生的學號:相當于原子公式t[i]CGETW(1)(S.S#):S.SD=‘CS’(事實上關(guān)系名起到元組變量的作用)相當于投影取出一個計算機系學生的學號GETW(S.S#):S.SD=‘CS’定額2023/4/9177(2)使用元組變量應用場合用較短的名字代替較長的關(guān)系名使用量詞時查找選修全部課程的學生姓名RANGECCXRANGESCSCXGETW(S.SN):CXSCX(SCX.S#=S.S#SCX.C#=CX.C#)2023/4/91782、存儲操作(1)修改:UPDATE
(2)插入:PUT
(3)刪除:DELETE參閱教材P64—P65。關(guān)鍵字不能修改,只能先刪除、再插入2023/4/9179四、域關(guān)系演算語言——QBEQBE是QueryByExample
的縮寫,1978年在IBM370上實現(xiàn)。
1、特點用戶通過表格形式提出查詢,查詢結(jié)果也通過表格顯示出來用戶容易掌握,易學易用三、域關(guān)系演算與元組關(guān)系演算類似,只不過這里的變量取值范圍是屬性值,其謂詞變元稱作欲變量,關(guān)系的屬性名可視作欲變量。
關(guān)系代數(shù)、元組關(guān)系演算、域關(guān)系演算的表達能力是等價的。2023/4/91802、使用方法(1)用戶提出使用要求(如鍵入某一命令)(2)機器顯示空白表格(3)用戶輸入關(guān)系名如學生關(guān)系SS(4)機器自動顯示屬性名S#SNSDSA2023/4/91812、使用方法(1)用戶提出使用要求(如鍵入某一命令)(2)機器顯示空白表格(3)用戶輸入關(guān)系名如學生關(guān)系S(4)機器自動顯示屬性名SS#SNSDSA(5)提出查詢要求如查詢計算機系的學生姓名和年齡P.張三CSP.30查詢條件SD=‘CS’P.是操作符示例元素(任選一個可能的值)2023/4/9182SS#SNSDSA3、其他例子:
(1)查詢操作例1:查計算機系年齡大于19的學生姓名P.張三CS>19SS#SNSDSAP.張三CS>19P.張三兩個條件寫兩行,示例元素相同,表示條件之間是“與”的關(guān)系SS#SNSDSAP.張三CS>19P.李四示例元素不同,表示條件之間是“或”的關(guān)系例2:查計算機系或年齡大于19的學生姓名2023/4/9183例3:查選修C2的學生名字(涉及兩個關(guān)系,需要連接操作)SS#SNSDSAP.張三S1SCS#C#GS1C2不同關(guān)系中的兩個示例元素相同,表示了連接操作。2023/4/9184(2)修改操作修改操作符為“U.”,不允許修改主碼,若要修改主碼,需先刪除元組,再插入。SS#SNSDSAU.CSS1SS#SNSDSACSS1U.修改操作不包含表達式,可有兩種表示方法。例2:將計算機系所有學生的年齡增加1歲。SS#SNSDSACSS1U.例1:把學號為S1的學生轉(zhuǎn)入計算機系。19S119+12023/4/9185(3)插入操作操作符為“I.”,新元組必須包含碼,其他屬性值可為空。SS#SNSDSACSS8I.19美麗例:(4)刪除操作操作符為“D.”。例:刪除計算機系的學生。SS#SNSDSACSD.作業(yè):習題第五題:試用關(guān)系代數(shù)、關(guān)系演算及ALPHA語言完成查詢。1862023/4/9187本章要求:本章內(nèi)容:1、掌握SQL定義基本表和建立索引的方法2、掌握SQL中各種查詢方法和數(shù)據(jù)更新方法3、掌握SQL中視圖的定義方法和用法4、掌握SQL的授權(quán)機制5、了解嵌入式SQL的基本使用方法§1SQL概述§2SQL數(shù)據(jù)定義功能§3SQL數(shù)據(jù)操縱功能§4視圖§5SQL數(shù)據(jù)控制功能§6嵌入式SQL第三章關(guān)系數(shù)據(jù)庫標準語言SQL2023/4/9188一、SQL的發(fā)展
SQL是StructuredQueryLanguage的縮寫(ANSI解釋為StandardQueryLanguage)
74年Boyce&Chambarlin提出,在IBM的SystemR上首先實現(xiàn)79年Oracle82年IBM的DB284年Sybase采用SQL作為數(shù)據(jù)庫語言§1SQL概述2023/4/9189二、SQL的主要特點1、一體化:兩方面集DDL、DML、DCL為一體實體和聯(lián)系都是關(guān)系,因此每種操作只需一種操作符86年10月成為美國國家標準87年國際標準化組織(ISO)采納為國際標準89年ISO推出SQL8992年ISO推出SQL2目前正制定SQL3標準2023/4/91902、高度非過程化語言(WHAT
HOW
)3、面向集合的操作方式(一次一集合)4、交互式和嵌入式兩種使用方式,統(tǒng)一的語法結(jié)構(gòu)5、語言簡潔,易學易用完成核心功能只有9個動詞:數(shù)據(jù)查詢:SELECT數(shù)據(jù)定義:CREATE,DROP,ALTER數(shù)據(jù)操縱:INSERT,DELETE,UPDATE數(shù)據(jù)控制:GRANT,REVOKE6、支持三級模式結(jié)構(gòu)視圖外模式基本表(的集合)模式存儲文件和索引內(nèi)模式2023/4/9191SQL支持的三級模式結(jié)構(gòu)用戶SQLViewV1ViewV2BasetableB1BasetableB2BasetableB3BasetableB4StoredfileS1StoredfileS2外模式模式內(nèi)模式2023/4/9192說明:
基本表是獨立存在的表。一個關(guān)系對應一個表。一個(或多個)表對應一個存儲文件,每個表可有若干索引,這些索引也可放在存儲文件中。
對內(nèi)模式,只需定義索引,其余的一切均有DBMS自動完成
視圖是從一個或幾個基本表中導出的表,概念上同基本表。但它并不真正存儲數(shù)據(jù),也不獨立存在,它依賴于導出它的基本表,數(shù)據(jù)也存放在原來的基本表中。SQL與關(guān)系模型SQL功能§2SQL數(shù)據(jù)定義功能整數(shù)數(shù)據(jù)類型:依整數(shù)數(shù)值的范圍大小,有BIT,INT,SMALLINT,TINYINT四種。精確數(shù)值類型:用來定義可帶小數(shù)部分的數(shù)字,有NUMERIC和DECIMAL兩種。二者相同,但建議使用DECIMAL。如:123.0、8000.56近似浮點數(shù)值數(shù)據(jù)類型:當數(shù)值的位數(shù)太多時,可用此數(shù)據(jù)類型來取其近似值,用FLOAT和REAL兩種。如:1.23E+10日期時間數(shù)據(jù)類型:用來表示日期與時間,依時間范圍與精確程度可分為DATETIME與SMALLDATETIME兩種。如:1998-06-0815:30:00smalldatetime4byte1900年1月1日到2079年6月6日精確到分鐘datetime8byte從1753年1月1日到9999年12月31日的日期和時間數(shù)據(jù),精確度為百分之三秒字符串數(shù)據(jù)類型:用來表示字符串的字段。包括:CHAR,VARCHAR,TEXT三種,如:“數(shù)據(jù)庫”二進制數(shù)據(jù)類型:用來定義二進制碼的數(shù)據(jù)。有:BINARY,VARBINARY,IMAGE
三種,通常用十六進制表示:如:OX5F3C貨幣數(shù)據(jù)類型:用來定義與貨幣有關(guān)的數(shù)據(jù),分為MONEY與SMALLMONEY兩種,如:123.0000創(chuàng)建數(shù)據(jù)庫CREATEDATABASE<數(shù)據(jù)庫名>如,createdatabasejxgl;創(chuàng)建、修改和刪除數(shù)據(jù)表在SQL語言中,使用語句CREATETABLE創(chuàng)建數(shù)據(jù)表,其基本語法格式為:
CREATETABLE<表名>(<列定義>[{,<列定義>|<表約束>}])<表名>是合法標識符,最多可有128個字符,如S,SC,C,不允許重名。<列定義>:<列名><數(shù)據(jù)類型>[DEFAULT][{<列約束>}]DEFAULT:若是某字段設置有默認值,當該字段未被輸入數(shù)據(jù)時,則以該默認值自動填入該字段。(1)字段名(列名):字段名可長達128個字符。字段名可包含中文、英文字母、下劃線、#號、貨幣符號(¥)及AT符號(@)。同一表中不許有重名列;(2)字段數(shù)據(jù)類型(3)字段的長度、精度和小數(shù)位數(shù)CHAR(N)--------CHAR(20)NUMERIC(P,[S])-------NUMERIC(8,3)(4)NULL值與DEFAULT值DEFAULT值表示某一字段的默認值,當沒有輸入數(shù)據(jù)時,則使用此默認的值。例
建立一學生表USESTUDENTCREATETABLES(SNOCHAR(8),SNVARCHAR(20),AGEINT,SEXCHAR(2)DEFAULT'男',DEPTVARCHAR(20));執(zhí)行該語句后,便產(chǎn)生了學生基本表的表框架,此表為一個空表。其中,SEX列的缺省值為“男”。
定義完整性約束上述為創(chuàng)建基本表的最簡單形式,還可以對表進一步定義,如主鍵、空值的設定,使數(shù)據(jù)庫用戶能夠根據(jù)應用的需要對基本表的定義做出更為精確和詳盡的規(guī)定。在SQLSERVER中,對于基本表的約束分為列約束和表約束。列約束是對某一個特定列的約束,包含在列定義中,直接跟在該列的其他定義之后,用空格分隔,不必指定列名;表約束與列定義相互獨立,不包括在列定義中,通常用于對多個列一起進行約束,與列定義用’,’分隔,定義表約束時必須指出要約束的那些列的名稱。完整性約束的基本語法格式為: [CONSTRAINT<約束名>]<約束類型>約束名:約束不指定名稱時,系統(tǒng)會給定一個名稱。約束類型:在定義完整性約束時必須指定完整性約束的類型。在SQLSERVER中可以定義五種類型的完整性約束,下面分別加以介紹:(1)NULL/NOTNULL例
建立一個S表,對SNO字段進行NOTNULL約束。USESTUDENTCREATETABLES(SNOCHAR(10)(CONSTRAINTS_CONS)NOTNULL,SNVARCHAR(20),AGEINT,SEXCHAR(2)DEFAULT’男’,DEPTVARCHAR(20));(2)UNIQUE約束UNIQUE約束用于指明基本表在某一列或多個列的組合上的取值必須唯一。定義了UNIQUE約束的那些列稱為唯一鍵,系統(tǒng)自動為唯一鍵建立唯一索引,從而保證了唯一鍵的唯一性。唯一鍵允許為空,但系統(tǒng)為保證其唯一性,最多只可以出現(xiàn)一個NULL值。UNIQUE既可用于列約束,也可用于表約束。UNIQUE用于定義列約束時,其語法格式如下: [CONSTRAINT<約束名>]UNIQUE例
建立一個S表,定義SN為唯一鍵。USESTUDENTCREATETABLES(SNOCHAR(6),SNCHAR(8)[CONSTRAINTSN_UNIQ]UNIQUE,SEXCHAR(2),AGENUMERIC(2));UNIQUE用于定義表約束例3.7建立一個S表,定義SN+SEX為唯一鍵。USESTUDENTCREATETABLES(SNOCHAR(5),SNCHAR(8),SEXCHAR(2),[CONSTRAINTS_UNIQ]UNIQUE(SN,SEX));(3)PRIMARYKEY約束PRIMARYKEY約束用于定義基本表的主鍵,起唯一標識作用,其值不能為NULL,也不能重復,以此來保證實體的完整性。PRIMARYKEY與UNIQUE約束類似,通過建立唯一索引來保證基本表在主鍵列取值的唯一性,但它們之間存在著很大的區(qū)別:①在一個基本表中只能定義一個PRIMARYKEY約束,但可定義多個UNIQUE約束;②對于指定為PRIMARYKEY的一個列或多個列的組合,其中任何一個列都不能出現(xiàn)空值,而對于UNIQUE所約束的唯一鍵,則允許為空。注意:不能為同一個列或一組列既定義UNIQUE約束,又定義PRIMARYKEY約束。PRIMARYKEY既可用于列約束,也可用于表約束例
建立一個S表,定義SNO為S的主鍵USESTUDENTCREATETABLES(SNOCHAR(5)NOTNULLCONSTRAINTS_PRIMPRIMARYKEY,SNCHAR(8),AGENUMERIC(2));例
建立一個SC表,定義SNO+CNO為SC的主鍵USESTUDENTCREATETABLESC(SNOCHAR(5)NOTNULL,CNOCHAR(5)NOTNULL,SCORENUMERIC(3),CONSTRAINTSC_PRIMPRIMARYKEY(SNO,CNO));(4)FOREIGNKEY約束FOREIGNKEY約束指定某一個列或一組列作為外部鍵,其中,包含外部鍵的表稱為從表,包含外部鍵所引用的主鍵或唯一鍵的表稱主表。系統(tǒng)保證從表在外部鍵上的取值要么是主表中某一個主鍵值或唯一鍵值,要么取空值。以此保證兩個表之間的連接,確保了實體的參照完整性。FOREIGNKEY既可用于列約束,也可用于表約束例
建立一個SC表,定義SNO,CNO為SC的外部鍵。USESTUDENTCREATETABLESC(SNOCHAR(5)NOTNULLCONSTRAINTS_FOREFOREIGNKEYREFERENCESS(SNO),CNOCHAR(5)NOTNULLCONSTRAINTC_FOREFOREIGNKEYREFERENCESC(CNO),SCORENUMERIC(3),CONSTRAINTS_C_PRIMPRIMARYKEY(SNO,CNO));(5)CHECK約束CHECK約束用來檢查字段值所允許的范圍,如,一個字段只能輸入整數(shù),而且限定在0-100的整數(shù),以此來保證域的完整性。CHECK既可用于列約束,也可用于表約束例
建立一個SC表,定義SCORE的取值范圍為0到100之間。USESTUDENTCREATETABLESC(SNOCHAR(5),CNOCHAR(5),SCORENUMERIC(5,1)CONSTRAINTSCORE_CHKCHECK(SCORE>=0ANDSCORE<=100));例
建立包含完整性定義的學生表USESTUDENTCREATETABLES(SNOCHAR(6)CONSTRAINTS_PRIMPRIMARYKEY,SNCHAR(8)CONSTRAINTSN_CONSNOTNULL,AGENUMERIC(2)CONSTRAINTAGE_CONSNOTNULLCONSTRAINTAGE_CHKCHECK(AGEBETWEEN15AND50),SEXCHAR(2)DEFAULT'男',DEPTCHAR(10)CONSTRAINTDEPT_CONSNOTNULL);修改基本表表結(jié)構(gòu)的修改完整性約束ALTERTABLE<表名>[ADD<新列名><數(shù)據(jù)類型>[完整性約束]][DROP<完整性約束名>][ALTERCOLUMN<列名><數(shù)據(jù)類型>]1.ADD方式例
在S表中增加一個班號列和住址列。USESTUDENTALTERTABLESADDCLASS_NOCHAR(6),ADDRESSCHAR(40)注意:使用此方式增加的新列自動填充NULL值,所以不能為增加的新列指定NOTNULL約束
。例
在SC表中增加完整性約束定義,使SCORE在0-100之間。USESTUDENTALTERTABLESCADDCONSTRAINTSCORE_CHKCHECK(SCOREBETWEEN0AND100)2.ALTER方式例
把S表中的SNO列加寬到8位字符寬度USESTUDENTALTERTABLESALTERCOLUMNSNOCHAR(8)3.DROP方式例
刪除S表中的AGE_CHK約束USESTUDENTALTERTABLESDROPCONSTRAINTAGE_CHK改變基本表的名字使用RENAME命令,可以改變基本表的名字,其語法格式為: RENAME<舊表名>TO<新表名>例
將S表的名字更改為STUDENTUSESTUDENT RENAMESTOSTUDENT刪除基本表刪除后,該表中的數(shù)據(jù)和在此表上所建的索引都被刪除,而建立在該表上的視圖不會隨之刪除,系統(tǒng)將繼續(xù)保留其定義,但已無法使用。如果重新恢復該表,這些視圖可重新使用。DROPTABLE<表名>[RESTRICT|CASCADE];例
刪除表STUDENTUSESTUDENT DROPTABLESTUDENTCASCADE;注:CASCADE不僅將表中的數(shù)據(jù)和表結(jié)構(gòu)刪除,而且會將其上的索引、視圖、觸發(fā)器等刪除;RESTRICT:如果刪除的表和其他表有約束,有視圖,觸發(fā)器等時,則無法刪除。缺省情況為:RESTRICT設計、創(chuàng)建和維護索引索引的作用在日常生活中我們會經(jīng)常遇到索引,例如圖書目錄、詞典索引等。借助索引,人們會很快地找到需要的東西。索引是數(shù)據(jù)庫隨機檢索的常用手段,它實際上就是記錄的關(guān)鍵字與其相應地址的對應表。例如,當我們要在本書中查找有關(guān)“SQL查詢”的內(nèi)容時,應該先通過目錄找到“SQL查詢”所對應的頁碼,然后從該頁碼中找出所要的信息。這種方法比直接翻閱書的內(nèi)容要快。如果把數(shù)據(jù)庫表比作一本書,則表的索引就如書的目錄一樣,通過索引可大大提高查詢速度。此外,在SQLSERVER中,行的唯一性也是通過建立唯一索引來維護的。
索引的作用可歸納為:1.加快查詢速度;2.保證行的唯一性。索引的分類1.按照索引記錄的存放位置可分為聚集索引與非聚集索引聚集索引:按照索引的字段排列記錄,并且依照排好的順序?qū)⒂涗洿鎯υ诒碇?。非聚集索引:按照索引的字段排列記錄,但是排列的結(jié)果并不會存儲在表中,而是另外存儲。2.唯一索引的概念唯一索引表示表中每一個索引值只對應唯一的數(shù)據(jù)記錄,這與表的PRIMARYKEY的特性類似,因此唯一性索引常用于PRIMARYKEY的字段上,以區(qū)別每一筆記錄。當表中有被設置為UNIQUE的字段時,SQLSERVER會自動建立一個非聚集的唯一性索引。而當表中有PRIMARYKEY的字段時,SQLSERVER會在PRIMARYKEY字段建立一個聚集索引。3.復合索引的概念復合索引是將兩個字段或多個字段組合起來建立的索引,而單獨的字段允許有重復的值。建立索引建立索引的語句是CREATEINDEX,其語法格式為: CREATE[UNIQUE][CLUSTER]INDEX<索引名>ON<表名>(<列名>[次序][{,<列名>}][次序]…)UNIQUE表明建立唯一索引。CLUSTER表示建立聚集索引。
次序用來指定索引值的排列順序,可為ASC(升序)或DESC(降序),缺省值為ASC。例
為表SC在SNO和CNO上建立唯一索引。USESTUDENTCREATEUNIQUEINDEXSCIONSC(SNO[ASC],CNO[DESC])此索引為SNO和CNO兩列的復合索引,即對SC表中的行先按SNO的遞增順序索引,對于相同的SNO,又按CNO的遞增順序索引。由于有UNIQUE的限制,所以該索引在(SNO,CNO)組合列的排序上具有唯一性,不存在重復值。刪除索引建立索引是為了提高查詢速度,但隨著索引的增多,數(shù)據(jù)更新時,系統(tǒng)會花費許多時間來維護索引。這時,應刪除不必要的索引。刪除索引的語句是DROPINDEX,其語法格式為: DROPINDEX數(shù)據(jù)表名.索引名例3.20刪除表SC的索引SCI。
DROPINDEXSC.SCI§3SQL數(shù)據(jù)查詢功能表或者視圖查詢的結(jié)果是仍是一個表。SELECT語句的執(zhí)行過程是:根據(jù)WHERE子句的檢索條件,從FROM子句指定的基本表或視圖中選取滿足條件的元組,再按照SELECT子句中指定的列,投影得到結(jié)果表。如果有GROUP子句,則將查詢結(jié)果按照<列名1>相同的值進行分組。如果GROUP子句后有HAVING短語,則只輸出滿足HAVING條件的元組。如果有ORDER子句,查詢結(jié)果還要按照<列名2>的值進行排序。SQL數(shù)據(jù)查詢功能例
查詢?nèi)w學生的學號、姓名和年齡。
SELECTSNO,SN,AGEFROMS例
查詢學生的全部信息。
SELECT*FROMS用‘*’表示S表的全部列名,而不必逐一列出。
例
查詢選修了課程的學生號。
SELECT
DISTINCTSNOFROMSC查詢結(jié)果中的重復行被去掉上述查詢均為不使用WHERE子句的無條件查詢,也稱作投影查詢。另外,利用投影查詢可控制列名的順序,并可通過指定別名改變查詢結(jié)果的列標題的名字。例
查詢?nèi)w學生的姓名、學號和年齡。
SELECTSNAME[AS]NAME,SNO,AGEFROMS其中,NAME為SNAME的別名條件查詢當要在表中找出滿足某些條件的行時,則需使用WHERE子句指定查詢條件。WHERE子句中,條件通常通過三部分來描述:1.
列名;2.
比較運算符;IN,BETWEEN,LKIEEXISTS…3.
列名、常數(shù)。運算符含義=,>,<,>=,<=,!=比較大小多重條件AND,ORBETWEENAND確定范圍IN確定集合LIKE字符匹配ISNULL空值比較大小例
查詢選修課程號為‘C1’的學生的學號和成績。SELECTSNO,SCOREFROMSCWHERECNO=’C1’例
查詢成績高于85分的學生的學號、課程號和成績。SELECTSNO,CNO,SCOREFROMSCWHERESCORE>85多重條件查詢當WHERE子句需要指定一個以上的查詢條件時,則需要使用邏輯運算符AND、OR和NOT將其連結(jié)成復合的邏輯表達式。其優(yōu)先級由高到低為:NOT、AND、OR,用戶可以使用括號改變優(yōu)先級。例
查詢選修C1或C2且分數(shù)大于等于85分學生的的學號、課程號和成績。SELECTSNO,CNO,SCOREFROMSCWHERE(CNO=’C1’ORCNO=’C2’)ANDSCORE>=85確定范圍例
查詢工資在1000至1500之間的教師的教師號、姓名及職稱。SELECTTNO,TN,PROFFROMTWHERESALBETWEEN1000AND1500等價于SELECTTNO,TN,PROFFROMTWHERESAL>=1000ANDSAL<=1500例
查詢工資不在1000至1500之間的教師的教師號、姓名及職稱。SELECTTNO,TN,PROFFROMTWHERESALNOTBETWEEN1000AND1500確定集合利用“IN”操作可以查詢屬性值屬于指定集合的元組。例
查詢選修C1或C2的學生的學號、課程號和成績。SELECTSNO,CNO,SCOREFROMSCWHERECNOIN(‘C1’,‘C2’)此語句也可以使用邏輯運算符“OR”實現(xiàn)。SELECTSNO,CNO,SCOREFROMSCWHERECNO=‘C1’
ORCNO=‘C2’利用“NOTIN”可以查詢指定集合外的元組。
例
查詢沒有選修C1,也沒有選修C2的學生的學號、課程號和成績。SELECTSNO,CNO,SCOREFROMSCWHERECNONOTIN(‘C1’,‘C2’)等價于:SELECTSNO,CNO,SCOREFROMSCWHERECNO!=‘C1’ANDCNO!=‘C2’部分匹配查詢上例均屬于完全匹配查詢,當不知道完全精確的値時,用戶還可以使用LIKE或NOTLIKE進行部分匹配查詢(也稱模糊查詢)。LIKE定義的一般格式為:<屬性名>LIKE<字符串常量>[ESCAPE’<換碼字符>’]屬性名必須為字符型,字符串常量的字符可以包含如下兩個特殊符號:%:表示任意長度的字符串;_:表示任意單個字符。如果用戶要查詢的字符串本身就含有通配符%或_,這時就要使用ESCAPE,對通配符進行轉(zhuǎn)義例
查詢所有姓張的教師的教師號和姓名。SELECTTNO,TNFROMTWHERETNLIKE‘張%’例
查詢姓名中第二個漢字是“力”的教師號和姓名。SELECTTNO,TNFROMTWHERETNLIKE‘__力%’注:一個漢字占兩個字符。例
查詢“DB_Design”課程的課程號和學分Selectcno,ccreditFromcourseWherecnamelike‘DB\_Design’escape‘\’;例
查詢以“DB_”開頭,且倒數(shù)第3個字符為i的課程的詳細情況Select*FromcourseWherecnamelike‘DB\_%i__’escape‘\’空值查詢某個字段沒有值稱之為具有空值(NULL)。通常沒有為一個列輸入值時,該列的值就是空值。空值不同于零和空格,它不占任何存儲空間。例如,某些學生選課后沒有參加考試,有選課記錄,但沒有考試成績,考試成績?yōu)榭罩?,這與參加考試,成績?yōu)榱惴值牟煌?/p>
例
查詢沒有考試成績的學生的學號和相應的課程號。SELECTSNO,CNOFROMSCWHERESCOREISNULL注意:這里的空值條件為ISNULL,不能寫成SCORE=NULL。查詢的排序當需要對查詢結(jié)果排序時,應該使用ORDERBY子句ORDERBY子句必須出現(xiàn)在其他子句之后排序方式可以指定,DESC為降序,ASC為升序,缺省時為升序例
查詢選修C1的學生學號和成績,并按成績降序排列。SELECTSNO,SCOREFROMSCWHERECNO='C1'ORDERBYSCOREDESC;例
查詢選修C2、C3、C4或C5課程的學號、課程號和成績,查詢結(jié)果按學號升序排列,學號相同再按成績降序排列。SELECTSNO,CNO,SCOREFROMSCWHERECNOIN('C2','C3','C4','C5')ORDERBYSNO,SCOREDESC;常用庫函數(shù)及統(tǒng)計匯總查詢SQL提供了許多庫函數(shù),增強了基本檢索能力。常用的庫函數(shù),如表所示函數(shù)名稱功能AVG(column)按列計算平均值SUM(column)按列計算值的總和MAX(column)求一列中的最大值MIN(column)求一列中的最小值COUNT(*|column)按列值或者行計個數(shù)注意:AVG([DISTINCT|ALL]<列名>),缺省值為ALL另外,當函數(shù)為空值時,除COUNT(*)外,都跳過空值而只處理非空值例
求學號為S1學生的總分和平均分。SELECTSUM(SCORE)[AS]TotalScore,AVG(SCORE)[AS]AveScoreFROMSCWHERESNO='S1'注意:函數(shù)SUM和AVG只能對數(shù)值型字段進行計算。例
求選修C1號課程的最高分、最低分及之間相差的分數(shù)SELECTMAX(SCORE)ASMaxScore,MIN(SCORE)ASMinScore,MAX(SCORE)-MIN(SCORE)ASDiffFROMSCWHERECNO='C1'例
求計算機系學生的總數(shù)SELECTCOUNT(SNO)FROMSWHEREDEPT='計算機'例
求學校中共有多少個系SELECTCOUNT(DISTINCTDEPT)ASDeptNumFROMS注意:加入關(guān)鍵字DISTINCT后表示消去重復行,可計算字段“DEPT“不同值的數(shù)目。COUNT函數(shù)對空值不計算,但對零進行計算。例
統(tǒng)計有數(shù)據(jù)庫(002)成績同學的人數(shù)SELECTCOUNT(SCORE)FROMSCWherecno=‘002’;上例中成績?yōu)榱愕耐瑢W計算在內(nèi),沒有成績(即為空值)的不計算。例
利用特殊函數(shù)COUNT(*)求計算機系學生的總數(shù)SELECTCOUNT(*)FROMSWHEREDEPT=‘計算機’COUNT(*)用來統(tǒng)計元組的個數(shù)不消除重復行,不允許使用DISTINCT關(guān)鍵字。分組查詢GROUPBY子句可以將查詢結(jié)果按屬性列或?qū)傩粤薪M合在行的方向上進行分組,每組在屬性列或?qū)傩粤薪M合上具有相同的值。分組后的集聚函數(shù)將作用于每一個租,即每一組都有一個函數(shù)值。例
查詢各位教師的教師號及其任課的門數(shù)。SELECTTNO,COUNT(*)ASC_NUMFROMTCGROUPBYTNOGROUPBY子句按TNO的值分組,所有具有相同TNO的元組為一組,對每一組使用函數(shù)COUNT進行計算,統(tǒng)計出各位教師任課的門數(shù)。若在分組后還要按照一定的條件進行篩選,則需使用HAVING子句。
例
查詢選修兩門以上課程的學生學號和選課門數(shù)SELECTSNO,COUNT(*)ASSC_NUMFROMSCGROUPBYSNOHAVINGCOUNT(*)>=2GROUPBY子句按SNO的值分組,所有具有相同SNO的元組為一組,對每一組使用函數(shù)COUNT進行計算,統(tǒng)計出每位學生選課的門數(shù)。HAVING子句去掉不滿足COUNT(*)>=2的組。當在一個SQL查詢中同時使用WHERE子句,GROUPBY
子句和HAVING子句時,其順序是WHERE-GROUPBY-HAVING。WHERE與HAVING子句的根本區(qū)別在于作用對象不同。WHERE子句作用于基本表或視圖,從中選擇滿足條件的元組;HAVING子句作用于組,選擇滿足條件的組,必須用于GROUPBY子句之后,但GROUPBY子句可沒有HAVING子句??捎靡恍┙y(tǒng)計功能函數(shù)例
求選課在三門以上且各門課程均及格的學生的學號及其總成績,查詢結(jié)果按總成績降序列出。SELECTSNO,SUM(SCORE)ASTotalScoreFROMSCWHERESCORE>=60GROUPBYSNOHAVINGCOUNT(*)>=3ORDERBYSUM(SCORE)DESC此語句為分組排序,執(zhí)行過程如下:1.(FROM)取出整個SC2.(WHERE)篩選SCORE>=60的元組3.(GROUPBY)將選出的元組按SNO分組4.(HAVING)篩選選課三門以上的分組5.(SELECT)以剩下的組中提取學號和總成績6.(ORDERBY)將選取結(jié)果排序ORDERBYSUM(SCORE)DESC可以改寫成 ORDERBY2DESC
2代表查詢結(jié)果的第二列。多表連接查詢數(shù)據(jù)表之間的聯(lián)系是通過表的字段值來體現(xiàn)的,這種字段稱為連接字段。連接操作的目的就是通過加在連接字段的條件將多個表連接起來,以便從多個表中查詢數(shù)據(jù)。前面的查詢都是針對一個表進行的,當查詢同時涉及兩個以上的表時,稱為連接查詢。表的連接方法:表之間滿足一定的條件的行進行連接,此時FROM子句中指明進行連接的表名,WHERE子句指明連接的列名及其連接條件。例
查詢劉偉老師所講授的課程SELECTT.TNO,TN,CNOFROMT,TCWHERE
T.TNO=TC.TNO
AND
TN=‘劉偉’這里,TN=‘劉偉’為查詢條件,而T.TNO=TC.TNO為連接條件,TNO為連接字段。連接條件的一般格式為:
[<表名1>.]<
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 酒類生產(chǎn)技術(shù)規(guī)范制度
- 易制毒安全生產(chǎn)規(guī)章制度
- 2026上半年云南林業(yè)職業(yè)技術(shù)學院招聘16人備考考試題庫附答案解析
- 安全生產(chǎn)三個清單制度
- 存貨及生產(chǎn)成本管理制度
- 2026江西吉安吉州區(qū)興泰科技股份有限公司向社會招募就業(yè)見習人員參考考試試題附答案解析
- 鄉(xiāng)鎮(zhèn)農(nóng)業(yè)標準化生產(chǎn)制度
- 2026北京國防科技大學電子對抗學院幼兒園社會招聘3人參考考試試題附答案解析
- 變電站安全生產(chǎn)獎罰制度
- 獸醫(yī)站安全生產(chǎn)制度
- 成體館加盟協(xié)議書范文范本集
- DB34T 4506-2023 通督調(diào)神針刺療法應用指南
- 02-輸電線路各階段設計深度要求
- 《認識時鐘》大班數(shù)學教案
- T-CI 178-2023 高大邊坡穩(wěn)定安全智能監(jiān)測預警技術(shù)規(guī)范
- THHPA 001-2024 盆底康復管理質(zhì)量評價指標體系
- 傷口的美容縫合減少瘢痕的形成
- MSOP(測量標準作業(yè)規(guī)范)測量SOP
- 顱鼻眶溝通惡性腫瘤的治療及護理
- 人教版四年級《上冊語文》期末試卷(附答案)
- 四川山體滑坡地質(zhì)勘察報告
評論
0/150
提交評論