Foreword國家精品資源共享課“數據庫系統及應用”于2014在“愛課程”網上線,已經3年多了。第一批“十二五”普通高等教育本科國家級規劃教材、國家精品資源共享課配套教材《數據庫系統原理與設計》(第2版)及配套教材《數據庫系統原理與設計實驗教程》(第2版)于2012年出版,也已近5年了。該套教材引起數據庫界同仁和學生的很大反響,已被全國50余所高校選作教材,4年多共印刷了9次。筆者所在學校針對“數據庫系統原理”課程開展翻轉課堂教學,從2013年試點到2015年全面實施也已經4年多了。為了更好地適應大數據時代對數據庫課程的教學需求,我們從2016年下半年開始著手對本書進行修訂。本次修訂仍然堅持“培養學生‘三會’數據庫”的目標,即會設計數據庫、會管理數據庫、會開發數據庫應用程序,強調數據庫設計與應用能力的培養,著重培養學生的應用建模能力,重點是數據庫概念模型。第3版對章節進行了適當的調整,使得結構更加合理、可用性更強。
本次修訂的主要內容包括:
(1) 對第4、6兩章涉及的大學選課系統、網上書店系統數據庫設計實例的數據庫設計流程進行了重新梳理和調整,以便更好地指導學生開展數據庫設計大作業的實踐活動。重新梳理和調整后的數據庫設計流程為:系統需求分析(需求概述和系統邊界、主要業務處理流程、功能需求分析、數據需求分析、業務規則及完整性約束分析)→數據庫概念設計(確定基本實體集及屬性、主要業務局部概念建模、定義聯系集及屬性、設計完整ER模型、檢查是否滿足需求)→數據庫邏輯設計及模式求精→數據庫物理設計→數據庫應用與安全設計。
(2) 將原第3章中的SQL數據定義與更新語言,第9章中的游標、存儲過程和觸發器等數據庫編程的內容獨立出來構成新版的第7章SQL數據定義、更新及數據庫編程,并新增TSQL語言簡介的內容,這樣有利于提高學生的數據庫編程能力。因此,新版的第3章集中介紹SQL查詢語言,有利于學生深刻理解關系數據庫邏輯模型,靈活掌握關系代數和SQL查詢語言;第3版的第9章集中介紹數據庫安全性與完整性,并深入地介紹觸發器應用于數據庫安全控制和復雜的用戶自定義完整性約束。◆數據庫系統原理與設計(第3版)(3) 對原第7、8章的內容進行了適當的壓縮,并合并作為第3版的第8章數據庫存儲結構與查詢處理。
(4) 刪除了原書第12章Web數據庫,新增了第12章數據管理技術前沿,主要內容包括:大數據的興起、大數據處理平臺和框架、數據庫面臨的挑戰、NoSQL數據庫、NewSQL數據庫。設計這一章的目的是讓學生了解數據管理技術的前沿,擴展學生的知識面。今后改版時,這一章的內容將與時俱進,不斷更新。
(5) 將原第11.3節數據庫應用開發實踐的主要內容放到與本書配套的《數據庫系統原理與設計實驗教程》(第3版)中;考慮到ASP開發技術已經過時,將原來的ASP設計實例改為JSP設計實例;第3版的第11.3節簡單介紹了對象\|關系映射框架。
(6) 調整了部分章節的內容和順序,增加和調整了部分章節的例題和習題,對部分概念和文字進行了修改。
(7) 將配套教材《數據庫系統原理與設計實驗教程》(第3版)中使用的SQL Server 2005平臺改為SQL Server 2014。
與其他教材相比,本書的主要特點如下。
(1) 強化對關系數據庫模式的理解,以模式導航圖為工具,使學生深刻理解關系數據庫邏輯模型,靈活掌握關系代數和SQL查詢語言。
(2) 以案例為驅動,通過分析應用需求來介紹數據庫建模的基本方法,著力培養學生應用建模的能力,重點是使學生深刻理解數據庫概念模型,提高數據庫設計能力。
(3) 涵蓋了關系數據庫物理存儲結構、查詢處理和查詢優化等內容,這些內容一是有利于學生更好地理解關系數據庫的物理模型,二是有利于學生更好地理解關系數據庫管理系統(DBMS)的基本原理,三是有利于學生從底層的角度理解SQL查詢。
(4) 從使用者的角度,以應用需求為驅動介紹數據庫的安全性、完整性以及事務、并發和恢復等內容,使學生深刻理解關系數據庫管理系統(DBMS)的基本原理。
(5) 增加數據庫應用開發和數據管理技術前沿介紹,一方面增強學生的實踐能力,另一方面讓學生了解數據庫的前沿和發展方向,為后續的數據庫應用開發實踐和進一步學習打下基礎。
本次修訂方案由萬常選、廖國瓊、吳京慧、劉喜平、劉愛紅等討論確定,萬常選負責第1、2、8章的修訂,廖國瓊負責第4、5、6、10章的修訂,吳京慧負責第3、7、9章的修訂,劉喜平負責第11、12章的修訂。最后,萬常選對全書的修訂稿進行了修改、補充和總纂。
本書在編寫和修訂過程中,參閱了大量的參考書目和文獻資料,在此向參考資料的作者表示衷心的感謝。
在整個編寫和修訂過程中,盡管我們一直懷著敬畏的心情、保持嚴謹的態度,也付出了辛勤的勞動,限于水平,書中不足之處仍然在所難免,敬請各位讀者批評指正,并將您的寶貴意見反饋給我們(wanchangxuan@263.net)。我們對您的厚愛致以崇高的敬意!
編者
2017年6月
第3章chapter3
SQL查詢語言接正文接標題1.1微型計算機簡介學習目標
結構化查詢語言(structured query language,SQL)是關系數據庫的標準語言,本章主要講授SQL查詢語言在數據庫中的應用。目前,幾乎所有的關系型數據庫管理系統,如Oracle、Sybase、SQL Server和Access等均采用SQL語言標準。因此,本章的教學目標主要有兩個,一是要求讀者掌握對數據庫的基本操作,并了解數據庫管理系統的基本功能;二是要求讀者熟練掌握SQL查詢語句,并運用SQL查詢語句完成對數據庫的查詢操作。學習方法
本章重在實驗,因此要求讀者結合課堂講授的知識,強化上機實訓,通過實訓加深對課堂上學過的有關概念和知識點的理解,以便達到融會貫通的學習目標。學習指南
本章的重點是3.2節、3.3節和3.4節,難點是3.4節。本章導讀
(1) SQL查詢語句對關系代數運算做了哪些擴展?
(2) 連接查詢包括哪些?它們分別用于什么地方?
(3) 在使用分組聚合查詢時需要注意什么?
(4) 相關子查詢與非相關子查詢的概念是什么?
(5) 如何理解存在量詞以及存在量詞在SQL查詢中的重要地位?
(6) 如何理解查詢表的概念?查詢表與子查詢有何異同點?
3.1SQL概述
SQL語言于1974年由Boyce等提出,并于1975—1979年在IBM公司研制的System R數據庫管理系統上實現,現已成為國際標準。
自從SQL成為國際標準以來,很多數據庫廠商都對SQL語言進行了再開發和擴展,但是包括查詢SELECT、插入INSERT、修改UPDATE、刪除DELETE、創建CREATE以及對象刪除DROP在內的標準SQL語句仍然可被用來完成幾乎所有的數據庫操作。◆數據庫系統原理與設計(第3版)第◆3章SQL查詢語言3.1.1SQL發展
SQL語言是關系數據庫的標準語言,是數據庫領域中一個主流語言,它經歷了如下幾個階段。
(1) SQL86: 第一個SQL標準,由美國國家標準局(American National Standard Institute,ANSI)公布,1987年國際標準化組織(International Organization for Standardization,ISO)通過。該標準也稱為SQL1。
(2) SQL92: 在1992年,由ISO和ANSI對SQL86進行了重新修訂,發布了第二個SQL標準SQL92,該標準也稱為SQL2。
(3) SQL99: 隨著信息技術的應用,數據庫理論和技術得到了廣泛的應用和發展。在1999年,ISO發布了反映最新數據庫理論和技術的標準SQL99,該版本在SQL2的基礎上,擴展了諸多功能,包括遞歸、觸發、面向對象技術等。該標準也稱為SQL3。
(4) SQL2003: 該標準是最新的標準,也稱SQL4,于2003年發布,包括9個部分。
① 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)。
目前,許多數據庫廠商都支持SQL92的絕大多數標準,以及SQL99和SQL2003的部分標準,并對SQL語言進行了擴展。這些擴展的SQL語言,不僅遵循標準SQL語言規定的功能,而且還增強了許多功能,并賦予SQL不同的名字,如Oracle產品將SQL稱為PL/SQL,Sybase和Microsoft SQL Server產品將SQL稱為TransactSQL。
SQL語言由4部分組成,包括數據定義語言DDL、數據操縱語言DML、數據控制語言DCL和其他,其功能如下:
(1) 數據定義語言(data definition language,DDL): 主要用于定義數據庫的邏輯結構,包括數據庫、基本表、視圖和索引等,擴展DDL還支持存儲過程、函數、對象、觸發器等的定義。DDL包括3類語言,即定義、修改和刪除。
(2) 數據操縱語言(data manipulation language,DML): 主要用于對數據庫的數據進行檢索和更新,其中更新操作包括插入、刪除和修改數據。
(3) 數據控制語言(data control language,DCL): 主要用于對數據庫的對象進行授權、用戶維護(包括創建、修改和刪除)、完整性規則定義和事務定義等。
(4) 其他: 主要是嵌入式SQL語言和動態SQL語言的定義,規定了SQL語言在宿主語言中使用的規則。擴展SQL還包括數據庫數據的重新組織、備份與恢復等功能。
3.1.2SQL特點
SQL語言因其簡單、靈活、易掌握,受到了廣大用戶的接受,SQL語言既可以作為交互式數據庫語言使用,也可以作為程序設計語言的子語言使用,它是一個兼有關系代數和元組演算特征的語言,其特點如下所述。
1. 綜合統一
(1) SQL語言集數據定義語言DDL,數據操縱語言DML和數據控制語言DCL的功能于一體,語言風格統一,可以獨立完成數據庫生命周期中的全部活動,包括定義關系模式、錄入數據以及建立數據庫、查詢、更新、維護、數據庫重構、數據庫安全性控制等一系列操作,這就為數據庫應用系統開發提供了良好的環境。例如用戶在數據庫投入運行后,還可根據需要隨時地逐步地修改模式,并不影響數據庫的運行,從而使系統具有良好的可擴充性。
(2) 在關系模型中實體和實體間的聯系均用關系表示,這種數據結構的單一性帶來了數據操作符的統一,即對實體及實體間聯系的每一種操作(如查找、插入、刪除和修改)都只需要一種操作符。
2. 高度非過程化
非關系數據模型的數據操縱語言是面向過程的語言,在完成某項操作請求時必須指定存取路徑。而用SQL語言進行數據操作,用戶只需提出“做什么”,而不必指明“怎么做”,因此用戶無須了解存取路徑,存取路徑的選擇以及SQL語句的操作過程由系統自動完成。這不僅大大減輕了用戶負擔,而且有利于提高數據獨立性。
3. 面向集合的操作方式
SQL語言采用集合操作方式,其操作對象、操作結果都是元組的集合。而非關系數據模型采用的是面向記錄的操作方式,其操作對象是一條記錄。
(1) 非關系數據模型采用的是面向記錄的操作方式,任何一個操作的對象都是一條記錄。例如: 查詢所有平均成績在80分以上的學生姓名,用戶必須說明完成該操作請求的具體處理過程,即如何用循環結構按照某條路徑一條一條地把滿足條件的學生記錄讀出來。
(2) SQL語言采用集合操作方式,不僅查詢操作的對象是元組的集合,而且一次更新(插入、刪除和修改)操作的對象也可以是元組的集合。
4. 同一種語法結構提供兩種使用方式
(1) SQL語言既是自含式語言,又是嵌入式語言,且在兩種不同的使用方式下,SQL語言的語法結構基本上是一致的。
(2) 作為自含式語言,它能夠獨立地用于聯機交互的使用方式,用戶可以在終端鍵盤上直接鍵入SQL命令對數據庫進行操作。
(3) 作為嵌入式語言,SQL語句能夠嵌入到高級語言(如Java、VC、VB、Delphi等)程序中,供程序員設計程序時使用。
5. 語言簡潔,易學易用
SQL語言功能極強,但十分簡潔,易學易用。SQL語言的動詞非常少,主要包括:
(1) 數據查詢: SELECT;
(2) 數據定義: CREATE、DROP、ALTER;
(3) 數據更新: INSERT、DELETE、UPDATE;
(4) 數據控制: GRANT、REVOKE。
……