數據庫技術與應用_第1頁
數據庫技術與應用_第2頁
數據庫技術與應用_第3頁
數據庫技術與應用_第4頁
數據庫技術與應用_第5頁
已閱讀5頁,還剩119頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、數據庫技術與應用課程負責人 黃崇本 編委會名單編委會名單主任:俞瑞釗副主任:陳慶章 周必水 劉加海委員 (以姓氏筆畫為序)王 雷 王筱慧 方 程 方錦明 盧菊洪 代紹慶呂何新 朱 煒 劉向榮 江愛民 江錦祥 孫光第李天真 李永平 李良財 李明鈞 李益明 余根墀汪志達 沈鳳池 沈安衢 張 元 張學輝 張錦祥 張德發 陳月波 陳曉燕 邵應珍 范劍波 歐陽江林周國民 周建陽 趙小明 胡海影 秦學禮 徐文杰 凌 彥 曹哲新 戚海燕 龔祥國 章劍林 蔣黎紅 董方武 魯俊生 謝 川 謝曉飛 樓 豐 樓程偉 鞠洪堯秘書長:熊盛新 1.本軟件用PowerPoint制作而成,播放亦在其狀態下進行,為了更好地使用

2、該軟件,使用者需掌握PowerPoint的基本操作原理和方法。 .本軟件內容豐富、新穎,突破傳統教學模式,在多媒體教室使用時,使用者應注意這一變化,改變教學方法,充分發揮其功效。同時也應注意本軟件仍是一教學輔助工具,授課時應與講授相結合使其更好地為教學服務。.本軟件內容完整,自成體系,對于使用者的不同情況,用本軟件授課時,可補充所需內容,鏈入其它媒體信息,或同其它軟(如CS ChemDraw等)共同使用,以達到多媒體輔助教學的良好效果。.多媒體教學信息量大,傳遞速度快,用本軟件授課時,應 熟悉播放程序,注意控制播放速度,要使觀看者有充足的思 考時間。注意事項 數據庫技術是計算機科學技術中發展最

3、快的應用之一,已經成為計算機信息系統與應用系統的核心技術,它與網絡技術構成計算機應用的兩個平臺。數據庫技術與應用課程已成為高職高專院校計算機教學中的主干課程,是計算機應用專業的必修基礎課程。 本著高職高專教學突出理論知識的應用和實踐能力的培養,基礎理論以必需、夠用為度,專業教學加強針對性和實用性等原則,將課程的相關內容分為基礎篇、應用篇和實訓篇。課程中既安排了目前使用非常廣泛的桌面數據庫管理系統Access,讓學生學會使用Access數據庫的基本方法,也全面介紹了當前主流大型網絡數據庫系統SQL Server ,同時還介紹了數據庫應用系統開發的基本方法。 前 言第1章 數據庫技術概論 第2章

4、關系數據庫 第3章 關系數據庫語言SQL 第4章 數據庫設計 數據庫技術與應用 之 基礎篇1.1 數據與數據管理 1.2 數據管理技術的發展 1.3 數據庫基本概念 1.4 數據庫系統的體系結構 1.5 數據庫保護 第一章 數據庫技術概論1.1 數據與數據管理1什么是數據庫 數據庫是長期存儲在計算機內有組織、可共享的數據集合。數據庫好比是存放數據的倉庫,里面存放各式各樣的相關數據。 圖書館可視作一個數據庫,書架對應表格,書籍對應原始數據,書名或作者名的目錄卡片對應索引2數據與信息 數據是指用符號記錄下來的可以區別的信息;信息是關于現實世界中事物的存在方式或運動形態的反映,是人們進行各種活動所需

5、的知識。數據是信息的載體,信息是被人們消化的數據 1.1數據與數據管理3數據處理 數據處理指將數據轉換成信息的過程 ,廣義也講,數據處理包括對數據的收集、存儲、傳播、檢索、分類、加工或計算、打印各類報表或輸出各種需要的圖形等一系列活動;狹義也講,數據是指對所輸入的數據進行加工整理。4數據管理 在數據處理的一系列活動中,數據收集、存儲、傳播、檢索、分類等操作是基本環節,這些基本環節統稱為數據管理。數據與信息之間的關系可以表示為: 信息 = 數據 + 數據處理1.2 數據管理技術的發展數據管理技術發展的三個階段計算機數據管理大致經歷了三個階段:人工管理方式階段文件管理方式階段數據庫 管理方式階段

6、1.2.1 人工管理方式階段1基本情況 20世紀50年代中期以前,計算機主要用于科學計算。硬件方面,外存儲器只有卡片、紙帶、磁帶,沒有像磁盤這樣的可以隨機訪問、直接存取的外部存儲設備。軟件方面,沒有專門管理數據的軟件,數據由計算機或處理它的程序自行攜帶。數據處理方式基本是批處理。1.2.1 人工管理方式階段2特點特點1:數據和程序不具有獨立性。一組數據對應一組程序,這就使得程序依賴于數據,如果數據的類型、格式或者數據量、存取方法、輸入輸出方式等改變了,程序必須做相應的修改。特點2:數據不能長期保存。由于數據是面向應用程序的,在一個程序中定義的數據,無法被其它程序利用,因此,程序與程序之間存在大

7、量的重復數據。特點3:系統中沒有對數據進行管理的軟件。數據管理任務,包括存儲結構、存取方法、輸入輸出方式等完全由程序設計人員 自負其責,這就給應用程序設計人員增加了很大的負擔。1.2.2 文件管理方式階段1基本情況 20世紀50年代后期至60年代中后期,大量的數據存儲、檢索和維護成為緊迫的需求。數據處理方式有批處理,也有聯機實時處理。程序與數據有了一定的獨立性,程序與數據分開存儲,有了程序文件和數據文件的區別。數據文件可以長期保存在外存儲器上多次存取,如進行查詢、修改、插入、刪除等操作。數據的存取以記錄為基本單位,并進行了多種文件組織形式,如順序文件、索引文件、隨機文件等。在文件系統的支持下,

8、數據的邏輯結構與物理結構之間可以有一定的差別,邏輯結構與物理結構之間的轉換由文件系統的趣取方法來實現。數據與程序之間有設備獨立性,程序只需用文件名訪問數據,不必關心數據的物理位置。這樣,程序員可以集中精力在數據處理的算法上,而不必考慮數據存儲的具體細節。1.2.2 文件管理方式階段2存在問題問題1:據冗余大。數據冗余是指不必要的重復存儲,同一數據項重復出現在多個文件中。問題2:缺乏數據獨立性。文件系統中的數據文件是為某一特定的應用而設計的,數據與程序相互依賴,如果改變數據的邏輯結構或文件的組織方法,必須修改相應的應用程序,反之也是。問題3:數據無集中管理。數據文件均由相應的應用程序管理和維護,

9、沒有統一的管理機制。造成數據文件之間無法進行聯系,不能反映現實世界事物之間的聯系。1.2.3 數據庫管理方式階段1基本情況 從20世紀60年代后期開始,需要計算機管理的數據量急劇增長,并且對數據共享的需求日益增強。為了解決數據的獨立性問題,實現數據的統一管理,達到數據共享的目的,出現了數據庫技術。數據庫是通用化的相關數據集合。它不僅包括數據本身,而且包括關于數據之間的聯系。為數據庫的建立、使用和維護而配置的軟件稱為數據庫管理系統(DBMS)。它是在操作系統支持下運行的。目前較為流行的數據庫管理系統包括:Oracle、Informix、SQL server及微機上DBMS(dDBASE、FoxB

10、ASE、FoxPro等)。 數據庫已成為各類信息系統的核心基礎。1.2.3 數據庫管理方式階段2優點實現數據共享,減少數據冗余。數據庫中存放通用化的綜合數據,某一應用通常僅使用總體數據的子集。 數據高度結構化。數據庫中的數據是有結構的,它是用某種數據模型表示出來的,這種結構既反映文件內數據之間的聯系,也反映文件之間的聯系。具有較高的數據獨立性。在數據庫系統中,DBMS提供映象功能,確保應用程序對數據結構和存取方法有較高的獨立性。數據的物理存儲結構與用戶看到的邏輯結構可以有很大的差別。用戶只以簡單的邏輯結構來操作數據,無需考慮數據在存儲器上的物理位置與結構。有統一的數據控制功能。數據庫作為用戶與

11、應用程序的共享資源,對數據的存取往往是并發的,即多個用戶同時使用同一個數據庫。數據庫管理系統必須提供并發控制功能、數據的安全性控制功能和數據完整性控制功能。1.3 數據庫基本概念1數據庫系統(DBS或DBAS) 數據庫系統(DBS)也稱為數據庫應用系統(DBAS),是指具有管理和控制數據庫功能的計算機應用系統。數據庫系統由5部分組成:硬件系統、數據庫集合、數據庫管理系統及相關軟件、數據庫管理員(DBA)和用戶。硬件系統是整個數據庫系統的基礎,數據庫集合是若干個設計合理、滿足應用需求的數據庫。數據管理系統是為數據庫的建立、使用和維護而配置的軟件,是數據庫系統的核心組成部分;相關軟件是支持軟件,如

12、操作系統等。數據庫管理員是全面負責建立、維護和管理數據庫系統的人員。用戶是最終系統的使用和操作人員。 1.3 數據庫基本概念2DBA職責 1.安裝和升級數據庫服務器(如ORACLE.、MICROSOFT SQL SERVER),以及應用程序工具 2 數據庫設計系統存儲方案,并制定未來的存儲需求計劃 3 開發人員設計了一個應用,就需要DBA來創建數據庫存儲結構4 開發人員設計了一個應用,就需要DBA來創建數據庫對象 5 根據開發人員的反饋信息,必要的時候,修改數據庫的結構 6 登記數據庫的用戶,維護數據庫的安全性7 保證數據庫的使用符合知識產權相關法規8 監控和優化數據庫的性能9 控制和監控用戶

13、對數據庫的存取訪問 10 制定數據庫備份計劃,災難出現時對數據庫信息進行恢復 11維護適當介質上的存檔或者備份數據12備份和恢復數據庫13. 聯系數據庫系統的生產廠商,跟蹤技術信息 。DBA的認證 : IBM ORACLE MICROSOFT 1.3 數據庫基本概念3數據庫管理系統(DBMS)數據庫管理系統(DBMS)作為數據庫系統的核心軟件,其主要目標是數據成為方便用戶使用的資源,易于為各類用戶所共享,并增加數據的安全性、完整性和可用性。DBMS具有下列功能:數據庫的定義功能提供數據定義語言DDL或操作命令,以便對各級數據模式進行精確的描述。1.3 數據庫基本概念3數據庫管理系統(DBMS)

14、數據操縱功能 為了對數據庫中的數據進行追加、插入、修改、刪除、檢索等操作命令,稱為數據操作語言DML。可以分為兩類:一類是DML可以獨立交互式使用,不依賴于任何程序設計語言,稱為自含或自主型語言。另一類是宿主型DML,嵌入到宿主語言中使用。如嵌入到C程序設計語言中,在使用高級語言編寫的應用程序中,需要調用數據庫中的數據時,則要用宿主型DML語句來操縱數據。1.3 數據庫基本概念3數據庫管理系統(DBMS)數據庫運行控制功能數據庫中的數據是提供給多個用戶共享的,用戶對數據的存取可能是并發的,即多個用戶同時使用一個數據庫。DBMS必須提供以下3方面的數據控制功能:并發控制功能,數據的安全性控制。數

15、據的完整性控制。數據字典數據字典DD中存放著對實際數據庫各級模式所做的定義,即對數據庫結構的描述。這些數據是數據庫系統中有關數據的數據,稱之為元數據。DD提供了對數據庫數據描述的集中管理手段,對數據庫的使用和操作都通過查閱數據字典來進行。1.3 數據庫基本概念4數據模型 數據模型是指數據以及數據之間的聯系的描述 數據庫管理系統所支持的數據模型有四種:層次模型、網狀模型、關系模型、面向對象模型。 層次模型用樹形結構來表示各類實體以及實體間的聯系。每個結點表示一個記錄類型,結點之間的連線表示記錄類型間的聯系,這種聯系只能是父子聯系。網狀數據模型是一種比層次模型更具普遍性的結構,它去掉了層次模型的兩

16、個限制,允許多個結點沒有雙親結點,允許結點有多個雙親結點,此外它還允許兩個結點之間有多種聯系(稱之為復合聯系)。在用戶看來,一個關系模型的邏輯結構是一張二維表,它由行和列組成 1.4 數據庫系統的體系結構1模式的概論 模式是數據庫中全體數據的邏輯結構和特征的描述,它僅僅涉及模式的描述,不涉及具體的值。2數據庫系統的三級體系結構用戶使用的數據視圖叫做外模式,又稱子模式,是一種局部的邏輯數據視圖,表示用戶所理解的實體、實體屬性和實體關系。全局的邏輯數據視圖叫概念模式,簡稱為模式,是數據庫管理員所看到的實體、實體屬性和實體之間的關系。數據的物理存儲模式叫做內模式,也稱物理模式。 子模式是模式的子集,

17、可以從模式推導出來。1.4 數據庫系統的體系結構數據庫三級模式結構 1.4 數據庫系統的體系結構3數據庫的兩級映象子模式與模式之間的映象:定義了各子模式與模式之間的映射關系。當整個系統要求改模式時,可以改變映射關系而保持子模式不變。這種用戶數據獨立于全局的邏輯數據的特性即為邏輯數據獨立性;模式與物理模式之間映象:定義了模式與物理模式的映射關系。當為了某種需要改變物理模式時,可以同時改變兩者之間的映射而保持模式與子模式不變,這種全局的邏輯數據獨立于物理數據的特性即為物理數據獨立性。 1.5 數據庫保護1安全性保護防止未被授權者非法存取數據??刹捎梅椒ǎ鸿b定用戶身份、口令、用密碼記載數據、控制用戶

18、權限。 2完整性保護: 指數據正確性和一致性。完整性保護可以通過對數據及數據之間的邏輯關系施加約束條件來實現,約束條件有:值約束、結構約束、動態約束。 1.5 數據庫保護3故障恢復保護 備份與恢復。 4并發控制保護: 多用戶共享數據時,而造成數據不一致性。用加鎖的方法進行保護。 2.1 關系的數學定義 2.2 關系數據庫 1.3 關系運算 第二章 關系數據庫2.1 關系的數學定義1二維表與關系 學號姓名性別籍貫系別0101張軍男杭州工商0202李軍男寧波信息學生信息表2.1 關系的數學定義上述二維表(或簡稱表)表示了學生類型的一些實體,每個二維表又稱為關系。 學生信息表是表名,在關系數據庫中,

19、表名對應于數據庫名(或關系名)。 表頭由一些反映實體屬性的屬性名組成,它對應于數據庫結構描述,定義了實體的型,在表上屬性名必須是唯一,不允許重名。表體是由一些行(元組或稱記錄)組成,它是數據庫的內容及數據庫操作對象。一個元組對應于文件系統中的一個記錄,一個記錄含有若干個域用以存儲屬性值。一個元組對應于一個學生實體。表體中的列反映實體的屬性。 2.1 關系的數學定義2關系的數據定義域(Domain)是值(Value)的集合如:整數、實數、0,1,2,3、真、假、(杭州,0571)、(寧波,0574) 域,若是一個有限集,其元數的個數叫做域的基數。如1,2,3,4,5的基數為5。給定一組域D1,D

20、2,Dn, 這些域中有些域可以是相同的。D1,D2,Dn的笛卡爾乘積為D1D2Dn= d1,d2,dndiDi,i=1,2,n,其中每一個元素( d1,d2,dn)叫做一個n元組,或簡稱元組。D1D2Dn的子集叫作域D1,D2,Dn上的關系,用R(D1,D2,Dn)表示,這里的R表示關系的名字,n是關系的度(或叫元數)。 2.1 關系的數學定義3關系的相關概念關系是笛卡積的子集,所以關系也是一個二維表,表的每行對應一個元組,表的每列對應一個域。由于域可以相同,為了加以區分,必須對每列起一個名字,稱為屬性(Attribute)。n目關系必有n個屬性。 若關系中的某一屬性組的值能唯一地標識一個元組

21、,則稱該屬性組為候選碼(Candidate key)。 若一個關系有多個候選碼,則選定其中一個為主碼(Primary key)。主碼的諸屬性稱為主屬性(Prime attribute)。 不包含在任何侯選碼中的屬性稱為非碼屬性(Non-key attribute)。 在最簡單的情況下, 侯選碼只包含一個屬性。 在最極端的情況下,關系模式的所有屬性組是這個關系模式的侯選碼,稱為全碼 (All-key)2.1 關系的數學定義4關系的三種類型 基本關系(通常又稱為基本表或基表)、查詢表和視圖表。基本表是實際存在的表,它是實際存儲數據的邏輯表示。查詢表是查詢結果對應的表。視圖表是由基本表或其他視圖表導

22、出的表,是虛表,不對應實際存儲的數據。 2.1 關系的數學定義5關系的性質在關系數據庫中,要求關系中的每一個分量是不可再分的數據項, 關系數據庫中的關系應具有以下性質:列是同質的,即每一列中的分量均是同類型的數據,即均來自同一個域。 不同的列可以出自同一個域,每一列稱為一個屬性,要給予不同的列不同的屬性名。 列的順序是無所謂的,即列的次序可以變換。 任意兩個元組不能完全相同。 行的順序是無所謂的,即行的次序可以變換。 每一分量必須是不可再分的數據項。 2.2 關系數據庫1關系模型關系模型是由三部分組成:數據結構(即關系)、關系操作、關系完整性。在關系模型中,無論是實體還是實體之間的聯系均由單一

23、的類型結構-關系來表示。 關系模式是指關系的描述,即對關系名、組成關系的各屬性名、屬性到域的映射、屬性間的數據依賴關系等等。關系模式通常簡記為R(A1,A2,An)關系數據庫是指數據庫結構的描述,它包括關系數據庫名,若干屬性的定義,以及這些屬性上的若干關系模式。2.2 關系數據庫2關系操作關系模型規定了關系操作的功能和特點,但不對DBMS語言的語法做出具體的規定。關系數據庫語言的主要優點是其高度的非過程化,用戶只須知道語句做什么,而不須知道怎么做。關系操作主要有:并、交、差、選擇、投影、連接等,其中選擇、投影及連接是最基本的關系操作。這些操作均對關系的內容或表體實施操作的,得到的結果仍為關系。

24、 關系操作的特點是集合操作,即操作對象和結果都是集合。2.2 關系數據庫3關系模型的完整性關系模型的三類完整性:實體完整性、參照完整性及用戶定義的完整性。實體完整性和參照完整性是任何關系模型都有必須滿足的完整性約束條件,應該由關系數據庫DBMS自動支持。用戶定義的完整性的支持是由DBMS提供完整性定義設施,可以隨DBMS商品軟件不同而有所變化。 2.2 關系數據庫4實體完整性(Entity Integrity) 一個基本關系通常對應現實世界的一個實體集。例如學生關系對應于學生的集合?,F實世界中的實體是可區分的,即它們具有某種唯一性標識。相應地,關系模型中以主碼作為唯一性標識。主碼中的屬性即主屬

25、性不能取空值。所謂空值就是“不知道”或“無意義”的值。如果主屬性取空值,就說明存在某個不可標識的實體,即存在不可區分的實體,這與現實世界的應用環境相矛盾,因此這個實體一定不是一個完整的實體。 規則: 實體完整性規則:若屬性A是基本關系R的主屬性,則屬性A不能取空值。 2.2 關系數據庫4參照完整性(Referential integrity ) 定義 設F是基本關系R的一個或一組屬性,但不是關系R的碼,如果F與基本關系S的主碼Ks相對應,則稱F是基本關系R的外碼(Foreign key),并稱基本關系R為參照關系(Referencing relation),基本關系S為被參照關系(Refere

26、nced relation)或目標關系(Target relation)。關系R和S不一定是不同的關系。參照完整性規則就是定義外碼與主碼之間的引用規則。 規則2.2 參照完整性規則:若屬性(或屬性組)F是基本關系R的外碼,它與基本關系S的主碼Ks相對應(基本關系R和S不一定是不同的關系),則對于R中每個元組在F上的值必須為: 或者取空值(F的每個屬性值均為空值); 或者等于S中某個元組的主碼值。 2.2 關系數據庫5用戶定義完整性(User-defined integrity ) 實體完整性和參照性適用于任何關系數據庫系統。除此之外,不同的關系數據庫系統根據其應用環境的不同,往往還需要一些特殊

27、的約束條件,用戶定義的完整性就是針對某一具體關系數據庫的約束條件,它反映某一具體應用所涉及的數據必須滿足的語義要求。關系模型應提供定義和檢驗這類完整性的機制,以便用統一的系統的方法處理它們,而不要由應用程序承擔這一功能。 2.2 關系數據庫6關系數據語言 關系數據語言可分為三類:數據描述語言DDL,數據操縱語言DML和數據控制語言DCL。 DDL負責數據庫的描述,提供一種數據描述機制,用來描述數據庫的特征或數據的邏輯結構。 DML負責數據庫的操作,提供一種數據處理操作的機制。 DCL負責控制數據庫的完整性和安全性,提供一種檢驗完整性和保證安全的機制。2.2 關系數據庫7DML語言 DML包括數

28、據查詢和數據的增、刪、改等功能。其中查詢的表達方式是DML的主要部分。 關系數據庫的DML按照查詢方式可以分為兩大類:用對關系的集合運算來表示查詢方式,稱為關系代數;用謂詞演算來表達查詢方式,稱為關系演算; 關系代數和關系演算均是抽象的查詢語言,是實際DBMS軟件產品中實現的具體查詢語言的理論基礎。 結構化查詢語言SQL是介于關系代數和關系演算之間的一種語言,SQL是集DDL、DML、DCL為一體的標準的關系數據庫語言。2.3 關系運算1傳統的集合運算傳統的集合運算是二目運算。設關系R和關系S具有相同的度,且相應的屬性值取自同一個域,則它們之間能進行并、交及差運算 并運算:兩個關系R與S的并記

29、為RS,它是一個新的關系,由屬于R或屬于S的元組組成,可形式地定義為: RS=ttRtS其中t是元組變量,表示關系中的元組。 交運算:兩個關系R與S的交記為RS,它是由屬于R且屬于S的元組組成,可形式地定義為: RS=ttRtS 差運算:兩個關系R與S的并記為R-S,它是由屬于R但不屬于S的 元組組成,可形式地定義為: R-S=ttRnot(tS) 2.3 關系運算2專門的關系運算選擇選擇運算是從某個給定的關系中篩選出滿足限定條件的元組子集,它是一元關系運算。可形式定義為:F (R)=ttRF(t) 其中,F是篩選關系R中元組的限定條件的布爾表達式,它由邏輯運算符、連接各算術表達式組成。 學生

30、信息表 S如下:例:查詢信息系 全體學生: SD信息(S)學號S#姓名SN系名SD年齡SA0101張軍工商200202李軍信息192.3 關系運算3專門的關系運算投影選擇運算是從某個關系中選取一個“行”的子集,而投影運算實際上是生成一個關系的“列”的子集,它從給予定的關系中保留指定的屬性子集而刪去其余屬性。設某關系R(X),X是R的屬性集,A是X的一個子集,則R在A的投影可表示為:A(R)=tAtR其中,tA表示元組相應A屬性中的分量。 例:查詢學生的姓名和所在系: SN,SD(S)2.3 關系運算4專門的關系運算連接連接也稱為連接。它是從兩個關系的笛卡爾積中選取屬性間滿足一定條件的元組,連接

31、運算中有兩種最為重要也最為常用的連接,一種是等值連接(equi-join),另一種是自然連接(Natural join)。為“”的連接運算稱為等值連接。它是從關系R與S的笛卡爾積中選取A、B屬性值相等的那些元組 自然連接(Natural join)是一種特殊的等值連接,它要求兩個關系中進行比較的分量必須是相同的屬性組,并且要在結果中把重復的屬性去掉。 一般的連接操作是從行的角度進行運算。但自然連接還 需要取消了重復列,所以是同時從行和列的 角度進行運算。2.3 關系運算5專門的關系運算除 一個m元關系R除以一外n元關系S(其中mn,S非空關系并且R中存在n個屬性與S的n個屬性定義在相同的域)所

32、得到的結果是一個(m-n)元的新的關系,它表示滿足以下條件的元組集合:RS=t(m-n)對任一t(n)S都有t(m-n)。t(n)R其中t(m-n)。t(n) 表示一個(m-n)元的元組和一個n元的元組拼合成一個m元的新元組。 2.3 關系運算6關系代數運算舉例學生關系S同前面的一樣,課程關系C(課程號C#,課程名CN,任課教師CT)和學生選課關系SC(學號S#,課程號C#,成績G)例1:查詢年齡小于20歲的學生 sage20(Student) 例2:檢索學習課程C2的學生的學號與成績 S#,G(C#=C2(SC) 例3:求出學習全部課程的的學生名單 SN(S(S#,C#(SC)C#(C) 2

33、.3 關系運算例4、將新開課程記錄(C6,Q,R)插入到關系C中 C(C6,Q,R)例5、將學號為S3學生的C4課程的成績改為A ( SC(S3,C4,?)(S3,C4,A)例6、求同時選修課程C1和C2的學生姓名 C12=C# (C#=C1OR C#=C2(C) SC12= S#,C#(SC)C12 S12=SN(SSC12)3.1 SQL 數據定義 3.2 數據查詢 3.3 SQL數據更新 3.4 數據控制 第三章 關系數據庫語言SQL3.1 SQL數據定義1SQL介紹 SQL是英文Structured Query Language的縮寫,意思為結構化查詢語言。SQL語言的主要功能就是同各

34、種數據庫建立聯系,進行溝通。按照ANSI(美國國家標準協會)的規定,SQL被作為關系型數據庫管理系統的標準語言。SQL語句可以用來執行各種各樣的操作,例如更新數據庫中的數據,從數據庫中提取數據等。目前,絕大多數流行的關系型數據庫管理系統,如Oracle, Sybase, Microsoft SQL Server, Access等都采用了SQL語言標準。雖然很多數據庫都對SQL語句進行了再開發和擴展,但是包括Select, Insert, Update, Delete, Create, 以及Drop在內的標準的SQL命令仍然可以被用來完成幾乎所有的數據庫操作 SQL語言的版本包括:SQL-89,

35、SQL-92,SQL3 3.1 SQL數據定義2SQL動詞數據查詢:SELECT 數據定義: CREAT, DROP, ALTER 數據操縱: INSERT, UPDATE, DELETE 數據控制: GRANT , REVOKE 3.1 SQL數據定義3示例數據庫結構“學生課程”數據庫中包括三個表:“學生”表Student由學號(Sno)、姓名(Sname)、性別(Ssex)、年齡(Sage)、所在系(Sdept)五個屬性組成,可記為: Student(Sno,Sname,Ssex,Sage,Sdept) 關鍵字Sno(2) “課程”表Course由課程號(Cno)、課程名(Cname)、先

36、修課號(Cpno)、學分(Ccredit)四個屬性組成,可記為: Course(Cno,Cname,Cpno,Ccredit) 關鍵字 Cno(3) “學生選課”表SC由學號(Sno)、課程號(Cno)、成績(Grade)三個屬性組成,可記為: SC(Sno,Cno,Grade) 關鍵字(Sno, Cno)3.1 SQL數據定義4創建基本表一般格式如下:CREATE TABLE ( 列級完整性約束條件 , 列級完整性約束條件.) ,; 例1 建立一個“學生”表Student,它由學號Sno、姓名Sname、性別Ssex、年齡Sage、所在系Sdept五個屬性組成,其中學號屬性不能為空,并且其值

37、是唯一的。 CREATE TABLE Student (Sno CHAR(5) NOT NULL UNIQUE, Sname CHAR(20), Ssex CHAR(1), Sage INT, Sdept CHAR(15);3.1 SQL數據定義SQL提供的基本數據類型: 數值型:包括 integer、real、float,numeric等字符串型:char(n)、varchar(n),前者是定長,后者為 變長串 位串型:bit(n),bit varying(n),同上。 時間型:date、time。3.1 SQL數據定義5修改基本表一般格式如下:ALTER TABLE ADD 完整性約束DR

38、OP MODIFY ; 其中指定需要修改的基本表,ADD子句用于增加新列和新的完整性約束條件,DROP子句用于刪除指定的完整性約束條件,MODIFY子句用于修改原有的列定義。 例2 向Student表增加“入學時間”列,其數據類型為日期型ALTER TABLE Student ADD Scome DATE;不論基本表中原來是否已有數據,新增加的列一律為空值 3.1 SQL數據定義例3 將年齡的數據類型改為半字長整數ALTER TABLE Student MODIFY Sage SMALLINT;修改原有的列定義有可能會破壞已有數據例4 刪除關于學號必須取唯一值的約束ALTER TABLE St

39、udent DROP UNIQUE(Sno); 3.1 SQL數據定義5刪除基本表一般格式如下:DROP TABLE 例5 刪除Student表DROP TABLEStudent基本表定義一旦刪除,表中的數據、在此表上建立的索引都將自動被刪除掉,而建立在此表上的視圖雖仍然保留,但已無法引用。因此執行刪除操作一定要格外小心。 3.1 SQL數據定義6建立索引一般格式如下:CREATE UNIQUE CLUSTER INDEX ON (,.); 其中,指定要建索引的基本表的名字。索引可以建在該表的一列或多列上,各列名之間用逗號分隔。每個后面還可以用指定索引值的排列次序,包括ASC(升序)和DESC

40、(降序)兩種,缺省值為ASC。 UNIQUE表明此索引的每一個索引值只對應唯一的數據記錄。 CLUSTER表示要建立的索引是聚簇索引。所謂聚簇索引是指索引項的順序與表中記錄的物理順序一致的索引組織。 3.1 SQL數據定義 例6 為學生-課程數據庫中的Student、Couse、SC三個表建立索引。其中Student表按學號升序建唯一索引,Couse表按課程號升序建唯一索引,Sno、Cno表按學號升序和課程號降序建唯一索引。 CREATE UNIQUE INDEX Stusno ON Student(Sno); CREATE UNIQUE INDEX Coucno ON Couse(Cno);

41、 CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC); 3.1 SQL數據定義7刪除索引一般格式如下:DROP INDEX;例7 刪除Student表的Stusname索引DROP INDEX Stusname; 索引一經建立,就由系統使用和維護它,不需用戶干預。建立索引是為了減少查詢操作的時間,但如果數據增刪改頻繁,系統會花費許多時間來維護索引。這時,可以刪除一些不必要的索引。刪除索引時,系統會同時從數據字典中刪去有關該索引的描述。 3.2 SQL數據查詢1查詢語句格式一般格式為: SELECT ALL|DISTINCT,. FROM , . W

42、HERE GROUP BY HAVING ORDER BY ASC|DESC; 整個SELECT語句的含義是,根據WHERE子句的條件表達式,從FROM子句指定的基本表或視圖中找出滿足條件的元組,再按SELECT子句中的目標列表達式,選出元組中的屬性值形成結果表。如果有GROUP子句,則將結果按的值進行分組,該屬性列值相等的元組為一個組,每個組產生結果表中的一條記錄。通常會在每組中作用集函數。如果GROUP子句帶HAVING短語,則只有滿足指定條件的組才予輸出。如果有ORDER子句,則結果表還要按的值的 升序或降序排序。3.2 SQL數據查詢1單表查詢一、選擇表中的若干列例1 查詢全體學生的學

43、號與姓名 SELECT Sno,Sname FROM Student; 例2 查詢全體學生的姓名、學號、所在系 SELECT Sname, Sno, Sdept FROM Student; 例3 查詢全體學生的詳細記錄 SELECT * FROM Student; 3.2 SQL數據查詢例4 查全體學生的姓名及其出生年份 SELECT Sname, 2004-Sage FROM Student; 例5 查全體學生的姓名、出生年份和所有系,要求用小寫字 母表示所有系名 SELECT Sname, Year of Birth:, 1996-Sage, ISLOWER(Sdept) FROM Stu

44、dent; 3.2 SQL數據查詢二、選擇表中的若干元組 1、消除取值重復的行 例6 :查所有選修過課的學生的學號 SELECT DISTINCT Sno FROM SC; 2、查詢滿足條件的元組 查詢滿足指定條件的元組可以通過WHERE子句實現。WHERE子句常用的查詢條件如下頁 3.2 SQL數據查詢常用的查詢條件 (1)比較 :、 = 、 =、 !=(2)確定范圍 :BETWEEN AND, NOT BETWEEN AND(3)確定集合 :IN, NOT IN (4)字符匹配 :LIKE, NOT LIKE (5)空值 :IS NULL, IS NOT NULL (6)多重條件 :AND

45、, OR 3.2 SQL數據查詢(1) 比較例7 :查計算機系全體學生的名單 SELECT Sname FROM Student WHERE Sdept = CS; 例8 :查所有年齡在20歲以下的學生姓名及其年齡 SELECT Sname, Sage FROM Student WHERE Sage = 20 例9 :查考試成績有不及格的學生的學號 SELECT DISTINCT Sno FROM Course WHERE Grade 60 3.2 SQL數據查詢(2) 確定范圍 例10 :查詢年齡在20至23歲之間的學生的姓名、系別、和年齡 SELECT Sname, Sdept, Sage

46、 FROM Student WHERE Sage BETWEEN 20 AND 23 ; 例11 :查詢年齡不在20至23歲之間的學生姓名、系別和年 齡 SELECT Sname, Sdept, Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23 3.2 SQL數據查詢(3) 確定集合 例12 :查信息系(IS)、數學系(MA)和計算機科學系(CS)的學生的姓名和性別 SELECT Sname, Ssex FROM Student WHERE Sdept IN (IS, MA, CS) ; 例13 :查既不是信息系、數學系,也不是計算機科學系的

47、學生的姓名和性別 SELECT Sname, Ssex FROM Student WHERE Sdept NOT IN (IS, MA, CS) 3.2 SQL數據查詢(4) 字符匹配 謂詞LIKE可以用來進行字符串的匹配。其一般語法格式如下: NOT LIKE ESCAPE 其含義是查找指定的屬性列值與相匹配的元組??梢允且粋€完整的字符串,也可以含有通配符%和_。 %(百分號) 代表任意長度(長度可以為0)的字符串。 _(下橫線) 代表任意單個字符。 例14 :查所有姓劉的學生的姓名、學號和性別 SELECT Sname, Sno, Ssex (not 表示不姓劉的同學) FROM Stud

48、ent WHERE Sname not LIKE 劉% 3.2 SQL數據查詢例15 :查姓“歐陽”且全名為三個漢字的學生的姓名 SELECT Sname FROM Student WHERE Sname LIKE 歐陽_ _ 例16 :查名字中第二字為“陽”字的學生的姓名和學號 SELECT Sname, Sno FROM Student WHERE Sname LIKE _ _陽% 如果用戶要查詢的匹配字符串本身就含有%或_,比如要查名字為 DB_Design的課程的學分,應如何實現呢?這時就要使用 ESCAPE 短語對通配符進行轉義了。 3.2 SQL數據查詢例17 :查DB_Desig

49、n課程的課程號和學分 SELECT Cno, Ccredit FROM Course WHERE Cname LIKE DB_Design ESCAPE ESCAPE 短語表示為換碼字符,這樣匹配串中緊跟在后面的字符”_”不再具有通配符的含義,而是取其本身含義,被轉義為普通的”_”字符。 例18:查以”DB_”開頭,且倒數第三個字符為i的課程的詳細情況 SELECT * FROM Course WHERE Cname LIKE DB_%i_ ESCAPE 3.2 SQL數據查詢(5) 涉及空值的查詢 例19:某些學生選修某門課程后沒有參加考試,所以有選課記錄,但沒有考試成績,下面我們來查一下缺

50、少成績的學生的學號和相應的課程號 : SELECT Sno, Cno FROM SC WHERE Grade IS NULL 例20:查所有有成績的記錄的學生學號和課程號 SELECT Sno, Cno FROM SC WHERE Grade IS NOT NULL 3.2 SQL數據查詢(6) 多重條件查詢 邏輯運算符AND和OR可用來聯結多個查詢條件。如果這兩個運算符同時出現在同一個WHERE條件子句中,則AND的優先級高于OR,但用戶可以用括號改變優先級。 例21 :查CS系年齡在20歲以下的學生姓名 SELECT Sname FROM Student WHERE Sdept=CS AN

51、D Sage20 3.2 SQL數據查詢三、 對查詢結果排序 如果沒有指定查詢結果的顯示順序,DBMS將按其最方便的順序(通常是元組在表中的先后順序)輸出查詢結果。用戶也可以用ORDER BY子句指定按照一個或多個屬性列的升序(ASC)或降序(DESC)重新排列查詢結果,其中升序ASC為缺省值。 例22 :查詢選修了3號課程的學生的學號及其成績,查詢結果按分數的降序排列 SELECT Sno, Grade FROM SC WHERE Cno=1 GROUP BY Grade DESC 3.2 SQL數據查詢四、 使用集函數 為了進一步方便用戶,增強檢索功能,SQL提供了許多集函數,主要包括:

52、COUNT(DISTINCT|ALL *) 統計元組個數 COUNT(DISTINCT|ALL ) 統計一列中值的個數 SUM(DISTINCT|ALL ) 計算一列值的總和(此列必須是數值型) AVG(DISTINCT|ALL ) 計算一列值的平均值(此列必須是數值型) MAX(DISTINCT|ALL ) 求一列值中的最大值 MIN(DISTINCT|ALL ) 求一列值中的最小值 3.2 SQL數據查詢例24 :查詢學生總人數 SELECT COUNT(*) FROM Student 例25 :查詢選修了課程的學生人數 SELECT COUNT(DISTINCT Sno) FROM SC

53、 例26 :計算1號課程的學生平均成績 SELECT AVG(Grade) FROM SC WHERE Cno=1 例27 :查詢學習1號課程的學生最高分數 SELECT MAX(Grade) FROM SC WHERE Cno=1 3.2 SQL數據查詢五、 對查詢結果分組 GROUP BY子句可以將查詢結果表的各行按一列或多列取值相等的原則進行分組 。 對查詢結果分組的目的是為了細化集函數的作用對象。如果未對查詢結果分組,集函數將作用于整個查詢結果,即整個查詢結果只有一個函數值。否則,集函數將作用于每一個組,即每一組都有一個函數值 例28 :查詢各個課程號與相應的選課人數 SELECT C

54、no, COUNT(Sno) FROM SC GROUP BY Cno 該SELECT語句對SC表按Cno的取值進行分組,所有具有相同Cno值的元組為一組,然后對每一組作用集函數COUNT以 求得該組的學生人數 3.2 SQL數據查詢如果分組后還要求按一定的條件對這些組進行篩選,最終只輸出滿足指定條件的組,則可以使用HAVING短語指定篩選條件 例29 :查詢信息系選修了3門以上課程的學生的學號 SELECT Sno FROM SC WHERE Sdept=IS GROUP BY Sno HAVING COUNT(*)3 WHERE子句與HAVING短語的根本區別在于作用對象不同。WHERE子

55、句作用于基本表或視圖,從中選擇滿足條件的元組。HAVING短語作用于組,從中選擇滿足條件的組。 3.2 SQL數據查詢2多表查詢一、連接查詢 (1)、等值與非等值連接查詢 例30 :查詢每個學生及其選修課程的情況 SELECT Student.*, SC.* FROM Student, SC WHERE Student.Sno=SC.Sno 如果是按照兩個表中的相同屬性進行等值連接,且目標列中去掉了重復的屬性列,但保留了所有不重復的屬性列,則稱之為自然連接 SELECT Student.Sno, Sname, Ssex, Sage, Sdept, Cno, Grade FROM Student

56、, SC WHERE Student.Sno=SC.Sno 3.2 SQL數據查詢(2)、 復合連接 上面連接查詢中,WHERE子句中只有一個條件,即用于連接兩個表的謂詞。WHERE子句中有多個條件的連接操作,稱為復合條件連接 :例31 :查詢選修2號課程且成績在90分以上的所有學生 SELECT Student.Sno, Sname FROM Student, SC WHERE Student.Sno=SC.Sno AND SC.Cno=2 AND SC.Grade90 3.2 SQL數據查詢二、 嵌套查詢 (1)帶有IN謂詞的子查詢 例 32:查詢與“劉晨”在同一個系學習的學生 SELEC

57、T Sno, Sname, Sdept FROM Student WHERE Sdept IN SELECT Sdept FROM Student WHERE Sname=劉晨 3.2 SQL數據查詢(2)、帶有比較運算符的子查詢 帶有比較運算符的子查詢是指父查詢與子查詢之間用比較運算符進行連接。當用戶能確切知道內層查詢返回的是單值時,可以用、 =、=、!=或等比較運算符。 例33:查詢選修了課程名為信息系統的學生學號和姓名 SELECT Sno, Sname FROM Student WHERE Sno IN (SELECT Sno FROM SC WHERE Cno = (SELECT C

58、no FROM Course WHERE Cname=信息系統 )3.2 SQL數據查詢(3)、帶有ANY或ALL謂詞的子查詢 例34:查詢其他系中比IS系任一學生年齡小的學生名單 SELECT Sname, Sage FROM Student WHERE Sage ANY (SELECT Sage FROM Student WHERE Sdept=IS ) AND Sdept IS ORDER BY Sage DESC 3.2 SQL數據查詢(4)、帶有EXISTS謂詞的子查詢 EXISTS代表存在量詞彐。帶有EXISTS謂詞的子查詢不返回任何實際數據,它只產生邏輯真值“true或邏輯假值“

59、false。 例35、查詢所有選修了1號課程的學生姓名 SELECT Sname FROM Student WHERE EXISTS (SELECT * FROM SC WHERE Sno=Student.Sno AND Cno=1) 使用存在量詞EXISTS后,若內層查詢結果非空,則外層的WHERE子句返回真值,否則返回假值 3.2 SQL數據查詢(5)、集合查詢 每一個SELECT語句都能獲得一個或一組元組。若要把多個SELECT語句的結果合并為一個結果,可用集合操作來完成。集合操作主要包括并操作UNION、交操作INTERSECT和差操作MINUS。 使用UNION將多個查詢結果合并起來

60、,形成一個完整的查詢結果時,系統會自動去掉重復的元組。需要注意的是,參加UNION操作的各數據項數目必須相同;對應項的數據類型也必須相同。 例36 查詢計算機科學系的學生及年齡不大于19歲的學生 SELECT * FROM Student WHERE Sdept=CS UNION SELECT * FROM Student WHERE Sage=19 3.3 SQL數據更新1插入數據 一、插入單個元組 INSERT INTO (,.) VALUES ( ,.) 如果某些屬性列在INTO子句中沒有出現,則新記錄在這些列上將取空值。但必須注意的是,在表定義時說明了NOT NULL的屬性列不能取空值

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論