《數(shù)據(jù)庫原理與應用教程》第5版 課件全套 何玉潔 第1-14章 數(shù)據(jù)庫概述- 數(shù)據(jù)庫技術(shù)的發(fā)展_第1頁
《數(shù)據(jù)庫原理與應用教程》第5版 課件全套 何玉潔 第1-14章 數(shù)據(jù)庫概述- 數(shù)據(jù)庫技術(shù)的發(fā)展_第2頁
《數(shù)據(jù)庫原理與應用教程》第5版 課件全套 何玉潔 第1-14章 數(shù)據(jù)庫概述- 數(shù)據(jù)庫技術(shù)的發(fā)展_第3頁
《數(shù)據(jù)庫原理與應用教程》第5版 課件全套 何玉潔 第1-14章 數(shù)據(jù)庫概述- 數(shù)據(jù)庫技術(shù)的發(fā)展_第4頁
《數(shù)據(jù)庫原理與應用教程》第5版 課件全套 何玉潔 第1-14章 數(shù)據(jù)庫概述- 數(shù)據(jù)庫技術(shù)的發(fā)展_第5頁
已閱讀5頁,還剩686頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)庫原理與應用教程(第5版)第1章數(shù)據(jù)庫概述1.1一些基本概念1.2數(shù)據(jù)管理技術(shù)的發(fā)展1.3數(shù)據(jù)獨立性1.4數(shù)據(jù)庫系統(tǒng)的組成概述隨著信息管理水平的不斷提高,應用范圍的日益擴大,信息已成為企業(yè)的重要財富和資源。作為管理信息的數(shù)據(jù)庫技術(shù)也得到了很大的發(fā)展,其應用領域也越來越廣泛。飛機、火車訂票系統(tǒng)、商場的進貨與銷售、圖書館對書籍及借閱的管理等。數(shù)據(jù)庫技術(shù)數(shù)據(jù)庫是數(shù)據(jù)管理的最新技術(shù)主要研究內(nèi)容是如何對數(shù)據(jù)進行科學的管理,以提供可共享、安全、可靠的數(shù)據(jù)。數(shù)據(jù)庫技術(shù)一般包含數(shù)據(jù)管理和數(shù)據(jù)處理兩部分。數(shù)據(jù)庫系統(tǒng)本質(zhì)上是一個用計算機存儲數(shù)據(jù)的系統(tǒng)可以將數(shù)據(jù)庫看成是一個電子文件柜除保存數(shù)據(jù)外,還提供對數(shù)據(jù)進行各種管理和處理:安全管理數(shù)據(jù)共享數(shù)據(jù)查詢一些基本概念數(shù)據(jù)是數(shù)據(jù)庫中存儲的基本對象。文本、圖形、圖像、音頻、視頻、商品銷售情況等都是數(shù)據(jù)??梢詫?shù)據(jù)定義為:數(shù)據(jù)是描述事物的符號記錄。數(shù)據(jù)有多種表現(xiàn)形式,可以經(jīng)過數(shù)字化后保存在計算機中。數(shù)據(jù)數(shù)據(jù)需要經(jīng)過解釋才能明確其表達的含義。20當解釋其代表人的年齡時就是20歲。當解釋其代表商品價格時,就是20元。數(shù)據(jù)和解釋不可分。數(shù)據(jù)的解釋是對數(shù)據(jù)的說明。數(shù)據(jù)的含義稱為數(shù)據(jù)的語義。事物的描述在日常生活中,一般直接用自然語言來描述事物。如描述一門課程的信息:數(shù)據(jù)庫系統(tǒng)基礎課程,4個學分,第5學期開設。但在計算機中經(jīng)常按如下形式描述:(數(shù)據(jù)庫系統(tǒng)基礎,4,5)記錄2023/12/2020:408數(shù)據(jù)庫(Database)是存放數(shù)據(jù)的倉庫。永久存儲在計算機存儲設備上。按一定的格式存儲。是有組織的、可共享的大量數(shù)據(jù)的集合。9數(shù)據(jù)庫管理系統(tǒng)DatabaseManagementSystem——DBMS是一個專門用于實現(xiàn)對數(shù)據(jù)進行管理和維護的系統(tǒng)軟件。操作系統(tǒng)2023/12/2020:4010數(shù)據(jù)庫管理系統(tǒng)主要功能數(shù)據(jù)庫的建立與維護數(shù)據(jù)定義數(shù)據(jù)組織、存儲和管理數(shù)據(jù)操作事務的管理和運行11數(shù)據(jù)庫系統(tǒng)一般由數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)(及相關(guān)實用工具)、應用程序、數(shù)據(jù)庫管理員組成。2023/12/2020:40DBMS實用工具應用程序應用程序DBA121.3數(shù)據(jù)管理技術(shù)的發(fā)展文件管理方式數(shù)據(jù)庫管理13文件管理操作模式14文件管理示例應用程序A2應用程序A1學生基本信息管理學生選課管理學生信息文件F1課程信息文件F2學生選課信息文件F3(學號、姓名、性別、出生日期、聯(lián)系電話、所在系、專業(yè)、班號

)(學號、姓名、所在系、專業(yè)、課程號、課程名、修課類型、修課時間、考試成績

)15文件管理系統(tǒng)的缺點編寫應用程序不方便數(shù)據(jù)冗余不可避免應用程序依賴性不支持對文件的并發(fā)訪問數(shù)據(jù)間聯(lián)系弱難以按用戶視圖表示數(shù)據(jù)無安全控制功能編寫應用程序不方便應用程序編寫者必須清楚地了解所用文件的邏輯及物理結(jié)構(gòu),如文件中包含多少個字段,每個字段的數(shù)據(jù)類型,采用何種邏輯結(jié)構(gòu)和物理存儲結(jié)構(gòu)。對文件的查詢、修改等處理都必須在應用程序中編程實現(xiàn)。17數(shù)據(jù)冗余不可避免數(shù)據(jù)冗余所帶來的問題不僅僅是存儲空間的浪費,更為嚴重的是造成了數(shù)據(jù)的不一致(inconsistency)。如:某學生所學的專業(yè)發(fā)生了變化,如果只在F1文件中進行修改,而忘記在F3中應做同樣的修改。則會造成同一名學生在兩個文件中的“專業(yè)”不一樣。18應用程序依賴性應用程序?qū)?shù)據(jù)的操作依賴于存儲數(shù)據(jù)的文件的結(jié)構(gòu)。文件和記錄的結(jié)構(gòu)通常是應用程序代碼的一部分,如C程序的struct。文件結(jié)構(gòu)的每一次修改,都將導致應用程序的修改。19不支持對文件的并發(fā)訪問文件最初是作為程序的附屬數(shù)據(jù)出現(xiàn)的,它一般不支持多個應用程序同時對同一個文件進行訪問。例如:某用戶打開了一個Excel文件,當?shù)诙€用戶在第一個用戶未關(guān)閉此文件前打開此文件時,只能以只讀方式打開此文件,而不能對此文件進行修改。20數(shù)據(jù)間聯(lián)系弱文件與文件之間是彼此獨立、毫不相干的,文件之間的聯(lián)系必須通過程序來實現(xiàn)。比如F3文件中的學號、姓名等學生的基本信息必須是F1文件中已存在的(即選課學生必須是已存在的學生)數(shù)據(jù)之間的聯(lián)系是實際應用當中所要求,但文件本身不具備自動實現(xiàn)這些聯(lián)系的功能。21難以滿足不同對數(shù)據(jù)用戶的需求不同的用戶關(guān)注的數(shù)據(jù)往往不同。例如,對于學生基本信息,分配學生宿舍的部門可能只關(guān)心學生的學號、姓名、性別和班號。教務部門可能關(guān)心的是學號、姓名、所在系、專業(yè)和班號。需要為每個用戶建立一個文件,這勢必造成很多的數(shù)據(jù)冗余。22無安全控制功能在文件管理方式中,很難控制某個人對文件能夠進行的操作。如:只允許某個人查詢和修改數(shù)據(jù),但不能刪除數(shù)據(jù),或者對文件中的某個或者某些字段不能修改等。在實際應用中,數(shù)據(jù)的安全性是非常重要且不可忽視的。23數(shù)據(jù)庫管理操作模式數(shù)據(jù)庫管理系統(tǒng)24數(shù)據(jù)庫管理示例各學院程序?qū)W生基本信息管理學生有關(guān)的數(shù)據(jù)庫教務部門程序?qū)W生選課管理數(shù)據(jù)庫管理系統(tǒng)25數(shù)據(jù)庫管理的優(yōu)點相互關(guān)聯(lián)的數(shù)據(jù)的集合較少的數(shù)據(jù)冗余程序與數(shù)據(jù)相互獨立保證數(shù)據(jù)的安全、可靠最大限度地保證數(shù)據(jù)的正確性數(shù)據(jù)可以并發(fā)使用并能保證一致性26相互關(guān)聯(lián)的數(shù)據(jù)的集合數(shù)據(jù)庫中的數(shù)據(jù)不是孤立的,數(shù)據(jù)與數(shù)據(jù)之間是相互關(guān)聯(lián)的。也就是說,在數(shù)據(jù)庫中不僅要能夠表示數(shù)據(jù)本身,還要能夠表示數(shù)據(jù)與數(shù)據(jù)之間的聯(lián)系。學生課程學生與課程之間的聯(lián)系27較少的數(shù)據(jù)冗余 數(shù)據(jù)庫中的數(shù)據(jù)被統(tǒng)一管理,合理組織,任何對數(shù)據(jù)的操作都由數(shù)據(jù)庫管理系統(tǒng)DBMS完成。DBMS28數(shù)據(jù)具有較高的獨立性數(shù)據(jù)獨立性是指數(shù)據(jù)的組織和存儲方法與應用程序互不依賴、彼此獨立的特性。29保證數(shù)據(jù)的安全、可靠數(shù)據(jù)庫技術(shù)要能夠保證數(shù)據(jù)庫中的數(shù)據(jù)是安全、可靠的。

有效地防止數(shù)據(jù)庫中的數(shù)據(jù)被非法使用或非法修改

數(shù)據(jù)遭到破壞時能立刻將數(shù)據(jù)完全恢復主動安全被動安全安全機制備份恢復30最大限度地保證數(shù)據(jù)的正確性保證數(shù)據(jù)正確的特性在數(shù)據(jù)庫中稱之為數(shù)據(jù)完整性。學生的年齡200歲31數(shù)據(jù)可以并發(fā)使用

并能保證數(shù)據(jù)的一致性

在多個用戶同時使用數(shù)據(jù)庫時,能夠保證不產(chǎn)生沖突和矛盾,保證數(shù)據(jù)的一致性和正確性。32并發(fā)操作示例10張票訂8張票:10-8=2訂4張票:10-6=4421010?331.3數(shù)據(jù)獨立性指應用程序不會因數(shù)據(jù)的物理表示方式和訪問技術(shù)的改變而改變,即應用程序不依賴于任何特定的物理表示方式和訪問技術(shù),包含兩個方面:邏輯獨立性物理獨立性34物理獨立性指當數(shù)據(jù)的存儲位置或存儲結(jié)構(gòu)發(fā)生變化時,不影響應用程序的特性。應用程序D:\xE:\a學生數(shù)據(jù)庫

D:\xF:\b學生數(shù)據(jù)庫

35邏輯獨立性指當表達現(xiàn)實世界的信息內(nèi)容發(fā)生變化時,如:增加信息刪除無用信息等不影響應用程序的特性。應用程序?qū)W生數(shù)據(jù)庫

學生數(shù)據(jù)庫

36示例學號姓名性別所在系S01張三男計算機S02李四女計算機S03王五女信息S04陳六男信息學號姓名性別所在系專業(yè)S01張三男計算機軟件S02李四女計算機應用S03王五女信息管理S04陳六男信息管理應用程序?qū)W號姓名性別S01張三男S02李四女S03王五女S04陳六男37非獨立性在使用文件管理數(shù)據(jù)時,應用程序常常是數(shù)據(jù)依賴的,也就是說數(shù)據(jù)的物理表示方式和有關(guān)的存取技術(shù)都要在應用程序中考慮,而且,有關(guān)物理表示的知識和訪問技術(shù)直接體現(xiàn)在應用程序的代碼中。38非獨立性示例Openfile(“D:\data\file1”)file1D:\data\file1file1F:\data\file1Openfile(“F:\data\file1”)391.4數(shù)據(jù)庫系統(tǒng)的組成……應用程序1應用程序2應用程序n數(shù)據(jù)庫管理系統(tǒng)(DBMS)數(shù)據(jù)庫系統(tǒng)管理員核心數(shù)據(jù)庫系統(tǒng)的組成數(shù)據(jù)庫是數(shù)據(jù)的匯集,它以一定的組織形式保存在存儲介質(zhì)上數(shù)據(jù)庫管理系統(tǒng)是管理數(shù)據(jù)庫的系統(tǒng)軟件,它可以實現(xiàn)數(shù)據(jù)庫系統(tǒng)的各種功能應用程序?qū)V敢詳?shù)據(jù)庫數(shù)據(jù)為基礎的程序數(shù)據(jù)庫管理員負責整個數(shù)據(jù)庫系統(tǒng)的正常運行。41硬件由于數(shù)據(jù)庫中的數(shù)據(jù)量一般都比較大,而且DBMS自身的規(guī)模也比較大(如:SQLServer2005的完整安裝大約需700MB以上的硬盤空間和至少512MB以上的內(nèi)存),必須要有足夠大的內(nèi)存,來存放操作系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)、數(shù)據(jù)緩沖區(qū)和應用程序,而且還要有足夠大的硬盤空間來存放數(shù)據(jù)庫數(shù)據(jù),最好還有足夠的存放備份數(shù)據(jù)的磁帶、磁盤或光盤。42軟件數(shù)據(jù)庫管理系統(tǒng)。是整個數(shù)據(jù)庫系統(tǒng)的核心,是建立、使用和維護數(shù)據(jù)庫的系統(tǒng)軟件。支持數(shù)據(jù)庫管理系統(tǒng)運行的操作系統(tǒng)。具有數(shù)據(jù)庫訪問接口的高級語言及其編程環(huán)境,以便于開發(fā)應用程序。實用工具。一般是數(shù)據(jù)庫廠商提供的隨數(shù)據(jù)庫管理系統(tǒng)軟件一起發(fā)行。43人員數(shù)據(jù)庫管理員系統(tǒng)分析人員數(shù)據(jù)庫設計人員應用程序編程人員最終用戶44數(shù)據(jù)庫原理與應用教程(第5版)第2章數(shù)據(jù)庫系統(tǒng)結(jié)構(gòu)2.1數(shù)據(jù)和數(shù)據(jù)模型2.2概念層數(shù)據(jù)模型2.3組織層數(shù)據(jù)模型2.4數(shù)據(jù)庫系統(tǒng)的結(jié)構(gòu)2.5數(shù)據(jù)庫管理系統(tǒng)2.1數(shù)據(jù)和數(shù)據(jù)模型現(xiàn)實世界的數(shù)據(jù)是散亂無章的,散亂的數(shù)據(jù)不利于人們對其進行有效的管理和處理。因此,必須把現(xiàn)實世界的數(shù)據(jù)按照一定的格式組織起來,以方便對其進行操作和使用。在用數(shù)據(jù)庫技術(shù)管理數(shù)據(jù)時,數(shù)據(jù)被按照一定的格式組織起來,比如二維表結(jié)構(gòu),以使數(shù)據(jù)能夠被更高效地管理和處理。472.1.1數(shù)據(jù)與信息描述事物的符號記錄稱為數(shù)據(jù)。將從數(shù)據(jù)中獲得的有意義的內(nèi)容稱為信息數(shù)據(jù)有一定的格式,這些格式的規(guī)定是數(shù)據(jù)的語法,而數(shù)據(jù)的含義是數(shù)據(jù)的語義。數(shù)據(jù)是信息存在的一種形式,只有通過解釋或處理才能成為有用的信息。48示例數(shù)據(jù):(張三,9912101,男,1981,計算機系,應用軟件)解釋:張三是9912101班的男生,1981年出生,計算機系應用軟件專業(yè)。49數(shù)據(jù)信息解釋數(shù)據(jù)的靜態(tài)特征數(shù)據(jù)的基本結(jié)構(gòu)學生的學號、姓名、性別、出生日期數(shù)據(jù)間的聯(lián)系學生選課中的學號與學生基本信息中的學號數(shù)據(jù)取值范圍約束考試成績在0~100分之間50動態(tài)特征指對數(shù)據(jù)可以進行的操作以及操作規(guī)則。對數(shù)據(jù)庫數(shù)據(jù)的操作主要有查詢數(shù)據(jù)更改數(shù)據(jù):插入、刪除和更新一般將對數(shù)據(jù)的靜態(tài)特征和動態(tài)特征的描述稱為數(shù)據(jù)模型三要素512.1.2數(shù)據(jù)模型對于模型,人們并不陌生。建筑模型

飛機模型計算機中的模型是對事物、對象、過程等客觀系統(tǒng)中感興趣的內(nèi)容的模擬和抽象表達,是理解系統(tǒng)的思維工具數(shù)據(jù)模型(datamodel)也是一種模型,它是對現(xiàn)實世界數(shù)據(jù)特征的抽象。52數(shù)據(jù)模型(續(xù))數(shù)據(jù)庫管理系統(tǒng)是基于某種數(shù)據(jù)模型對數(shù)據(jù)進行組織的,因此,了解數(shù)據(jù)模型的基本概念是學習數(shù)據(jù)庫知識的基礎。在數(shù)據(jù)庫領域中,數(shù)據(jù)模型用于表達現(xiàn)實世界中的對象,即將現(xiàn)實世界中雜亂的信息用一種規(guī)范的、形象化的方式表達出來。53數(shù)據(jù)模型(續(xù))數(shù)據(jù)模型即要面向現(xiàn)實世界,又要面向機器世界,因此需滿足三個要求:能夠真實地模擬現(xiàn)實世界;容易被人們理解;能夠方便地在計算機上實現(xiàn)。54數(shù)據(jù)模型(續(xù))數(shù)據(jù)模型實際上是模型化數(shù)據(jù)和信息的工具。根據(jù)模型應用的不同目的,可以將模型分為兩大類:概念層數(shù)據(jù)模型(概念模型),從數(shù)據(jù)的語義視角來抽取模型,是按用戶的觀點來對數(shù)據(jù)和信息進行建模。組織層數(shù)據(jù)模型(組織模型)。從數(shù)據(jù)的組織層次來描述數(shù)據(jù)。552.2概念層數(shù)據(jù)模型從數(shù)據(jù)的應用語義視角來抽取現(xiàn)實世界中有價值的數(shù)據(jù)并按用戶的觀點對數(shù)據(jù)進行建模。主要用在數(shù)據(jù)庫的設計階段,與具體的數(shù)據(jù)庫管理系統(tǒng)無關(guān),與具體的實現(xiàn)方式無關(guān)。56組織層數(shù)據(jù)模型從數(shù)據(jù)的組織方式來描述數(shù)據(jù)。主要有:層次模型網(wǎng)狀模型關(guān)系模型對象-關(guān)系模型是從計算機系統(tǒng)的觀點對數(shù)據(jù)進行建模與所使用的數(shù)據(jù)庫管理系統(tǒng)有關(guān)。57轉(zhuǎn)換現(xiàn)實世界信息世界:概念模型機器世界:具體DBMS支持的數(shù)據(jù)模型人的認識抽象現(xiàn)實世界客觀事物的抽象過程2.2概念層數(shù)據(jù)模型概念層次模型實際上是現(xiàn)實世界到機器世界的一個中間層次。概念層次模型:抽象現(xiàn)實系統(tǒng)中有應用價值的元素及其關(guān)聯(lián),反映現(xiàn)實系統(tǒng)中有應用價值的信息結(jié)構(gòu),不依賴于數(shù)據(jù)的組織結(jié)構(gòu)。概念模型用于信息世界的建模,是現(xiàn)實世界到信息世界的第一層抽象。是數(shù)據(jù)庫設計人員和用戶之間進行交流的工具。是面向用戶、面向現(xiàn)實世界的數(shù)據(jù)模型,是與DBMS無關(guān)。常用的概念模型:實體-聯(lián)系模型、語義對象模型

實體-聯(lián)系模型實體屬性聯(lián)系

實體具有公共性質(zhì)的可相互區(qū)分的現(xiàn)實世界對象的集合??梢允蔷唧w的事物,也可以是抽象的概念或聯(lián)系具體的事物:學生、課程、職工抽象的聯(lián)系:學生選課實體的表示方式在E-R圖中用矩形框表示實體,把實體名寫在框內(nèi),比如學生實體可以表示為:學生屬性實體所具有的特征或性質(zhì)。身高年齡性別體重……聯(lián)系聯(lián)系是數(shù)據(jù)之間的關(guān)聯(lián)集合,是客觀存在的應用語義鏈。實體內(nèi)部的聯(lián)系:一個實體內(nèi)屬性之間的聯(lián)系。職工實體內(nèi)部的職工號和此職工的部門經(jīng)理號實體之間的聯(lián)系:不同實體之間的聯(lián)系。課程實體和學生實體之間存在選課聯(lián)系。聯(lián)系的表示方式

實體之間的聯(lián)系用菱形框表示,框內(nèi)寫上聯(lián)系名,并用連線與有關(guān)的實體相連。聯(lián)系名實體1實體2聯(lián)系的種類一對一聯(lián)系(1:1)一對多聯(lián)系(1:n)多對多聯(lián)系(m:n)一對一聯(lián)系(實體內(nèi)部的聯(lián)系)

如果實體A中的每個實例在實體B中至多有一個(也可以沒有)實例與之關(guān)聯(lián),反之亦然,則稱實體A與實體B具有一對一聯(lián)系,記作:1:1。一對一聯(lián)系(1:1)一對一聯(lián)系的例子

部門和正經(jīng)理(假設一個部門只有一個正經(jīng)理,一個人只當一個部門的經(jīng)理)、系和正系主任(假設一個系只有一個正主任,一個人只當一個系的主任)都是一對一聯(lián)系。

管理經(jīng)理部門11一對多的聯(lián)系

如果實體A與實體B之間存在聯(lián)系,并且對于實體A中的一個實例,實體B中有多個實例與之對應;而對實體B中的任意一個實例,在實體A中都只有一個實例與之對應,則稱實體A到實體B的聯(lián)系是一對多的,記為1:n。

有部門和職工兩個實體,并且有語義:一個部門可以有多名職工,但是一個職工只在一個部門工作。則部門和職工之間的聯(lián)系是一對多的,我們把這種聯(lián)系命名為工作。一對多聯(lián)系的例子工作部門職工1n多對多的聯(lián)系

如果實體A與實體B之間存在聯(lián)系,并且對于實體A中的一個實例,實體B中有多個實例與之對應;而對實體B中的一個實例,在實體A中也有多個實例與之對應,則稱實體A到實體B的聯(lián)系是多對多的,記為m:n。多對多聯(lián)系的例子

有學生和課程兩個實體,并且有語義:一個學生可以修多門課程,一門課程可以被多個學生修。那么學生和課程之間的聯(lián)系就是多對多的,我們把這種聯(lián)系命名為選課。學生課程選課mn關(guān)聯(lián)多個實體的聯(lián)系顧客購買商品:每個顧客可以從多個售貨員那里購買商品,并且可以購買多種商品;每個售貨員可以向多名顧客銷售商品,并且可以銷售多種商品;每種商品可由多個售貨員銷售,并且可以銷售給多名顧客。

mnp顧客商品售貨員銷售兩個圖不等價74mnp顧客商品售貨員銷售×2.3組織層數(shù)據(jù)模型2.3.1關(guān)系數(shù)據(jù)模型的數(shù)據(jù)結(jié)構(gòu)2.3.2關(guān)系數(shù)據(jù)模型的數(shù)據(jù)操作2.3.3關(guān)系數(shù)據(jù)模型的數(shù)據(jù)完整性約束關(guān)系數(shù)據(jù)模型的數(shù)據(jù)結(jié)構(gòu)把數(shù)據(jù)看成是二維表中的元素,而這個二維表就是關(guān)系用關(guān)系(表格數(shù)據(jù))表示實體和實體之間聯(lián)系的模型稱為關(guān)系數(shù)據(jù)模型示例:學生基本信息表學號姓名性別年齡所在系9512101李勇男19計算機系9512102劉晨男20計算機系9512103王敏女20計算機系9521101張立男22信息系9521102吳賓女21信息系一些基本術(shù)語關(guān)系:關(guān)系就是二維表。并滿足如下性質(zhì):關(guān)系表中的每一列都是不可再分的基本屬性;表中的行、列次序并不重要。學號姓名性別年齡所在系出生日期年月日9512101李勇男19計算機系1984469512102劉晨男20計算機系198412159512103王敏女20計算機系19838219521101張立男22信息系198363不是基本屬性不是關(guān)系表一些基本術(shù)語(續(xù))元組:表中的每一行稱作是一個元組,它相當于一個記錄值。屬性:表中的每一列是一個屬性值的集合,列可以命名,稱為屬性名。

主碼:表中用于惟一地確定一個元組的一個屬性或最小的屬性組。域:屬性的取值范圍。如性別的域為:(‘男’,‘女’)主碼示例學生基本信息表:(學號,姓名,年齡,性別,所在系)學生修課信息表:(學號,課程號,成績)一些基本術(shù)語(續(xù))關(guān)系模式:二維表的結(jié)構(gòu)稱為關(guān)系模式,即,關(guān)系模式是二維表的表框架或表頭結(jié)構(gòu)。關(guān)系模式一般表示為:

關(guān)系名(屬性1,屬性2,…,屬性n)例如,學生關(guān)系模式為:

學生(學號,姓名,性別,年齡,所在系)各概念之間的關(guān)系81關(guān)系模型的數(shù)據(jù)操作

關(guān)系模型的操作對象是集合(也就是關(guān)系)。非關(guān)系型數(shù)據(jù)庫系統(tǒng)中典型的操作是一次一行或一次一個記錄。因此,集合處理能力是關(guān)系系統(tǒng)區(qū)別于其他系統(tǒng)的一個重要特征。關(guān)系數(shù)據(jù)模型的數(shù)據(jù)操作主要包括四種:查詢、插入、刪除和修改數(shù)據(jù)。關(guān)系模型的數(shù)據(jù)完整性約束

實體完整性參照完整性用戶定義的完整性實體完整性實體完整性是保證關(guān)系中的每個元組都是可識別的和惟一的。

而且表中不允許存在如下的記錄:無主碼值的記錄主碼值相同的記錄參照完整性用于描述實體之間的聯(lián)系。參照完整性一般是指多個實體(表)之間的關(guān)聯(lián)關(guān)系。

一般用外碼實現(xiàn)。外碼:取作本表(子表)屬性之一的外表(父表,主表)主碼。主碼值先在主表中生成,后在子表中引用外碼引用例1學生班屬于(學號,姓名,班號,…)(班號,專業(yè),人數(shù),…)外碼引用例2學生課程修課(學號,姓名,…)(課程號,課程名,…)(學號,課程號,成績,…)參照完整性規(guī)則參照完整性規(guī)則就是定義外碼與主碼之間的引用規(guī)則。對于外碼,一般應符合如下要求:或者值為空;或者等于其所應用的關(guān)系中的某個元組的主碼值。外碼性質(zhì)外碼可以有重復值。例:如下兩個關(guān)系模式表示:職工(職工號,職工名,部門號,工資級別)部門(部門號,部門名)如果某新來職工還沒有被分配到具體的部門,則其“部門號”就為空值;如果職工已經(jīng)被分配到了某個部門,則其部門號就有了確定的值(非空值)。外碼用戶定義的完整性也稱為域完整性或語義完整性。按應用語義,屬性數(shù)據(jù)有:類型與長度限制:方便計算機操作取值范圍限制:防止屬性值與應用語義矛盾語義許可取值范圍約束例:

成績?nèi)0..100],{優(yōu)、良、中、及格、不及格}2.4數(shù)據(jù)庫系統(tǒng)的結(jié)構(gòu)

2.4.1三級模式結(jié)構(gòu)

2.4.2模式映象與數(shù)據(jù)獨立性三級模式結(jié)構(gòu)外模式2外模式n外模式1概念模式內(nèi)模式…(單個用戶視圖)(公共用戶視圖)(存儲視圖)概念模式是關(guān)系的。外模式也是關(guān)系的或接近關(guān)系的,其內(nèi)容來自概念模式,它最接近用戶。內(nèi)模式不是關(guān)系的,它是數(shù)據(jù)的物理存儲方式。外模式也稱為用戶模式、子模式。

用戶對現(xiàn)實系統(tǒng)中感興趣整體的局部數(shù)據(jù)結(jié)構(gòu)的描述。是DB整體數(shù)據(jù)結(jié)構(gòu)的子集或局部重構(gòu)。用外模式定義語言表達。例,對RDB,定義視圖結(jié)構(gòu)。是保證數(shù)據(jù)庫安全的一個措施。示例1——子集96學

號姓

名年

齡性

別所

系0611101李勇21男計算機系0611102劉晨20男計算機系0611103王敏20女計算機系0621101張立20男信息管理系0621102吳賓19女信息管理系學

號姓

名性

別0611101李勇男0611102劉晨男0611103王敏女0621101張立男0621102吳賓女學生模式外模式學

號06111010611102061110306211010621102姓

名李勇劉晨王敏張立吳賓性

別男男女男女示例2——重構(gòu)學生(學號,姓名,性別,年齡,所在系)課程(課程號,課程名,學分)選課(學號,課程號,成績)97學生(姓名,課程名,成績)姓名課程名成績示例3——安全性職工表(職工號,姓名,所在部門,基本工資,職務工資,獎勵工資)98職工信息(職工號,姓名,所在部門,基本工資,職務工資)獎勵工資概念模式也稱為邏輯模式或模式,是數(shù)據(jù)庫中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是所有用戶的公共數(shù)據(jù)描述。是數(shù)據(jù)庫系統(tǒng)結(jié)構(gòu)的中間層。用模式定義語言表達。例,對關(guān)系數(shù)據(jù)庫,定義:表頭結(jié)構(gòu)、屬性取值范圍、…。99模式實際上是數(shù)據(jù)庫數(shù)據(jù)在邏輯級上的視圖。一個數(shù)據(jù)庫只有一種模式。不涉及存儲記錄對列、索引、指針或其他存儲的訪問細節(jié)。100內(nèi)模式也稱為存儲模式。數(shù)據(jù)的內(nèi)部存儲結(jié)構(gòu)描述(數(shù)據(jù)的組織與存儲)。用內(nèi)模式定義語言描述。例,對RDB,定義數(shù)據(jù)文件的位置、索引的依據(jù)等。1012.4.2模式映象與數(shù)據(jù)獨立性數(shù)據(jù)庫系統(tǒng)的三級模式是對數(shù)據(jù)的三個抽象級別,它把數(shù)據(jù)的具體組織留給DBMS管理,使用戶能邏輯地、抽象地處理數(shù)據(jù),而不必關(guān)心數(shù)據(jù)在計算機中的具體表示方式與存儲方式。為了能夠在內(nèi)部實現(xiàn)這三個抽象層次的聯(lián)系和轉(zhuǎn)換,數(shù)據(jù)庫管理系統(tǒng)在三級模式之間提供了兩層映象:外模式/模式映象模式/內(nèi)模式映象102模式間的映象

(DBMS基本功能之一)維持DB數(shù)據(jù)與DB應用程序相互獨立,從而使DB應用程序不隨DB數(shù)據(jù)的邏輯或存儲結(jié)構(gòu)的變動而變動。

103模式/內(nèi)模式映象

當存儲結(jié)構(gòu)改變時,可(由DBA)用內(nèi)模式定義語句,調(diào)整內(nèi)模式定義,從而保持模式不變。

數(shù)據(jù)和程序物理獨立(存儲獨立)

104外模式/模式映象

當模式改變時,可用外模式/模式定義語句,調(diào)整外模式/模式映象定義,從而保持外模式不變。

數(shù)據(jù)和程序邏輯獨立(概念獨立)

1052.5數(shù)據(jù)庫管理系統(tǒng)DBMS是處理數(shù)據(jù)庫訪問的系統(tǒng)軟件。處理過程:用戶使用數(shù)據(jù)庫語言發(fā)出一個訪問請求;

DBMS接受請求并分析;DBMS檢查用戶外模式、相應的外模式/概念模式間的映象、概念模式、概念模式/內(nèi)模式間的映象和存儲結(jié)構(gòu)定義。106DBMS的功能和組成源模式和映象計劃的DML請求非計劃的DML請求DDL處理器DML處理器查詢語言處理器編譯器運行管理器源模式、目標模式和映象元數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)字典增強安全性和完整性約束優(yōu)化處理器107數(shù)據(jù)庫管理系統(tǒng)的功能數(shù)據(jù)定義數(shù)據(jù)操作優(yōu)化和執(zhí)行數(shù)據(jù)安全和完整性數(shù)據(jù)恢復和并發(fā)數(shù)據(jù)字典性能108數(shù)據(jù)庫原理與應用教程(第5版)第3章SQL語言基礎及數(shù)據(jù)定義功能

3.1基本概念3.2SQLServer的主要數(shù)據(jù)類型3.3數(shù)據(jù)定義功能3.4數(shù)據(jù)完整性3.1基本概念3.1.1SQL語言的發(fā)展3.1.2SQL語言的特點3.1.3SQL語言功能概述

3.1.1SQL語言的發(fā)展1986年10月由美國ANSI公布最早的SQL標準。1989年4月,ISO提出了具備完整性特征的SQL,稱為SQL-89。1992年11月,ISO又公布了新的SQL標準,稱為SQL-92(以上均為關(guān)系形式)。

1999年頒布SQL-99,是SQL92的擴展。3.1.2SQL語言的特點1.一體化2.高度非過程化3.簡潔4.使用方式多樣3.1.3SQL語言功能概述SQL功能命令動詞數(shù)據(jù)查詢SELECT數(shù)據(jù)定義CREATE、DROP、ALTER數(shù)據(jù)操縱INSERT、UPDATE、DELETE數(shù)據(jù)控制GRANT、REVOKE四部分:數(shù)據(jù)定義功能、數(shù)據(jù)控制功能、數(shù)據(jù)查詢功能和數(shù)據(jù)操縱功能。

3.2SQL的數(shù)據(jù)類型數(shù)值型字符串型日期和時間型數(shù)值型準確型

整數(shù)Bigint:8字節(jié),Int:4字節(jié)Smallint:2字節(jié),Tinyint:1字節(jié)Bit:1位,存儲1或0小數(shù)Numeric(p,q)或Decimal(p,q),其中:p為數(shù)字位長度,q:小數(shù)位長度。近似型

Float:8字節(jié)

Real:4字節(jié)字符串型普通編碼字符串類型統(tǒng)一字符編碼字符串類型二進制字符串類型普通編碼字符串類型Char[(n)]:定長存儲,n范圍:1~8000Varchar[(n|max)]:不定長存儲(按實際長度存儲),n范圍:1~8000,max指示最大存儲大小是2GB。

注:n為字符個數(shù)統(tǒng)一字符編碼字符串類型nchar(n):定長存儲,n<=4000nvarchar(n):不定長存儲,長度最大不超過n,n<=4000ntext:存儲大于8000字節(jié)的文本特點:每個字符占兩個字節(jié)二進制字符串類型Binary(n):固定長度,n<=8000。Varbinary(n):可變長度,n<=8000。注:n為二進制數(shù)據(jù)的字節(jié)數(shù)image:大容量、可變長二進制字符數(shù)據(jù),可用于存儲文件。日期時間型Datetime:8字節(jié),年月日時分秒毫秒 (例:‘2001/08/0310:30:00.000’)

SmallDateTime:4字節(jié),年月日時分(例:‘2001/08/0310:30:00’)日期、時間的輸入格式日期時間型(續(xù))date:3字節(jié),定義一個日期。格式:YYYY-MM-DD,

范圍:0001-01-01到9999-12-31

Time:5字節(jié),定義一天中的某個時間。格式:hh:mm:ss[.n*]n*是0到7位數(shù)字,范圍:0~99999993.3數(shù)據(jù)定義功能

3.3.1基本表的定義與刪除3.3.2修改表結(jié)構(gòu)3.3.1基本表的定義與刪除1.定義基本表使用SQL語言中的CREATETABLE語句實現(xiàn),其一般格式為:CREATETABLE<表名>(<列名><數(shù)據(jù)類型>[列級完整性約束定義]{,<列名><數(shù)據(jù)類型>[列級完整性約束定義]…}[,表級完整性約束定義])

在列級完整性約束定義處可以定義的約束NOTNULL:限制列取值非空。DEFAULT:給定列的默認值。UNIQUE:限制列取值不重。CHECK:限制列的取值范圍。PRIMARYKEY:指定本列為主碼。FOREIGNKEY:定義本列為引用其他表的外碼。使用形式為:[FOREIGNKEY(<外碼列名>)]

REFERENCES<外表名>(<外表列名>)幾點說明NOTNULL和DEFAULT只能是列級完整性約束;其他約束均可在表級完整性約束處定義。注意以下幾點:第一,如果CHECK約束是定義多列之間的取值約束,則只能在表級完整性約束處定義;第二,如果表的主碼由多個列組成,則也只能在表級完整性約束處定義,并將主碼列用括號括起來,即:PRIMARYKEY(列1{[,列2]…});第三,如果在表級完整性約束處定義外碼,則“FOREIGNKEY(<外碼列名>)”部分不能省。約束定義

①列取值非空約束<列名><類型>NOTNULL

例:snamechar(10)NOTNULL約束定義(續(xù))②表主碼約束在定義列時定義主碼(僅用于單列主碼)列定義PRIMARYKEY例:SNOchar(7)PRIMARYKEY在定義完列時定義主碼(用于單列或多列主碼)PRIMARYKEY

(<列名序列>)

例:PRIMARYKEY(SNO)PRIMARYKEY(SNO,CNO)約束定義(續(xù))③外碼引用約束指明本表外碼列引用的表及表中的主碼列。

[FOREIGNKEY(<本表列名>)]REFERENCES<外表名>(<外表主碼列名>)例:

FOREIGNKEY(sno)

REFERENCES學生表(sno)創(chuàng)建學生表CREATETABLEStudent(Snochar(7)PRIMARYKEY,Snamechar(10)NOTNULL,Ssexchar(2),Sagetinyint,Sdeptchar(20))創(chuàng)建課程表CREATETABLECourse(Cnochar(10)NOTNULL,Cnamechar(20)NOTNULL,Ccredittinyint,Semestertinyint,PRIMARYKEY(Cno))

創(chuàng)建SC表CREATETABLESC(Snochar(7)NOTNULL,Cnochar(10)NOTNULL,Gradetinyint,PRIMARYKEY(Sno,Cno),FOREIGNKEY(Sno)REFERENCESStudent(Sno),FOREIGNKEY(Cno)REFERENCESCourse(Cno))刪除表當確信不再需要某個表時,可以將其刪除刪除表時會將與表有關(guān)的所有對象一起刪掉,包括表中的數(shù)據(jù)。刪除表的語句格式為:DROPTABLE<表名>{[,<表名>]…}例:刪除test表的語句為:DROPTABLEtest3.3.2修改表結(jié)構(gòu)在定義完表之后,如果需求有變化,比如添加列、刪除列或修改列定義,可以使用ALTERTABLE語句實現(xiàn)。ALTERTABLE語句可以對表添加列、刪除列、修改列的定義、定義主碼、外碼,也可以添加和刪除約束。修改表結(jié)構(gòu)語法ALTERTABLE<表名>[ALTERCOLUMN<列名><新數(shù)據(jù)類型>]|[ADD[COLUMN]<列名><數(shù)據(jù)類型>|[DROPCOLUMN<列名>]|[ADDPRIMARYKEY(列名[,…n])]|[ADDFOREIGNKEY(列名)REFERNECES表名(列名)]示例例2.為SC表添加“修課類別”列,此列的定義為:XKLBchar(4)ALTERTABLESCADDXKLBchar(4)NULL

示例例3.將新添加的XKLB的類型改為char(6)。ALTERTABLESCALTERCOLUMNXKLBchar(6)示例例3.刪除Course表的Period列。ALTERTABLECourseDROPCOLUMNPeriod

3.4數(shù)據(jù)完整性3.4.1完整性約束條件的作用對象3.4.2實現(xiàn)數(shù)據(jù)完整性

完整性約束條件的作用對象完整性檢查是圍繞完整性約束條件進行的,因此,完整性約束條件是完整性控制機制的核心。完整性約束條件的作用對象可以是表、元組和列。列級約束元組約束關(guān)系約束列級約束列級約束主要是對列的類型、取值范圍、精度等的約束,具體包括:對數(shù)據(jù)類型的約束:包括數(shù)據(jù)類型、長度、精度等。對數(shù)據(jù)格式的約束:如規(guī)定學號的前兩位表示學生的入學年份,第三位表示系的編號,第四位表示專業(yè)編號,第五位代表班的編號等等。對取值范圍的約束:如學生的成績?nèi)≈捣秶鸀?~100。對空值的約束。

元組約束元組的約束是元組中各個字段之間的聯(lián)系的約束,如:開始日期小于結(jié)束日期,職工的最低工資不能低于規(guī)定的最低保障金。關(guān)系約束指若干元組之間、關(guān)系之間的聯(lián)系的約束。比如:學號的取值不能重復也不能取空值,學生修課表中的學號的取值受學生表中的學號取值的約束

實現(xiàn)數(shù)據(jù)完整性

聲明完整性

在表定義時聲明使用約束、缺省值(DEFAULT)等由SQLServer自動加以保證過程完整性

在客戶端或服務器端用編程語言或工具實現(xiàn)在Server端用觸發(fā)器(trigger)來實現(xiàn)實現(xiàn)約束1.PRIMARYKEY約束2.UNIQUE約束3.FOREIGNKEY約束4.DEFAULT約束5.CHECK約束PRIMARYKEY約束保證實體完整性每個表有且只有一個PRIMARYKEY約束格式:ALTERTABLE表名

ADD[CONSTAINT約束名]

PRIMARYKEY(列名[,…n])示例例:對雇員表和工作表分別添加主碼約束。ALTERTABLE雇員表

ADDCONSTRAINTPK_EMPPRIMARYKEY(雇員編號)ALTERTABLE工作表

ADDCONSTRAINTPK_JOBPRIMARYKEY(工作編號)UNIQUE約束確保在非主鍵列中不輸入重復值。應用在客觀具有唯一性質(zhì)的列上,如身份證號、社會保險號等。格式:ALTERTABLE表名

ADD[CONSTRAINT約束名]UNIQUE(<列名>[,…n])示例例.為雇員表的“電話號碼”列添加UNIQUE約束。ALTERTABLE雇員表

ADDCONSTRAINTUK_SIDUNIQUE

(電話號碼)FOREIGNKEY約束用于建立和加強兩個表數(shù)據(jù)之間的連接的一列或多列格式:ALTERTABLE表名

ADD[CONSTRAINT約束名]FOREIGNKEY

(<列名>)REFERENCES引用表名(<列名>)示例例.為雇員表的工作編號添加外碼引用約束,此列引用工作表的工作編號列。ALTERTABLE雇員

ADDCONSTRAINTFK_job_idFOREIGNKEY(工作編號)REFERENCES工作表(工作編號)

DEFAULT約束當向表中插入數(shù)據(jù)時,如果沒有為定義了DEFAULT的列提供值,則是隱式要求為此列使用默認值。一個Default只能約束一列。格式:ALTERTABLE表名

ADD[CONSTRAINT約束名]DEFAULT默認值FOR列名示例例.定義雇員表的工資的默認值為3600。ALTERTABLE雇員

ADDCONSTRAINTDF_SALARYDEFAULT3600FOR工資CHECK約束通過限制輸入到列中的值來強制域的完整性??啥x同表多列之間的約束關(guān)系格式:ALTERTABLE表名

ADD[CONSTRAINT約束名]CHECK(邏輯表達式)示例1例1.在雇員表中,添加限制雇員的工資必須大于等于2000的約束。ALTERTABLE雇員

ADDCONSTRAINTCHK_SalaryCHECK(工資>=2000)示例2例2.添加限制工資表的最低工資小于等于最高工資的約束。ALTERTABLE工作

ADDCONSTRAINTCHK_Job_SalaryCHECK(最低工資<=最高工資)綜合起來CREATETABLE工作(

工作編號char(8)PRIMARYKEY,

最低工資int,

最高工資int,CHECK(最低工資<=最高工資))CREATETABLE雇員

(

雇員編號char(7)PRIMARYKEY,

雇員名char(10),

工作編號char(8)REFERENCES工作(工作編號),

工資intDEFAULT3600CHECK(工資>=2000),

電話號碼char(8)notnullUNIQUE)數(shù)據(jù)庫原理與應用教程第4章數(shù)據(jù)操作4.1數(shù)據(jù)查詢4.2數(shù)據(jù)更改4.2數(shù)據(jù)查詢擴展4.1數(shù)據(jù)查詢功能4.1.1查詢語句的基本結(jié)構(gòu)4.1.2單表查詢4.1.3多表連接查詢4.1.4使用TOP限制結(jié)果集4.1.4子查詢查詢語句基本格式SELECT<目標列名序列>--需要哪些列

FROM<數(shù)據(jù)源>--來自于哪些表

[WHERE<檢索條件>]--根據(jù)什么條件

[GROUPBY<分組依據(jù)列>][HAVING<組提取條件>][ORDERBY<排序依據(jù)列>]4.1.2單表查詢1.選擇表中若干列

之1.查詢指定的列查詢表中用戶感興趣的部分屬性列。例1:查詢?nèi)w學生的學號與姓名。SELECTSno,SnameFROMStudent例2.查詢?nèi)w學生的姓名、學號、所在系SELECTSname,Sno,Sdept FROMStudent2.查詢?nèi)苛?/p>

例3.查詢?nèi)w學生的記錄SELECTSno,Sname,Ssex,Sage,SdeptFROMStudent等價于:

SELECT*FROMStudent

3.查詢經(jīng)過計算的列例4.查詢?nèi)w學生的姓名及其出生年份。

SELECTSname,2010-Sage

FROMStudent常量列

例5.查詢?nèi)w學生的姓名和出生年份所在系,并在出生年份列前加入一個列,此列的每行數(shù)據(jù)均為“出生年份”常量值。SELECTSname,'出生年份:',2010-SageFROMStudent

改變列標題

語法:列名|表達式[AS]列標題或:列標題=列名|表達式例:

SELECTSname姓名,'YearofBirth'

出生年份,2010-Sage年份,F(xiàn)ROMStudent

4.1.2單表查詢2.選擇表中若干元組

之1.消除取值相同的行例6.查詢選修了課程的學生的學號SELECTSnoFROMSC有重復行!要去掉結(jié)果表中的重復行,可用DISTINCTSELECTDISTINCTSnoFROMSC2.查詢滿足條件的元組查詢條件謂詞比較運算符=,>,>=,<,<=,<>(或!=)NOT+比較運算符確定范圍BETWEEN…AND,NOTBETWEEN…AND確定集合IN,NOTIN字符匹配LIKE,NOTLIKE空值ISNULL,ISNOTNULL邏輯謂詞)AND,OR比較大小例7.查詢計算機系全體學生的姓名。

SELECTSnameFROMStudentWHERESdept='計算機系'例8.查詢年齡在20歲以下的學生的姓名及年齡。

SELECTSname,SageFROMStudentWHERESage<20例9.查詢考試成績有不及格的學生的學號

SELECTDISTINCTSnoFROMSCWHEREGrade<60確定范圍用BETWEEN…AND和NOTBETWEEN…AND是邏輯運算符,可以用來查找屬性值在或不在指定范圍內(nèi)的元組,其中BETWEEN后邊指定范圍的下限,AND后邊指定范圍的上限。BETWEEN…AND…的格式為:

列名|表達式[NOT]BETWEEN下限值AND上限值如果列或表達式的值在[不在]下限值和上限值范圍內(nèi),則結(jié)果為True,表明此記錄符合查詢條件。

示例例10.查詢年齡在20~23歲之間的學生的姓名、所在系和年齡。SELECTSname,Sdept,SageFROMStudent WHERESageBETWEEN20AND23例11.查詢年齡不在20~23之間的學生姓名、所在系和年齡。SELECTSname,Sdept,SageFROMStudent WHERESageNOTBETWEEN20AND23確定集合使用IN運算符。用來查找屬性值屬于指定集合的元組。格式為:

列名[NOT]IN(常量1,常量2,…常量n)當列中的值與IN中的某個常量值相等時,則結(jié)果為True,表明此記錄為符合查詢條件的記錄;NOTIN:當列中的值與某個常量值相同時,則結(jié)果為False,表明此記錄為不符合查詢條件的記錄示例例12.查詢信息系、數(shù)學系和計算機系學生的姓名和性別。

SELECTSname,SsexFROMStudent WHERESdeptIN('信息系','數(shù)學系','計算機系')例13.查詢既不是信息系、數(shù)學系,也不是計算機系學生的姓名和性別。

SELECTSname,SsexFROMStudent WHERESdeptNOTIN('信息系','數(shù)學系','計算機系')字符匹配使用LIKE運算符一般形式為:

列名[NOT]LIKE<匹配串>匹配串中可包含如下四種通配符:_:匹配任意一個字符;%:匹配0個或多個字符;[]:匹配[]中的任意一個字符;對于連續(xù)字母的匹配,例如匹配[abcd],可簡寫為[a-d][^]:不匹配[]中的任意一個字符

示例例14.查詢姓‘張’的學生的詳細信息。

SELECT*FROMStudentWHERESnameLIKE'張%'例15.查詢學生表中姓‘張’、‘李’和‘劉’的學生的情況。

SELECT*FROMStudentWHERESnameLIKE'[張李劉]%'例16.查詢名字中第2個字為‘小’或‘大’的學生的姓名和學號。

SELECTSname,SnoFROMStudentWHERESnameLIKE'_[小大]%'示例(續(xù))例17.查詢所有不姓“王”也不姓“張”的學生姓名

SELECTSnameFROMStudentWHERESnameNOTLIKE

‘[王張]%'或者:

SELECTSnameFROMStudentWHERESnameLIKE'[^王張]%'或者:SELECTSnameFROMStudentWHERESnameNOTLIKE'王%'ANDSnameNOTLIKE'張%'

示例(續(xù))例18.查詢姓“王”且名字是2個字的學生姓名。

SELECTSnameFROMStudentWHERESnameLIKE'王_'示例(續(xù))例19.查詢姓王且名字是3個字的學生姓名

SELECTSnameFROMStudentWHERESnameLIKE'王__'

注意:尾隨空格的處理。SELECTSnameFROMStudentWHERErtrim(Sname)LIKE'王__'涉及空值的查詢空值(NULL)在數(shù)據(jù)庫中表示不確定的值。例如,學生選修課程后還沒有考試時,這些學生有選課記錄,但沒有考試成績,因此考試成績?yōu)榭罩?。判斷某個值是否為NULL值,不能使用普通的比較運算符。判斷取值為空的語句格式為:列名ISNULL判斷取值不為空的語句格式為:列名ISNOTNULL

示例例20.查詢沒有考試成績的學生的學號和相應的課程號。

SELECTSno,CnoFROMSCWHEREGradeISNULL例21.查詢所有有考試成績的學生的學號和課程號。

SELECTSno,CnoFROMSCWHEREGradeISNOTNULL

多重條件查詢在WHERE子句中可以使用邏輯運算符AND和OR來組成多條件查詢。用AND連接的條件表示必須全部滿足所有的條件的結(jié)果才為True;用OR連接的條件表示只要滿足其中一個條件結(jié)果即為True。例21.查詢計算機系年齡在20歲以下的學生姓名。

SELECTSnameFROMStudentWHERESdept=‘計算機系'ANDSage<20

示例(續(xù))例23.查詢計算機系和信息系年齡大于等于20歲的學生姓名、所在系和年齡。SELECTSname,Sdept,SageFROMStudentWHERE(Sdept='計算機系'ORSdept='信息系')ANDSage>=20或:SELECTSname,Sdept,SageFROMStudentWHERESdeptIN('計算機系','信息系')ANDSage>=20

4.1.2單表查詢3.對查詢結(jié)果進行排序

之對查詢結(jié)果進行排序可對查詢結(jié)果進行排序。排序子句為:

ORDERBY<列名>[ASC|DESC][,<列名>…]說明:按<列名>進行升序(ASC)或降序(DESC)排序。示例例22.將學生按年齡的升序排序。

SELECT*FROMStudentORDERBYSage例23.查詢選修了‘c02’號課程的學生的學號及其成績,查詢結(jié)果按成績降序排列。SELECTSno,GradeFROMSC WHERECno='c02'ORDERBYGradeDESC

例24.查詢?nèi)w學生的信息,查詢結(jié)果按所在系的系名升序排列,同一系的學生按年齡降序排列。SELECT*FROMStudent

ORDERBYSdept,SageDESC

4.1.2單表查詢4.使用聚合函數(shù)匯總數(shù)據(jù)

之使用聚合函數(shù)匯總數(shù)據(jù)SQL提供的聚合函數(shù)有:COUNT(*):統(tǒng)計表中元組個數(shù);COUNT([DISTINCT]<列名>):統(tǒng)計本列列值個數(shù)SUM([DISTINCT]<列名>):計算列值總和;AVG([DISTINCT]<列名>):計算列值平均值;MAX([DISTINCT]<列名>):求列值最大值;MIN([DISTINCT]<列名>

):求列值最小值。上述函數(shù)中除COUNT(*)外,其他函數(shù)在計算過程中均忽略NULL值。示例例25.統(tǒng)計學生總?cè)藬?shù)。

SELECTCOUNT(*)FROMStudent

例26.統(tǒng)計選修了課程的學生的人數(shù)。

SELECTCOUNT(DISTINCTSno)FROMSC例27.計算9512101號學生的考試總成績之和。SELECTSUM(Grade)FROMSCWHERESno='9512101'

示例(續(xù))例28.計算’C01’號課程學生的考試平均成績。

SELECTAVG(Grade)FROMSCWHERECno='C01'例29.查詢選修了’C01’號課程的學生的最高分和最低分。

SELECTMAX(Grade),MIN(Grade)FROMSCWHERECno='C01'注意:聚合函數(shù)不能出現(xiàn)在WHERE子句中

4.1.2單表查詢5.對查詢結(jié)果進行分組計算

之對查詢結(jié)果進行分組計算作用:可以控制計算的級別:對全表還是對一組。目的:細化計算函數(shù)的作用對象。分組語句的一般形式: [GROUPBY<分組條件>] [HAVING<組過濾條件>]

1.使用GROUPBY例30.統(tǒng)計每門課程的選課人數(shù),列出課程號和人數(shù)。SELECTCnoas課程號,COUNT(Sno)as選課人數(shù)FROMSCGROUPBYCno

對查詢結(jié)果按Cno的值分組,所有具有相同Cno值的元組為一組,然后再對每一組使用COUNT計算,求得每組的學生人數(shù)。SnoCnoGrade951201C0180951201C0278951202C0190952103C0288952103C0185952103C0391952103C0474CnoCount(Sno)C013C022C031C041SnoCnoGrade951201C0180951202C0190952103C0185951201C0278952103C0288952103C0391952103C0474例31.查詢每名學生的選課門數(shù)和平均成績。SELECTSnoas學號,COUNT(*)as選課門數(shù),AVG(Grade)as平均成績FROMSCGROUPBYSno2.使用HAVINGHAVING用于對分組自身進行限制,它有點象WHERE子句,但它用于組而不是對單個記錄。例32.查詢修了3門以上課程的學生的學號

SELECTSnoFROMSCGROUPBYSno

HAVINGCOUNT(*)>3

示例例33.查詢修課門數(shù)等于或大于4門的學生的平均成績和選課門數(shù)。

SELECTSno,AVG(Grade)平均成績,COUNT(*)修課門數(shù)

FROMSCGROUPBYSno

HAVINGCOUNT(*)>=4

4.1.3多表連接查詢?nèi)粢粋€查詢同時涉及兩個或兩個以上的表,則稱之為連接查詢。連接查詢是關(guān)系數(shù)據(jù)庫中最主要的查詢連接查詢包括內(nèi)連接、外連接和交叉連接等。連接基礎知識連接查詢中用于連接兩個表的條件稱為連接條件或連接謂詞。一般格式為:[<表名1.>][<列名1>]<比較運算符>[<表名2.>][<列名2>]必須是可比的內(nèi)連接SQL-92內(nèi)連接語法如下:

SELECT…FROM表名[INNER]JOIN被連接表

ON連接條件執(zhí)行連接操作的過程:首先取表1中的第1個元組,然后從頭開始掃描表2,逐一查找滿足連接條件的元組,找到后就將表1中的第1個元組與該元組拼接起來,形成結(jié)果表中的一個元組。表2全部查找完畢后,再取表1中的第2個元組,然后再從頭開始掃描表2,…重復這個過程,直到表1中的全部元組都處理完畢為止。

例36.查詢計算機系學生的修課情況,要求列出學生的名字、所修課的課程號和成績。

SELECTSname,Cno,GradeFROMStudentJOINSCONStudent.Sno=SC.SnoWHERESdept='計算機系'例37.查詢信息系修了Java課程的學生的修課成績,要求列出學生姓名、課程名和成績。SELECTSname,Cname,GradeFROMStudentsJOINSCONs.Sno=SC.SnoJOINCoursecONc.Cno=SC.CnoWHERESdept='信息系'ANDCname='Java'示例例38.查詢所有修了Java課程的學生的修課情況,要求列出學生姓名和所在的系。SELECTSname,SdeptFROMStudentSJOINSCONS.Sno=SC.Sno

JOINCourseCONC.Cno=SC.cnoWHERECname='Java'示例例46.有分組的多表連接查詢。統(tǒng)計每個系的學生的考試平均成績。SELECTSdept,AVG(grade)asAverageGradeFROMstudentSJOINSCONS.Sno=SC.SnoGROUPBYSdept示例例47.有分組和行選擇條件的多表連接查詢。統(tǒng)計計算機系每門課程的選課人數(shù)、平均成績、最高成績和最低成績。SELECTCno,COUNT(*)ASTotal,

AVG(Grade)AS

AvgGrade,MAX(Grade)ASMaxGrade,MIN(Grade)ASMinGradeFROMStudentSJOINSCONS.Sno=SC.SnoWHERESdept='計算機系'GROUPBYCno自連接為特殊的內(nèi)連接相互連接的表物理上為同一張表。必須為兩個表取別名,使之在邏輯上成為兩個表。例39.查詢與劉晨在同一個系學習的學生的姓名和所在的系。SELECTS2.Sname,S2.SdeptFROMStudentS1JOINStudentS2ONS1.Sdept=S2.SdeptWHERES1.Sname=‘劉晨’

ANDS2.Sname!=‘劉晨’例49.查詢與“數(shù)據(jù)結(jié)構(gòu)”學分相同的課程的課程名和學分。SELECTC1.Cname,C1.CreditFROMCourseC1JOINCourseC2ONC1.Credit=C2.CreditWHEREC2.Cname='數(shù)據(jù)結(jié)構(gòu)'外連接只限制一張表中的數(shù)據(jù)必須滿足連接條件,而另一張表中數(shù)據(jù)可以不滿足連接條件。

ANSI方式的外連接的語法格式為:

FROM表1LEFT|RIGHT[OUTER]JOIN表2ON<連接條件>theta方式的外連接的語法格式為:左外連接:

FROM表1,表2WHERE[表1.]列名(+)=[表2.]列名右外連接:

FROM表1,表2WHERE[表1.]列名=[表2.]列名(+)

內(nèi)連接與外連接示意圖FROM表AJOIN表BON表A.某列=表B.某列

CFROM表ALEFTJOIN表BON表A.某列=表B.某列 A1+CFROM表ARIGHTJOIN表BON表A.某列=表B.某列

B1+C示例例50.查詢沒人選的課程,列出課程名。SELECTCnameFROMCourseC

LEFTJOINSCONC.Cno=SC.Cno

WHERESC.CnoISNULL示例例51.查詢計算機系沒選課的學生,列出學生姓名和性別。SELECTSname,SsexFROMStudentLEFTJOINSCONStudent.Sno=SC.SnoWHERESC.SnoISNULLANDSdept='計算機系'示例例52.統(tǒng)計第2-4學期開設的課程中,每門課程的選課人數(shù),包括沒人選的課程,列出課程號和選課人數(shù)。SELECTC.Cno課程號,COUNT(SC.Cno)選課人數(shù)FROMCourseCLEFTOUTERJOINSCONC.Cno=SC.CnoWHERESemesterIN(2,3,4)GROUPBYC.Cno在使用SELECT語句進行查詢時,有時只希望列出結(jié)果集中的前幾行結(jié)果,而不是全部結(jié)果。例如,競賽時,一般只取成績最高的前三名,這時就可以使用TOP謂詞來限制輸出的結(jié)果。使用TOP謂詞的格式如下:TOPn[percent][WITHTIES]

n為非負整數(shù)。TOPn:表示取查詢結(jié)果的前n行數(shù)據(jù);TOPnpercnet:表示取查詢結(jié)果的前n%行數(shù)據(jù);WITHTIES:表示包括并列的結(jié)果。示例例53.查詢年齡最大的三個學生的姓名、年齡及所在系。SELECTTOP3Sname,Sage,SdeptFROMStudentORDERBYSageDESC示例例54.查詢Java課程考試成績前三名的學生的姓名、所在系和成績。SELECTTOP3WITHTIESSname,Sdept,GradeFROMStudentSJOINSConS.Sno=SC.SnoJOINCourseCONC.Cno=SC.CnoWHERECname='Java'ORDERBYGradeDESC示例例55.查詢選課人數(shù)最多的前兩門課程(包括并列情況),列出課程號和選課人數(shù)。SELECTTOP2WITHTIESC.Cno課程號,

COUNT(*)選課人數(shù)FROMCourseCJOINSCONC.Cno=SC.CnoGROUPBYC.CnoORDERBYCOUNT(*)DESC4.1.5子查詢在SQL語言中,一個SELECT-FROM-WHERE語句稱為一個查詢塊。子查詢是一個SELECT查詢,它嵌套在SELECT、INSERT、UPDATE、DELETE語句的WHERE或HAVING子句內(nèi),或其它子查詢中子查詢的SELECT查詢總是使用圓括號括起來。使用子查詢進行基于集合的測試使用子查詢進行基于集合的測試的語句的一般格式為:列名[NOT]IN(子查詢)示例例56.查詢與劉晨在同一個系的學生。

SELECTSno,Sname,SdeptFROMStudent WHERESdeptIN (SELECTSdeptFROMStudent WHERESname=‘劉晨’)

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論