關(guān)于我們
書單推薦
新書推薦
|
數(shù)據(jù)庫系統(tǒng)原理與設(shè)計(jì)
全書共分12章。第1章是數(shù)據(jù)庫系統(tǒng)基本概念; 第2、3章是關(guān)系數(shù)據(jù)庫基礎(chǔ); 第4、5、6章是關(guān)系數(shù)據(jù)庫設(shè)計(jì); 第7、8、9、10章是關(guān)系數(shù)據(jù)庫管理系統(tǒng); 第11、12章是數(shù)據(jù)庫應(yīng)用開發(fā)。本書強(qiáng)調(diào)數(shù)據(jù)庫應(yīng)用與設(shè)計(jì)能力的培養(yǎng), 將數(shù)據(jù)庫設(shè)計(jì)的內(nèi)容分散在第4、5、6章以及第7.6、9.6節(jié)等章節(jié)逐層推進(jìn)。
本書已在清華大學(xué)出版社數(shù)字化教學(xué)平臺智學(xué)苑(http://www.izhixue.com.cn/)上線。
本書已被多所高校選作教材,累計(jì)已發(fā)行35000余冊。
Foreword國家精品資源共享課“數(shù)據(jù)庫系統(tǒng)及應(yīng)用”于2014在“愛課程”網(wǎng)上線,已經(jīng)3年多了。第一批“十二五”普通高等教育本科國家級規(guī)劃教材、國家精品資源共享課配套教材《數(shù)據(jù)庫系統(tǒng)原理與設(shè)計(jì)》(第2版)及配套教材《數(shù)據(jù)庫系統(tǒng)原理與設(shè)計(jì)實(shí)驗(yàn)教程》(第2版)于2012年出版,也已近5年了。該套教材引起數(shù)據(jù)庫界同仁和學(xué)生的很大反響,已被全國50余所高校選作教材,4年多共印刷了9次。筆者所在學(xué)校針對“數(shù)據(jù)庫系統(tǒng)原理”課程開展翻轉(zhuǎn)課堂教學(xué),從2013年試點(diǎn)到2015年全面實(shí)施也已經(jīng)4年多了。為了更好地適應(yīng)大數(shù)據(jù)時(shí)代對數(shù)據(jù)庫課程的教學(xué)需求,我們從2016年下半年開始著手對本書進(jìn)行修訂。本次修訂仍然堅(jiān)持“培養(yǎng)學(xué)生‘三會’數(shù)據(jù)庫”的目標(biāo),即會設(shè)計(jì)數(shù)據(jù)庫、會管理數(shù)據(jù)庫、會開發(fā)數(shù)據(jù)庫應(yīng)用程序,強(qiáng)調(diào)數(shù)據(jù)庫設(shè)計(jì)與應(yīng)用能力的培養(yǎng),著重培養(yǎng)學(xué)生的應(yīng)用建模能力,重點(diǎn)是數(shù)據(jù)庫概念模型。第3版對章節(jié)進(jìn)行了適當(dāng)?shù)恼{(diào)整,使得結(jié)構(gòu)更加合理、可用性更強(qiáng)。
本次修訂的主要內(nèi)容包括:
(1) 對第4、6兩章涉及的大學(xué)選課系統(tǒng)、網(wǎng)上書店系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)實(shí)例的數(shù)據(jù)庫設(shè)計(jì)流程進(jìn)行了重新梳理和調(diào)整,以便更好地指導(dǎo)學(xué)生開展數(shù)據(jù)庫設(shè)計(jì)大作業(yè)的實(shí)踐活動。重新梳理和調(diào)整后的數(shù)據(jù)庫設(shè)計(jì)流程為:系統(tǒng)需求分析(需求概述和系統(tǒng)邊界、主要業(yè)務(wù)處理流程、功能需求分析、數(shù)據(jù)需求分析、業(yè)務(wù)規(guī)則及完整性約束分析)→數(shù)據(jù)庫概念設(shè)計(jì)(確定基本實(shí)體集及屬性、主要業(yè)務(wù)局部概念建模、定義聯(lián)系集及屬性、設(shè)計(jì)完整ER模型、檢查是否滿足需求)→數(shù)據(jù)庫邏輯設(shè)計(jì)及模式求精→數(shù)據(jù)庫物理設(shè)計(jì)→數(shù)據(jù)庫應(yīng)用與安全設(shè)計(jì)。
(2) 將原第3章中的SQL數(shù)據(jù)定義與更新語言,第9章中的游標(biāo)、存儲過程和觸發(fā)器等數(shù)據(jù)庫編程的內(nèi)容獨(dú)立出來構(gòu)成新版的第7章SQL數(shù)據(jù)定義、更新及數(shù)據(jù)庫編程,并新增TSQL語言簡介的內(nèi)容,這樣有利于提高學(xué)生的數(shù)據(jù)庫編程能力。因此,新版的第3章集中介紹SQL查詢語言,有利于學(xué)生深刻理解關(guān)系數(shù)據(jù)庫邏輯模型,靈活掌握關(guān)系代數(shù)和SQL查詢語言;第3版的第9章集中介紹數(shù)據(jù)庫安全性與完整性,并深入地介紹觸發(fā)器應(yīng)用于數(shù)據(jù)庫安全控制和復(fù)雜的用戶自定義完整性約束。◆數(shù)據(jù)庫系統(tǒng)原理與設(shè)計(jì)(第3版)(3) 對原第7、8章的內(nèi)容進(jìn)行了適當(dāng)?shù)膲嚎s,并合并作為第3版的第8章數(shù)據(jù)庫存儲結(jié)構(gòu)與查詢處理。
(4) 刪除了原書第12章Web數(shù)據(jù)庫,新增了第12章數(shù)據(jù)管理技術(shù)前沿,主要內(nèi)容包括:大數(shù)據(jù)的興起、大數(shù)據(jù)處理平臺和框架、數(shù)據(jù)庫面臨的挑戰(zhàn)、NoSQL數(shù)據(jù)庫、NewSQL數(shù)據(jù)庫。設(shè)計(jì)這一章的目的是讓學(xué)生了解數(shù)據(jù)管理技術(shù)的前沿,擴(kuò)展學(xué)生的知識面。今后改版時(shí),這一章的內(nèi)容將與時(shí)俱進(jìn),不斷更新。
(5) 將原第11.3節(jié)數(shù)據(jù)庫應(yīng)用開發(fā)實(shí)踐的主要內(nèi)容放到與本書配套的《數(shù)據(jù)庫系統(tǒng)原理與設(shè)計(jì)實(shí)驗(yàn)教程》(第3版)中;考慮到ASP開發(fā)技術(shù)已經(jīng)過時(shí),將原來的ASP設(shè)計(jì)實(shí)例改為JSP設(shè)計(jì)實(shí)例;第3版的第11.3節(jié)簡單介紹了對象\|關(guān)系映射框架。
(6) 調(diào)整了部分章節(jié)的內(nèi)容和順序,增加和調(diào)整了部分章節(jié)的例題和習(xí)題,對部分概念和文字進(jìn)行了修改。
(7) 將配套教材《數(shù)據(jù)庫系統(tǒng)原理與設(shè)計(jì)實(shí)驗(yàn)教程》(第3版)中使用的SQL Server 2005平臺改為SQL Server 2014。
與其他教材相比,本書的主要特點(diǎn)如下。
(1) 強(qiáng)化對關(guān)系數(shù)據(jù)庫模式的理解,以模式導(dǎo)航圖為工具,使學(xué)生深刻理解關(guān)系數(shù)據(jù)庫邏輯模型,靈活掌握關(guān)系代數(shù)和SQL查詢語言。
(2) 以案例為驅(qū)動,通過分析應(yīng)用需求來介紹數(shù)據(jù)庫建模的基本方法,著力培養(yǎng)學(xué)生應(yīng)用建模的能力,重點(diǎn)是使學(xué)生深刻理解數(shù)據(jù)庫概念模型,提高數(shù)據(jù)庫設(shè)計(jì)能力。
(3) 涵蓋了關(guān)系數(shù)據(jù)庫物理存儲結(jié)構(gòu)、查詢處理和查詢優(yōu)化等內(nèi)容,這些內(nèi)容一是有利于學(xué)生更好地理解關(guān)系數(shù)據(jù)庫的物理模型,二是有利于學(xué)生更好地理解關(guān)系數(shù)據(jù)庫管理系統(tǒng)(DBMS)的基本原理,三是有利于學(xué)生從底層的角度理解SQL查詢。
(4) 從使用者的角度,以應(yīng)用需求為驅(qū)動介紹數(shù)據(jù)庫的安全性、完整性以及事務(wù)、并發(fā)和恢復(fù)等內(nèi)容,使學(xué)生深刻理解關(guān)系數(shù)據(jù)庫管理系統(tǒng)(DBMS)的基本原理。
(5) 增加數(shù)據(jù)庫應(yīng)用開發(fā)和數(shù)據(jù)管理技術(shù)前沿介紹,一方面增強(qiáng)學(xué)生的實(shí)踐能力,另一方面讓學(xué)生了解數(shù)據(jù)庫的前沿和發(fā)展方向,為后續(xù)的數(shù)據(jù)庫應(yīng)用開發(fā)實(shí)踐和進(jìn)一步學(xué)習(xí)打下基礎(chǔ)。
本次修訂方案由萬常選、廖國瓊、吳京慧、劉喜平、劉愛紅等討論確定,萬常選負(fù)責(zé)第1、2、8章的修訂,廖國瓊負(fù)責(zé)第4、5、6、10章的修訂,吳京慧負(fù)責(zé)第3、7、9章的修訂,劉喜平負(fù)責(zé)第11、12章的修訂。最后,萬常選對全書的修訂稿進(jìn)行了修改、補(bǔ)充和總纂。
本書在編寫和修訂過程中,參閱了大量的參考書目和文獻(xiàn)資料,在此向參考資料的作者表示衷心的感謝。
在整個(gè)編寫和修訂過程中,盡管我們一直懷著敬畏的心情、保持嚴(yán)謹(jǐn)?shù)膽B(tài)度,也付出了辛勤的勞動,限于水平,書中不足之處仍然在所難免,敬請各位讀者批評指正,并將您的寶貴意見反饋給我們(wanchangxuan@263.net)。我們對您的厚愛致以崇高的敬意!
編者
2017年6月
萬常選,工學(xué)博士,教授,博士生導(dǎo)師,國務(wù)院政府特殊津貼專家,江西省首批“贛鄱英才555工程”領(lǐng)軍人才培養(yǎng)計(jì)劃人選,江西省高校中青年學(xué)科帶頭人,江西省普通高等學(xué)校計(jì)算機(jī)類本科專業(yè)教學(xué)指導(dǎo)委員會主任委員,江西省計(jì)算機(jī)學(xué)會副理事長,江西省“十二五”重點(diǎn)學(xué)科“計(jì)算機(jī)科學(xué)與技術(shù)”學(xué)科帶頭人,江西省首批優(yōu)勢科技創(chuàng)新團(tuán)隊(duì)“數(shù)據(jù)工程與數(shù)字媒體創(chuàng)新團(tuán)隊(duì)”領(lǐng)軍人才,江西省高校數(shù)據(jù)與知識工程重點(diǎn)實(shí)驗(yàn)室主任,江西財(cái)經(jīng)大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)科首席教授。
國家精品資源共享課、國家精品課程《數(shù)據(jù)庫系統(tǒng)及應(yīng)用》課程負(fù)責(zé)人,2013-2017年教育部高等學(xué)校管理科學(xué)與工程類專業(yè)教學(xué)指導(dǎo)委員會委員;獲江西省高等學(xué)校教學(xué)名師獎(jiǎng)、江西省“十五”優(yōu)秀研究生指導(dǎo)教師、“全省模范教師”稱號等;獲第六屆高等教育*教學(xué)成果獎(jiǎng)二等獎(jiǎng)1項(xiàng),江西省優(yōu)秀教學(xué)成果一等獎(jiǎng)2項(xiàng)、二等獎(jiǎng)3項(xiàng),江西省高校優(yōu)秀教材一等獎(jiǎng)2部。
中國計(jì)算機(jī)學(xué)會高級會員、數(shù)據(jù)庫專委會委員,主持國家自然科學(xué)基金、國家社會科學(xué)基金項(xiàng)目多項(xiàng),出版專著教材多部,在IEEE TKDE、Information Sciences、JCST、計(jì)算機(jī)學(xué)報(bào)、軟件學(xué)報(bào)、計(jì)算機(jī)研究與發(fā)展、ACM CIKM等重要期刊或國際會議發(fā)表學(xué)術(shù)論文50余篇,獲江西省高?萍汲晒(jiǎng)一等獎(jiǎng)3項(xiàng)、二等獎(jiǎng)2項(xiàng),江西省自然科學(xué)獎(jiǎng)三等獎(jiǎng)1項(xiàng)。
第1章數(shù)據(jù)庫系統(tǒng)概論1
1.1數(shù)據(jù)庫系統(tǒng)的作用1
1.1.1數(shù)據(jù)與數(shù)據(jù)管理2
1.1.2數(shù)據(jù)管理技術(shù)的產(chǎn)生與發(fā)展3
1.1.3數(shù)據(jù)庫應(yīng)用8
1.2數(shù)據(jù)模型9
1.2.1數(shù)據(jù)模型的分層10
1.2.2數(shù)據(jù)模型的組成要素11
1.2.3層次模型12
1.2.4網(wǎng)狀模型14
1.2.5關(guān)系模型15
1.3數(shù)據(jù)抽象與數(shù)據(jù)庫三級模式17
1.3.1數(shù)據(jù)抽象17
1.3.2數(shù)據(jù)庫三級模式結(jié)構(gòu)及兩層映像18
1.3.3數(shù)據(jù)庫三級模式與三層模型的聯(lián)系和區(qū)別20
1.4數(shù)據(jù)庫系統(tǒng)22
1.4.1數(shù)據(jù)庫系統(tǒng)組成22
1.4.2數(shù)據(jù)庫管理系統(tǒng)23
1.4.3數(shù)據(jù)庫系統(tǒng)的相關(guān)人員27
本章小結(jié)29
習(xí)題133
第2章關(guān)系模型與關(guān)系代數(shù)35
2.1關(guān)系模型36
2.1.1關(guān)系數(shù)據(jù)結(jié)構(gòu)36
2.1.2關(guān)系完整性約束41◆數(shù)據(jù)庫系統(tǒng)原理與設(shè)計(jì)(第3版)目錄
2.1.3關(guān)系操作46
2.2關(guān)系代數(shù)47
2.2.1傳統(tǒng)的集合運(yùn)算48
2.2.2專門的關(guān)系運(yùn)算49
2.2.3關(guān)系代數(shù)查詢綜合舉例56
本章小結(jié)60
習(xí)題261
第3章SQL查詢語言63
3.1SQL概述63
3.1.1SQL發(fā)展64
3.1.2SQL特點(diǎn)65
3.1.3SQL查詢基本概念66
3.2單表查詢67
3.2.1投影運(yùn)算70
3.2.2選擇運(yùn)算73
3.2.3排序運(yùn)算78
3.2.4查詢表79
3.2.5聚合查詢79
3.3連接查詢81
3.3.1等值與非等值連接81
3.3.2自表連接85
3.3.3外連接86
3.4嵌套子查詢87
3.4.1使用IN的子查詢88
3.4.2使用比較運(yùn)算符的子查詢91
3.4.3使用存在量詞EXISTS的子查詢92
3.4.4復(fù)雜子查詢實(shí)例96
3.5集合運(yùn)算99
3.6SQL查詢一般格式101
本章小結(jié)103
習(xí)題3103
第4章數(shù)據(jù)庫建模107
4.1數(shù)據(jù)庫設(shè)計(jì)過程108
4.2ER模型基本概念及表示109
4.2.1實(shí)體與實(shí)體集109
4.2.2屬性110
4.2.3聯(lián)系與聯(lián)系集112
4.3約束114
4.3.1映射約束114
4.3.2碼約束與聯(lián)系集的屬性安置116
4.3.3依賴約束118
4.3.4參與約束119
4.3.5多值聯(lián)系119
4.4弱實(shí)體集120
4.5擴(kuò)展ER特征121
4.6ER建模問題123
4.6.1ER建模的基本原則123
4.6.2依賴約束的建模128
4.6.3多值聯(lián)系的建模130
4.7數(shù)據(jù)庫概念設(shè)計(jì)實(shí)例——大學(xué)選課系統(tǒng)133
4.7.1概念設(shè)計(jì)任務(wù)133
4.7.2系統(tǒng)需求分析133
4.7.3數(shù)據(jù)庫概念設(shè)計(jì)138
4.8邏輯設(shè)計(jì)——ER模型轉(zhuǎn)化為關(guān)系模型144
4.8.1ER模型轉(zhuǎn)化方法144
4.8.2大學(xué)選課系統(tǒng)ER模型轉(zhuǎn)化實(shí)例149
本章小結(jié)153
習(xí)題4154
第5章關(guān)系數(shù)據(jù)理論與模式求精157
5.1問題提出158
5.2函數(shù)依賴定義160
5.3范式163
5.3.1第一范式(1NF)——碼163
5.3.2第二范式(2NF)——全部是碼164
5.3.3第三范式(3NF)——僅僅是碼164
5.3.4BoyceCodd范式(BCNF)165
5.4函數(shù)依賴?yán)碚?67
5.4.1函數(shù)依賴集閉包167
5.4.2屬性集閉包168
5.4.3正則覆蓋170
5.4.4無損連接分解172
5.4.5保持依賴分解173
5.5模式分解算法173
5.5.1BCNF分解算法173
5.5.23NF分解算法175
5.6數(shù)據(jù)庫模式求精176
本章小結(jié)178
習(xí)題5179
第6章關(guān)系數(shù)據(jù)庫設(shè)計(jì)實(shí)例——網(wǎng)上書店182
6.1系統(tǒng)需求分析183
6.1.1需求概述和系統(tǒng)邊界183
6.1.2主要業(yè)務(wù)處理流程183
6.1.3功能需求分析183
6.1.4數(shù)據(jù)需求分析185
6.1.5業(yè)務(wù)規(guī)則及完整性約束分析186
6.2數(shù)據(jù)庫概念設(shè)計(jì)188
6.2.1確定基本實(shí)體集及屬性188
6.2.2主要業(yè)務(wù)局部概念建模190
6.2.3定義聯(lián)系集及屬性196
6.2.4完整E\|R模型198
6.2.5檢查是否滿足需求198
6.3數(shù)據(jù)庫邏輯設(shè)計(jì)200
6.4模式求精207
本章小結(jié)207
習(xí)題6208
第7章SQL數(shù)據(jù)定義、更新及數(shù)據(jù)庫編程210
7.1SQL數(shù)據(jù)定義語言211
7.1.1數(shù)據(jù)庫的定義211
7.1.2基本表的定義216
7.1.3索引的定義219
7.2SQL數(shù)據(jù)更新語言221
7.2.1插入數(shù)據(jù)221
7.2.2刪除數(shù)據(jù)223
7.2.3修改數(shù)據(jù)224
7.3視圖225
7.3.1定義視圖225
7.3.2查詢視圖228
7.3.3視圖更新229
7.3.4刪除視圖230
7.4T\|SQL語言簡介231
7.4.1表達(dá)式231
7.4.2函數(shù)232
7.4.3流程控制語句236
7.5游標(biāo)237
7.5.1游標(biāo)的定義與使用238
7.5.2當(dāng)前游標(biāo)集的修改與刪除241
7.6存儲過程242
7.6.1創(chuàng)建存儲過程242
7.6.2執(zhí)行存儲過程246
7.6.3修改和刪除存儲過程247
7.7觸發(fā)器248
7.7.1創(chuàng)建觸發(fā)器249
7.7.2修改和刪除觸發(fā)器254
本章小結(jié)256
習(xí)題7257
第8章數(shù)據(jù)庫存儲結(jié)構(gòu)與查詢處理262
8.1文件組織與記錄組織263
8.1.1存儲介質(zhì)263
8.1.2存儲訪問264
8.1.3文件組織與文件中記錄的組織265
8.2索引與散列270
8.2.1索引基本概念270
8.2.2順序索引271
8.2.3B+樹索引273
8.2.4散列277
8.3查詢處理281
8.3.1查詢處理過程281
8.3.2查詢代價(jià)度量283
8.3.3選擇運(yùn)算284
8.3.4連接運(yùn)算286
8.3.5其他運(yùn)算293
8.3.6表達(dá)式計(jì)算295
8.4查詢優(yōu)化296
8.4.1查詢優(yōu)化實(shí)例296
8.4.2關(guān)系表達(dá)式轉(zhuǎn)換297
8.4.3查詢優(yōu)化策略298
8.5物理數(shù)據(jù)庫設(shè)計(jì)299
本章小結(jié)302
習(xí)題8306
第9章數(shù)據(jù)庫安全性與完整性308
9.1數(shù)據(jù)庫安全性308
9.1.1數(shù)據(jù)庫安全概述309
9.1.2SQL Server 安全機(jī)制312
9.1.3觸發(fā)器實(shí)現(xiàn)安全性320
9.2數(shù)據(jù)庫完整性320
9.2.1數(shù)據(jù)庫完整性概述320
9.2.2SQL Server完整性321
9.2.3使用規(guī)則和觸發(fā)器實(shí)現(xiàn)完整性328
9.3數(shù)據(jù)庫應(yīng)用與安全設(shè)計(jì)329
9.3.1數(shù)據(jù)庫安全性控制329
9.3.2數(shù)據(jù)庫完整性控制332
9.3.3存儲過程設(shè)計(jì)335
本章小結(jié)338
習(xí)題9339
第10章事務(wù)管理與恢復(fù)340
10.1事務(wù)341
10.1.1問題背景341
10.1.2事務(wù)概念342
10.1.3事務(wù)特性343
10.1.4事務(wù)并發(fā)執(zhí)行與調(diào)度344
10.1.5事務(wù)調(diào)度及正確性準(zhǔn)則346
10.2并發(fā)控制349
10.2.1基于封鎖的協(xié)議349
10.2.2兩階段封鎖協(xié)議352
10.3恢復(fù)與備份354
10.3.1故障分類及恢復(fù)策略354
10.3.2事務(wù)訪問數(shù)據(jù)方式355
10.3.3基于日志的故障恢復(fù)策略357
10.3.4檢查點(diǎn)360
10.3.5備份與介質(zhì)故障恢復(fù)363
本章小結(jié)364
習(xí)題10366
第11章數(shù)據(jù)庫應(yīng)用開發(fā)368
11.1數(shù)據(jù)庫系統(tǒng)的體系結(jié)構(gòu)369
11.1.1軟件開發(fā)體系結(jié)構(gòu)概述369
11.1.2C/S體系結(jié)構(gòu)370
11.1.3B/S體系結(jié)構(gòu)372
11.1.4C/S與B/S結(jié)構(gòu)的結(jié)合375
11.1.5常用開發(fā)體系結(jié)構(gòu)377
11.2數(shù)據(jù)庫訪問技術(shù)379
11.2.1ODBC API和ODBC庫380
11.2.2MFC DAO381
11.2.3RDO382
11.2.4OLE DB383
11.2.5ADO385
11.2.6ADO.NET386
11.2.7JDBC389
11.2.8數(shù)據(jù)庫訪問技術(shù)小結(jié)392
11.3對象關(guān)系映射框架394
本章小結(jié)397
習(xí)題11399
第12章數(shù)據(jù)管理技術(shù)前沿400
12.1大數(shù)據(jù)的興起401
12.1.1大數(shù)據(jù)的概念401
12.1.2從數(shù)據(jù)庫到大數(shù)據(jù)403
12.1.3大數(shù)據(jù)處理模式404
12.2大數(shù)據(jù)處理平臺和框架405
12.2.1Apache Hadoop406
12.2.2Spark409
12.2.3Storm410
12.3數(shù)據(jù)庫面臨的挑戰(zhàn)412
12.3.1MySpace數(shù)據(jù)庫架構(gòu)變化412
12.3.2數(shù)據(jù)庫可擴(kuò)展性問題的解決方法414
12.3.3數(shù)據(jù)庫的發(fā)展416
12.4NoSQL數(shù)據(jù)庫417
12.4.1鍵值數(shù)據(jù)庫Redis417
12.4.2文檔數(shù)據(jù)庫MongoDB421
12.4.3列數(shù)據(jù)庫HBase426
12.4.4圖數(shù)據(jù)庫Neo4j429
12.5NewSQL數(shù)據(jù)庫433
12.5.1VoltDB434
12.5.2NuoDB437
本章小結(jié)440
習(xí)題12440
參考文獻(xiàn)441
第3章chapter3
SQL查詢語言接正文接標(biāo)題1.1微型計(jì)算機(jī)簡介學(xué)習(xí)目標(biāo)
結(jié)構(gòu)化查詢語言(structured query language,SQL)是關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言,本章主要講授SQL查詢語言在數(shù)據(jù)庫中的應(yīng)用。目前,幾乎所有的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),如Oracle、Sybase、SQL Server和Access等均采用SQL語言標(biāo)準(zhǔn)。因此,本章的教學(xué)目標(biāo)主要有兩個(gè),一是要求讀者掌握對數(shù)據(jù)庫的基本操作,并了解數(shù)據(jù)庫管理系統(tǒng)的基本功能;二是要求讀者熟練掌握SQL查詢語句,并運(yùn)用SQL查詢語句完成對數(shù)據(jù)庫的查詢操作。學(xué)習(xí)方法
本章重在實(shí)驗(yàn),因此要求讀者結(jié)合課堂講授的知識,強(qiáng)化上機(jī)實(shí)訓(xùn),通過實(shí)訓(xùn)加深對課堂上學(xué)過的有關(guān)概念和知識點(diǎn)的理解,以便達(dá)到融會貫通的學(xué)習(xí)目標(biāo)。學(xué)習(xí)指南
本章的重點(diǎn)是3.2節(jié)、3.3節(jié)和3.4節(jié),難點(diǎn)是3.4節(jié)。本章導(dǎo)讀
(1) SQL查詢語句對關(guān)系代數(shù)運(yùn)算做了哪些擴(kuò)展?
(2) 連接查詢包括哪些?它們分別用于什么地方?
(3) 在使用分組聚合查詢時(shí)需要注意什么?
(4) 相關(guān)子查詢與非相關(guān)子查詢的概念是什么?
(5) 如何理解存在量詞以及存在量詞在SQL查詢中的重要地位?
(6) 如何理解查詢表的概念?查詢表與子查詢有何異同點(diǎn)?
3.1SQL概述
SQL語言于1974年由Boyce等提出,并于1975—1979年在IBM公司研制的System R數(shù)據(jù)庫管理系統(tǒng)上實(shí)現(xiàn),現(xiàn)已成為國際標(biāo)準(zhǔn)。
自從SQL成為國際標(biāo)準(zhǔn)以來,很多數(shù)據(jù)庫廠商都對SQL語言進(jìn)行了再開發(fā)和擴(kuò)展,但是包括查詢SELECT、插入INSERT、修改UPDATE、刪除DELETE、創(chuàng)建CREATE以及對象刪除DROP在內(nèi)的標(biāo)準(zhǔn)SQL語句仍然可被用來完成幾乎所有的數(shù)據(jù)庫操作。◆數(shù)據(jù)庫系統(tǒng)原理與設(shè)計(jì)(第3版)第◆3章SQL查詢語言3.1.1SQL發(fā)展
SQL語言是關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言,是數(shù)據(jù)庫領(lǐng)域中一個(gè)主流語言,它經(jīng)歷了如下幾個(gè)階段。
(1) SQL86: 第一個(gè)SQL標(biāo)準(zhǔn),由美國國家標(biāo)準(zhǔn)局(American National Standard Institute,ANSI)公布,1987年國際標(biāo)準(zhǔn)化組織(International Organization for Standardization,ISO)通過。該標(biāo)準(zhǔn)也稱為SQL1。
(2) SQL92: 在1992年,由ISO和ANSI對SQL86進(jìn)行了重新修訂,發(fā)布了第二個(gè)SQL標(biāo)準(zhǔn)SQL92,該標(biāo)準(zhǔn)也稱為SQL2。
(3) SQL99: 隨著信息技術(shù)的應(yīng)用,數(shù)據(jù)庫理論和技術(shù)得到了廣泛的應(yīng)用和發(fā)展。在1999年,ISO發(fā)布了反映最新數(shù)據(jù)庫理論和技術(shù)的標(biāo)準(zhǔn)SQL99,該版本在SQL2的基礎(chǔ)上,擴(kuò)展了諸多功能,包括遞歸、觸發(fā)、面向?qū)ο蠹夹g(shù)等。該標(biāo)準(zhǔn)也稱為SQL3。
(4) SQL2003: 該標(biāo)準(zhǔn)是最新的標(biāo)準(zhǔn),也稱SQL4,于2003年發(fā)布,包括9個(gè)部分。
① ISO/IEC 9075—1: Framework(SQL/Framework);
② ISO/IEC 9075—2: Foundation(SQL/Foundation);
③ ISO/IEC 9075—3: Call Level Interface(SQL/CLI);
④ ISO/IEC 9075—4: Persistent Stored Modules(SQL/PSM);
⑤ ISO/IEC 9075—9: Management of External Data(SQL/MED);
⑥ ISO/IEC 9075—10: Object Language Bindings(SQL/OLB);
⑦ ISO/IEC 9075—11: Information and Definition Schemas(SQL/Schemata);
⑧ ISO/IEC 9075—13: Java Routines and Types Using the Java Programming Language(SQL/JRT);
⑨ ISO/IEC 9075—14: XMLRelated Specifications(SQL/XML)。
目前,許多數(shù)據(jù)庫廠商都支持SQL92的絕大多數(shù)標(biāo)準(zhǔn),以及SQL99和SQL2003的部分標(biāo)準(zhǔn),并對SQL語言進(jìn)行了擴(kuò)展。這些擴(kuò)展的SQL語言,不僅遵循標(biāo)準(zhǔn)SQL語言規(guī)定的功能,而且還增強(qiáng)了許多功能,并賦予SQL不同的名字,如Oracle產(chǎn)品將SQL稱為PL/SQL,Sybase和Microsoft SQL Server產(chǎn)品將SQL稱為TransactSQL。
SQL語言由4部分組成,包括數(shù)據(jù)定義語言DDL、數(shù)據(jù)操縱語言DML、數(shù)據(jù)控制語言DCL和其他,其功能如下:
(1) 數(shù)據(jù)定義語言(data definition language,DDL): 主要用于定義數(shù)據(jù)庫的邏輯結(jié)構(gòu),包括數(shù)據(jù)庫、基本表、視圖和索引等,擴(kuò)展DDL還支持存儲過程、函數(shù)、對象、觸發(fā)器等的定義。DDL包括3類語言,即定義、修改和刪除。
(2) 數(shù)據(jù)操縱語言(data manipulation language,DML): 主要用于對數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行檢索和更新,其中更新操作包括插入、刪除和修改數(shù)據(jù)。
(3) 數(shù)據(jù)控制語言(data control language,DCL): 主要用于對數(shù)據(jù)庫的對象進(jìn)行授權(quán)、用戶維護(hù)(包括創(chuàng)建、修改和刪除)、完整性規(guī)則定義和事務(wù)定義等。
(4) 其他: 主要是嵌入式SQL語言和動態(tài)SQL語言的定義,規(guī)定了SQL語言在宿主語言中使用的規(guī)則。擴(kuò)展SQL還包括數(shù)據(jù)庫數(shù)據(jù)的重新組織、備份與恢復(fù)等功能。
3.1.2SQL特點(diǎn)
SQL語言因其簡單、靈活、易掌握,受到了廣大用戶的接受,SQL語言既可以作為交互式數(shù)據(jù)庫語言使用,也可以作為程序設(shè)計(jì)語言的子語言使用,它是一個(gè)兼有關(guān)系代數(shù)和元組演算特征的語言,其特點(diǎn)如下所述。
1. 綜合統(tǒng)一
(1) SQL語言集數(shù)據(jù)定義語言DDL,數(shù)據(jù)操縱語言DML和數(shù)據(jù)控制語言DCL的功能于一體,語言風(fēng)格統(tǒng)一,可以獨(dú)立完成數(shù)據(jù)庫生命周期中的全部活動,包括定義關(guān)系模式、錄入數(shù)據(jù)以及建立數(shù)據(jù)庫、查詢、更新、維護(hù)、數(shù)據(jù)庫重構(gòu)、數(shù)據(jù)庫安全性控制等一系列操作,這就為數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)提供了良好的環(huán)境。例如用戶在數(shù)據(jù)庫投入運(yùn)行后,還可根據(jù)需要隨時(shí)地逐步地修改模式,并不影響數(shù)據(jù)庫的運(yùn)行,從而使系統(tǒng)具有良好的可擴(kuò)充性。
(2) 在關(guān)系模型中實(shí)體和實(shí)體間的聯(lián)系均用關(guān)系表示,這種數(shù)據(jù)結(jié)構(gòu)的單一性帶來了數(shù)據(jù)操作符的統(tǒng)一,即對實(shí)體及實(shí)體間聯(lián)系的每一種操作(如查找、插入、刪除和修改)都只需要一種操作符。
2. 高度非過程化
非關(guān)系數(shù)據(jù)模型的數(shù)據(jù)操縱語言是面向過程的語言,在完成某項(xiàng)操作請求時(shí)必須指定存取路徑。而用SQL語言進(jìn)行數(shù)據(jù)操作,用戶只需提出“做什么”,而不必指明“怎么做”,因此用戶無須了解存取路徑,存取路徑的選擇以及SQL語句的操作過程由系統(tǒng)自動完成。這不僅大大減輕了用戶負(fù)擔(dān),而且有利于提高數(shù)據(jù)獨(dú)立性。
3. 面向集合的操作方式
SQL語言采用集合操作方式,其操作對象、操作結(jié)果都是元組的集合。而非關(guān)系數(shù)據(jù)模型采用的是面向記錄的操作方式,其操作對象是一條記錄。
(1) 非關(guān)系數(shù)據(jù)模型采用的是面向記錄的操作方式,任何一個(gè)操作的對象都是一條記錄。例如: 查詢所有平均成績在80分以上的學(xué)生姓名,用戶必須說明完成該操作請求的具體處理過程,即如何用循環(huán)結(jié)構(gòu)按照某條路徑一條一條地把滿足條件的學(xué)生記錄讀出來。
(2) SQL語言采用集合操作方式,不僅查詢操作的對象是元組的集合,而且一次更新(插入、刪除和修改)操作的對象也可以是元組的集合。
4. 同一種語法結(jié)構(gòu)提供兩種使用方式
(1) SQL語言既是自含式語言,又是嵌入式語言,且在兩種不同的使用方式下,SQL語言的語法結(jié)構(gòu)基本上是一致的。
(2) 作為自含式語言,它能夠獨(dú)立地用于聯(lián)機(jī)交互的使用方式,用戶可以在終端鍵盤上直接鍵入SQL命令對數(shù)據(jù)庫進(jìn)行操作。
(3) 作為嵌入式語言,SQL語句能夠嵌入到高級語言(如Java、VC、VB、Delphi等)程序中,供程序員設(shè)計(jì)程序時(shí)使用。
5. 語言簡潔,易學(xué)易用
SQL語言功能極強(qiáng),但十分簡潔,易學(xué)易用。SQL語言的動詞非常少,主要包括:
(1) 數(shù)據(jù)查詢: SELECT;
(2) 數(shù)據(jù)定義: CREATE、DROP、ALTER;
(3) 數(shù)據(jù)更新: INSERT、DELETE、UPDATE;
(4) 數(shù)據(jù)控制: GRANT、REVOKE。
……
你還可能感興趣
我要評論
|