數(shù)據(jù)庫(kù)基礎(chǔ)教材要點(diǎn)_第1頁(yè)
數(shù)據(jù)庫(kù)基礎(chǔ)教材要點(diǎn)_第2頁(yè)
數(shù)據(jù)庫(kù)基礎(chǔ)教材要點(diǎn)_第3頁(yè)
數(shù)據(jù)庫(kù)基礎(chǔ)教材要點(diǎn)_第4頁(yè)
數(shù)據(jù)庫(kù)基礎(chǔ)教材要點(diǎn)_第5頁(yè)
已閱讀5頁(yè),還剩181頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第1章數(shù)據(jù)庫(kù)概述本章介紹數(shù)據(jù)庫(kù)的一些基本術(shù)語(yǔ)和概念,介紹數(shù)據(jù)管理的幾個(gè)階段,以及關(guān)系數(shù)據(jù)庫(kù)的一些特點(diǎn)。本章目標(biāo):完成本章內(nèi)容后我們將能夠:掌握數(shù)據(jù)庫(kù)的術(shù)語(yǔ)和概念了解數(shù)據(jù)管理的幾個(gè)階段掌握關(guān)系型數(shù)據(jù)庫(kù)1.1數(shù)據(jù)庫(kù)常用的術(shù)語(yǔ)和基本概念(1)數(shù)據(jù)[Data]:是數(shù)據(jù)庫(kù)中存儲(chǔ)的基本對(duì)象。數(shù)據(jù)在大多數(shù)人頭腦中的第一個(gè)反映就是數(shù)字。其實(shí)數(shù)字只是最簡(jiǎn)單的一種數(shù)據(jù),是數(shù)據(jù)的一種傳統(tǒng)和狹義的理解。廣義的理解,數(shù)據(jù)的種類很多,例如:文字、圖形、圖像、聲音、學(xué)生的檔案記錄、貨運(yùn)的運(yùn)輸情況等。描述事物的符號(hào)記錄稱為數(shù)據(jù)。描述事物的符號(hào)可以是數(shù)字,也可以是文字、圖像、圖形、聲音、語(yǔ)言等,數(shù)據(jù)有多種表現(xiàn)形式,它們都可以經(jīng)過(guò)數(shù)字化后存入計(jì)算機(jī)。舉例:在學(xué)生檔案中,描述一個(gè)學(xué)生的一條記錄(黎明,男,1988-08-08,江蘇,計(jì)算機(jī)專業(yè),2001-07)這就是數(shù)據(jù)。(2)數(shù)據(jù)庫(kù)[DataBase],簡(jiǎn)稱DB。數(shù)據(jù)庫(kù),顧名思義,是存放數(shù)據(jù)的倉(cāng)庫(kù)。只不過(guò)這個(gè)倉(cāng)庫(kù)是在計(jì)算機(jī)存儲(chǔ)設(shè)備上,而且數(shù)據(jù)是按一定的格式存放的。所謂數(shù)據(jù)庫(kù)是指長(zhǎng)期儲(chǔ)存在計(jì)算機(jī)內(nèi)的、有組織的、可共享的數(shù)據(jù)集合。數(shù)據(jù)庫(kù)中的數(shù)據(jù)按一定的數(shù)據(jù)模型組織、描述和儲(chǔ)存,具有較小的冗余度、較高的數(shù)據(jù)獨(dú)立性和易擴(kuò)展性,并可為各種用戶共享。(3)數(shù)據(jù)庫(kù)管理系統(tǒng)[DataBaseManagementSystem]簡(jiǎn)稱DBMS如何科學(xué)地組織和存儲(chǔ)數(shù)據(jù),如何高效地獲取和維護(hù)數(shù)據(jù),完成這個(gè)任務(wù)的是一個(gè)系統(tǒng)軟件-數(shù)據(jù)庫(kù)管理系統(tǒng)。數(shù)據(jù)庫(kù)管理系統(tǒng)是位于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件。數(shù)據(jù)庫(kù)管理系統(tǒng)的主要功能:1)數(shù)據(jù)定義功能:DBMS提供數(shù)據(jù)定義語(yǔ)言(DataDefinitionLanguage,簡(jiǎn)稱DDL),用戶通過(guò)它可以方便地對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)對(duì)象進(jìn)行定義。2)數(shù)據(jù)操縱功能:DBMS還提供數(shù)據(jù)操縱語(yǔ)言(DataManipulationLanguage,簡(jiǎn)稱DML),用戶可以使用DML操縱數(shù)據(jù)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的基本操作,如查詢、插入、刪除和修改等。3)數(shù)據(jù)庫(kù)的運(yùn)行管理:數(shù)據(jù)庫(kù)在建立、運(yùn)用和維護(hù)時(shí)由數(shù)據(jù)庫(kù)管理系統(tǒng)統(tǒng)一管理、統(tǒng)一控制,以保證數(shù)據(jù)的安全性、完整性、多用戶對(duì)數(shù)據(jù)地并發(fā)使用及發(fā)生故障后的系統(tǒng)恢復(fù)。4)數(shù)據(jù)庫(kù)的建立和維護(hù)功能:它包括數(shù)據(jù)庫(kù)初始數(shù)據(jù)的輸入、轉(zhuǎn)換功能,數(shù)據(jù)庫(kù)的轉(zhuǎn)儲(chǔ)、恢復(fù)功能,數(shù)據(jù)庫(kù)的重組織功能和性能監(jiān)視、分析功能等。這些功能通常是由一些實(shí)用程序完成的。數(shù)據(jù)庫(kù)管理系統(tǒng)是數(shù)據(jù)庫(kù)系統(tǒng)的一個(gè)重要組成部分。(4)數(shù)據(jù)庫(kù)系統(tǒng)[DataBaseSystem,簡(jiǎn)稱DBS]數(shù)據(jù)庫(kù)系統(tǒng)一般由數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)(及其開(kāi)發(fā)工具)、應(yīng)用系統(tǒng)、數(shù)據(jù)庫(kù)管理員和用戶構(gòu)成。應(yīng)當(dāng)指出的是,數(shù)據(jù)庫(kù)的建立、使用和維護(hù)等工作只靠一個(gè)DBMS遠(yuǎn)遠(yuǎn)不夠,還要有專門的人員來(lái)完成,這些人被稱為數(shù)據(jù)庫(kù)管理員(DataBaseAdministrator,簡(jiǎn)稱DBA)。數(shù)據(jù)庫(kù)系統(tǒng)是指計(jì)算機(jī)系統(tǒng)中引進(jìn)了數(shù)據(jù)庫(kù)后的系統(tǒng),其計(jì)算機(jī)硬件、軟件如下圖所示。下面用一個(gè)實(shí)體與數(shù)據(jù)庫(kù)系統(tǒng)進(jìn)行比較,例如數(shù)據(jù)庫(kù)系統(tǒng)與圖書館的比較。數(shù)據(jù)庫(kù)圖書館數(shù)據(jù)圖書外存書庫(kù)用戶讀者數(shù)據(jù)模型書卡格式數(shù)據(jù)庫(kù)管理系統(tǒng)圖書館管理員數(shù)據(jù)的物理組織方法圖書館圖書存放方法用戶對(duì)數(shù)據(jù)庫(kù)的操作讀者對(duì)圖書館的訪問(wèn)(使用數(shù)據(jù)操縱語(yǔ)言對(duì)數(shù)據(jù)檢索、插入、刪除、修改)(用普通語(yǔ)言借書、還書等)1.2數(shù)據(jù)管理技術(shù)的產(chǎn)生和發(fā)展數(shù)據(jù)庫(kù)技術(shù)是應(yīng)數(shù)據(jù)管理任務(wù)的需要而產(chǎn)生的。數(shù)據(jù)的處理是指對(duì)各種數(shù)據(jù)進(jìn)行收集、存儲(chǔ)、加工和傳播的一系列活動(dòng)的總和。數(shù)據(jù)管理則是指對(duì)數(shù)據(jù)進(jìn)行分類、組織、編碼、存儲(chǔ)、檢索和維護(hù),它是數(shù)據(jù)處理的中心問(wèn)題。伴隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,數(shù)據(jù)處理及時(shí)地應(yīng)用了這一先進(jìn)的技術(shù)手段,使數(shù)據(jù)處理的效率和深度大大提高,也促使數(shù)據(jù)處理和數(shù)據(jù)管理的技術(shù)得到了很大的發(fā)展,其發(fā)展過(guò)程大致經(jīng)歷了人工管理、文件管理、數(shù)據(jù)庫(kù)管理及分布式數(shù)據(jù)庫(kù)管理等四個(gè)階段。1.2.1數(shù)據(jù)管理三個(gè)階段比較人工管理階段文件系統(tǒng)階段數(shù)據(jù)庫(kù)系統(tǒng)階段時(shí)間-50年代中期50年代后期-60年代中期60年代后期—應(yīng)用背景科學(xué)計(jì)算科學(xué)計(jì)算、管理大規(guī)模管理硬件背景無(wú)直接存取存儲(chǔ)設(shè)備磁盤、磁鼓大容量磁盤軟件背景沒(méi)有操作系統(tǒng)有操作系統(tǒng)(文件系統(tǒng))有DBMS處理方式批處理批處理聯(lián)機(jī)實(shí)時(shí)處理批處理聯(lián)機(jī)實(shí)時(shí)處理分布處理數(shù)據(jù)保存方式數(shù)據(jù)不保存以文件的形式長(zhǎng)期保存,但無(wú)結(jié)構(gòu)以數(shù)據(jù)形式保存,有結(jié)構(gòu)數(shù)據(jù)管理考慮安排數(shù)據(jù)的物理存儲(chǔ)位置與數(shù)據(jù)文件名打交道對(duì)所有數(shù)據(jù)實(shí)行統(tǒng)一、集中、獨(dú)立的管理數(shù)據(jù)與程序數(shù)據(jù)面向程序數(shù)據(jù)與程序脫離數(shù)據(jù)與程序脫離實(shí)現(xiàn)數(shù)據(jù)的共享數(shù)據(jù)的管理者人文件系統(tǒng)DBMS數(shù)據(jù)面向的對(duì)象某一應(yīng)用程序某一應(yīng)用程序現(xiàn)實(shí)世界數(shù)據(jù)的共享程度無(wú)共享共享性差共享性高數(shù)據(jù)的冗余度冗余度極大冗余度大冗余度小數(shù)據(jù)的獨(dú)立性不獨(dú)立,完全依賴于程序獨(dú)立性差具有高度的物理獨(dú)立性和一定的邏輯獨(dú)立性數(shù)據(jù)的結(jié)構(gòu)化無(wú)結(jié)構(gòu)記錄內(nèi)有結(jié)構(gòu)整體無(wú)結(jié)構(gòu)整體結(jié)構(gòu)化用數(shù)據(jù)模型描述數(shù)據(jù)的控制能力應(yīng)用程序自己控制應(yīng)用程序自己控制由DBMS提供數(shù)據(jù)的安全性、完整性、并發(fā)控制和恢復(fù)能力(1)人工管理階段該階段指20世紀(jì)60年代以前,這一時(shí)期的計(jì)算機(jī)功能比較簡(jiǎn)單,主要用于科學(xué)計(jì)算。計(jì)算機(jī)外存儲(chǔ)設(shè)備只有磁帶和卡片等,計(jì)算機(jī)軟件系統(tǒng)方面,還沒(méi)有操作系統(tǒng),也沒(méi)有數(shù)據(jù)庫(kù)系統(tǒng)等專門的數(shù)據(jù)管理軟件,只有匯編語(yǔ)言。由于缺乏軟件系統(tǒng)的支持,數(shù)據(jù)管理的工作由應(yīng)用程序完成。在應(yīng)用程序中不僅要規(guī)定數(shù)據(jù)的邏輯結(jié)構(gòu),還要設(shè)計(jì)數(shù)據(jù)的物理結(jié)構(gòu)。這一階段數(shù)據(jù)管理的特點(diǎn)是:不存儲(chǔ)數(shù)據(jù)應(yīng)用程序所對(duì)應(yīng)的數(shù)據(jù)不單獨(dú)存在,在程序運(yùn)行時(shí)由數(shù)據(jù)卡片或數(shù)據(jù)磁帶輸入,運(yùn)算后直接取走結(jié)果,源數(shù)據(jù)與結(jié)果都不保存。不具有數(shù)據(jù)獨(dú)立性應(yīng)用程序完全依賴于數(shù)據(jù),不具有數(shù)據(jù)獨(dú)立性,一旦數(shù)據(jù)的邏輯結(jié)構(gòu)或物理結(jié)構(gòu)發(fā)生變化,應(yīng)用程序必須做相應(yīng)的修改。數(shù)據(jù)不能共享數(shù)據(jù)是面向應(yīng)用的,一個(gè)數(shù)據(jù)集只能對(duì)應(yīng)一個(gè)應(yīng)用程序。應(yīng)用程序之間不能共享數(shù)據(jù)。數(shù)據(jù)大量冗余由于數(shù)據(jù)不能共享,因此即使兩個(gè)應(yīng)用程序使用到某些相同的數(shù)據(jù),它們之間也無(wú)法相互利用對(duì)方的數(shù)據(jù)。(2)文件管理階段該階段指20世紀(jì)60年代早期到20世紀(jì)60年代后期。在這個(gè)時(shí)期,計(jì)算機(jī)開(kāi)始大量用于非數(shù)值計(jì)算,磁盤,磁鼓等存儲(chǔ)設(shè)備的出現(xiàn)大大增強(qiáng)了計(jì)算機(jī)的存取能力。軟件方面,出現(xiàn)了操作系統(tǒng),數(shù)據(jù)以文件的形式由操作系統(tǒng)的專門軟件——文件管理系統(tǒng),進(jìn)行統(tǒng)一管理。其具有以下特點(diǎn):數(shù)據(jù)以文件的形式長(zhǎng)期保存在計(jì)算機(jī)中數(shù)據(jù)統(tǒng)一由操作系統(tǒng)組織成數(shù)據(jù)文件,并長(zhǎng)期保存在磁盤存儲(chǔ)器上。用戶通過(guò)文件管理系統(tǒng)可以方便地進(jìn)行訪問(wèn)與修改。數(shù)據(jù)的獨(dú)立性有一定的提高由于文件的物理組織由操作系統(tǒng)完成,用戶或者應(yīng)用程序只須根據(jù)數(shù)據(jù)的邏輯結(jié)構(gòu),通過(guò)文件名進(jìn)行訪問(wèn),無(wú)須了解數(shù)據(jù)的物理結(jié)構(gòu),從而提高了數(shù)據(jù)的物理獨(dú)立性。文件的組織形式多樣化文件管理系統(tǒng)還為用戶提供了多種文件組織形式,如順序文件組織,索引文件組織,直接文件存取組織等。文件管理系統(tǒng)的出現(xiàn),彌補(bǔ)了手工管理的一些缺陷,使得數(shù)據(jù)管理技術(shù)有了很大的提高,但是它在數(shù)據(jù)管理方面還存在一些不足,主要表現(xiàn)在以下幾點(diǎn):由于數(shù)據(jù)只能以文件為單位進(jìn)行共享,不能實(shí)現(xiàn)以記錄或數(shù)據(jù)項(xiàng)為單位的共享,因此數(shù)據(jù)還存在大量的冗余。數(shù)據(jù)缺乏邏輯獨(dú)立性,應(yīng)用程序與數(shù)據(jù)文件之間仍互相依賴,文件的邏輯結(jié)構(gòu)一旦改變,應(yīng)用程序也應(yīng)做相應(yīng)的修改。文件與文件之間相互對(duì)立,無(wú)法實(shí)現(xiàn)文件之間的相互聯(lián)系,不能反映客觀世界事物間的復(fù)雜聯(lián)系。(3)數(shù)據(jù)庫(kù)管理階段20世紀(jì)60年代后期至今,由于計(jì)算機(jī)技術(shù)的迅速發(fā)展,磁盤存儲(chǔ)技術(shù)取得重要進(jìn)展,計(jì)算機(jī)更廣泛地應(yīng)用于管理。隨著數(shù)據(jù)量的劇增,對(duì)數(shù)據(jù)管理提出了更高的要求:要求具有更高的獨(dú)立性與共享性。文件管理技術(shù)已經(jīng)不能適應(yīng)上述要求。為了進(jìn)一步減少數(shù)據(jù)冗余,滿足多用戶,多應(yīng)用程序的數(shù)據(jù)獨(dú)立與高度共享的需求,使數(shù)據(jù)為盡可能多的應(yīng)用程序服務(wù),出現(xiàn)了統(tǒng)一管理數(shù)據(jù)的專門軟件系統(tǒng)——數(shù)據(jù)庫(kù)管理系統(tǒng)(databasemanagementsystem,DBMS)。其具有以下特點(diǎn):數(shù)據(jù)結(jié)構(gòu)化數(shù)據(jù)庫(kù)中的數(shù)據(jù)是按照一定的數(shù)據(jù)模型建立起來(lái)的相關(guān)的數(shù)據(jù)的集合,它既反映現(xiàn)實(shí)世界的客觀事物,也反映事物之間的聯(lián)系。數(shù)據(jù)結(jié)構(gòu)化是數(shù)據(jù)庫(kù)系統(tǒng)與文件系統(tǒng)的根本區(qū)別。數(shù)據(jù)獨(dú)立性高數(shù)據(jù)庫(kù)系統(tǒng)提供了數(shù)據(jù)的邏輯映射與物理映射,這樣,數(shù)據(jù)庫(kù)中的數(shù)據(jù)既有邏輯獨(dú)立性,又有物理獨(dú)立性。用戶只須通過(guò)簡(jiǎn)單的局部邏輯結(jié)構(gòu)來(lái)操作數(shù)據(jù),無(wú)須考慮數(shù)據(jù)的全局邏輯結(jié)構(gòu)及物理存儲(chǔ)結(jié)構(gòu)。因此確保了較高的數(shù)據(jù)獨(dú)立性。實(shí)現(xiàn)數(shù)據(jù)的共享與最小冗余數(shù)據(jù)的共享性直接影響到數(shù)據(jù)的冗余度。數(shù)據(jù)庫(kù)中的數(shù)據(jù)是面向整個(gè)系統(tǒng),而不是面向某個(gè)應(yīng)用,可以被多個(gè)用戶共享。這樣既可以保證最小的數(shù)據(jù)冗余,又可以避免數(shù)據(jù)的不相容性與不一致性。具有統(tǒng)一的數(shù)據(jù)管理和控制功能數(shù)據(jù)庫(kù)系統(tǒng)中由數(shù)據(jù)庫(kù)管理系統(tǒng)對(duì)數(shù)據(jù)進(jìn)行統(tǒng)一的管理和控制。通過(guò)DBMS還可以保證數(shù)據(jù)庫(kù)系統(tǒng)中數(shù)據(jù)的安全性,數(shù)據(jù)的完整性,數(shù)據(jù)的并發(fā)訪問(wèn)控制和數(shù)據(jù)的恢復(fù)。數(shù)據(jù)庫(kù)技術(shù)在數(shù)據(jù)管理中的特點(diǎn)與優(yōu)勢(shì),使得它在計(jì)算機(jī)數(shù)據(jù)管理中占據(jù)主導(dǎo)地位,成為各類信息系統(tǒng)的核心基礎(chǔ)。1.2.分布式數(shù)據(jù)庫(kù)系統(tǒng)(DistributedDataBaseSystem,DDBS)是在集中式數(shù)據(jù)庫(kù)基礎(chǔ)上發(fā)展起來(lái)的,是數(shù)據(jù)庫(kù)技術(shù)與計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)、分布處理技術(shù)相結(jié)合的產(chǎn)物。分布式數(shù)據(jù)庫(kù)系統(tǒng)是地理上分布在計(jì)算機(jī)網(wǎng)絡(luò)不同結(jié)點(diǎn),邏輯上屬于同一系統(tǒng)的數(shù)據(jù)庫(kù)系統(tǒng),能支持全局應(yīng)用,同時(shí)存取兩個(gè)或兩個(gè)以上結(jié)點(diǎn)的數(shù)據(jù)。分布式數(shù)據(jù)庫(kù)系統(tǒng)的主要特點(diǎn)是:(1)數(shù)據(jù)是分布的。數(shù)據(jù)庫(kù)中的數(shù)據(jù)分布在計(jì)算機(jī)網(wǎng)絡(luò)的不同結(jié)點(diǎn)上,而不是集中在一個(gè)結(jié)點(diǎn),區(qū)別于數(shù)據(jù)存放在服務(wù)器上由各用戶共享的網(wǎng)絡(luò)數(shù)據(jù)庫(kù)系統(tǒng)。(2)數(shù)據(jù)是邏輯相關(guān)的。分布在不同結(jié)點(diǎn)的數(shù)據(jù),邏輯上屬于同一個(gè)數(shù)據(jù)庫(kù)系統(tǒng),數(shù)據(jù)間存在相互關(guān)聯(lián),區(qū)別于由計(jì)算機(jī)網(wǎng)絡(luò)連接的多個(gè)獨(dú)立數(shù)據(jù)庫(kù)系統(tǒng)。(3)結(jié)點(diǎn)的自治性。每個(gè)結(jié)點(diǎn)都有自己的計(jì)算機(jī)軟、硬件資源、數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)(即LocalDataBaseManagementSystem,LDBMS局部數(shù)據(jù)庫(kù)管理系統(tǒng)),因而能夠獨(dú)立地管理局部數(shù)據(jù)庫(kù)。1.3關(guān)系型數(shù)據(jù)庫(kù)一個(gè)關(guān)系型數(shù)據(jù)庫(kù)由多個(gè)關(guān)系組成,每個(gè)關(guān)系是以二維表的形式組織數(shù)據(jù)的。1.3.1介紹關(guān)系模型中一些術(shù)語(yǔ)關(guān)系(Relation):一個(gè)關(guān)系對(duì)應(yīng)通常說(shuō)的一張表,如上表所示;元組(Tuple):表中的一行即為一個(gè)元組;屬性(Attribute):表中的一列即為一個(gè)屬性,給每一個(gè)屬性起一個(gè)名稱即屬性名。如上表有六列,對(duì)應(yīng)六個(gè)屬性(學(xué)號(hào),姓名,年齡,性別,系和年級(jí));主碼(Key):表中的某個(gè)屬性組,它可以唯一確定一個(gè)元組,如上表中的學(xué)號(hào),可以唯一確定一個(gè)學(xué)生,也就稱為本關(guān)系的主碼。域(Domain):屬性的取值范圍,如人的年齡一般在1~150歲之間,大學(xué)生年齡屬性的域是(14~38),性別的域是(男,女),系的域是一個(gè)學(xué)校所有系名的集合;分量:元組中的一個(gè)屬性值;關(guān)系模式:對(duì)關(guān)系的描述,一般表示為:關(guān)系名(屬性1,屬性2,屬性3,…,屬性n)1.3.2關(guān)系型數(shù)據(jù)庫(kù)主要特點(diǎn):一個(gè)關(guān)系(表)由行與列組成。在關(guān)系模式中,能唯一標(biāo)識(shí)元組的屬性集稱為超鍵(superkey);如果一個(gè)屬性能唯一標(biāo)識(shí)元組,且又不含有多余屬性,那么這個(gè)屬性稱為候選鍵(candidatekey);關(guān)系模式中用戶正在使用的候選鍵稱為主鍵(primarykey)。列是同質(zhì)的,即同列所有分量是同類型的元素;用戶能檢索、查詢表里的數(shù)據(jù)集。用戶能把相關(guān)的表鏈接在一起,以便檢索存儲(chǔ)在不同表中的數(shù)據(jù)。1.3.3關(guān)系數(shù)據(jù)庫(kù)中的一個(gè)關(guān)系的限制關(guān)系中沒(méi)有重復(fù)元組,任意元組在關(guān)系中都是唯一的元組的順序無(wú)關(guān)緊要,即元組的次序可以任意交換。屬性的順序是非排序的,即它的次序可以任意交換。屬性必須具有不同的屬性名,不同的屬性可來(lái)自同一個(gè)域。同一屬性名下的諸屬性值(同列)是同類型數(shù)據(jù),且來(lái)自同一個(gè)域。所有的屬性值都是原子的1.3.4關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的體系結(jié)構(gòu)絕大多數(shù)數(shù)據(jù)庫(kù)系統(tǒng)在總的體系結(jié)構(gòu)上都具有三級(jí)模式的特征。三級(jí)模式是對(duì)數(shù)據(jù)的三個(gè)抽象級(jí)別:(1)外模式(用戶模式):也稱為字模式,它是數(shù)據(jù)庫(kù)用戶(包括應(yīng)用程序員和最終用戶)能夠看見(jiàn)和使用的局部數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是數(shù)據(jù)庫(kù)用戶的數(shù)據(jù)視圖,是與某一應(yīng)用有關(guān)的數(shù)據(jù)的邏輯表示。外模式是保證數(shù)據(jù)庫(kù)安全性的一個(gè)有力措施。每個(gè)用戶只能看見(jiàn)和訪問(wèn)所對(duì)應(yīng)的外模式中的數(shù)據(jù),數(shù)據(jù)庫(kù)中的其余數(shù)據(jù)是不可見(jiàn)的。(2)模式(邏輯模式):是數(shù)據(jù)庫(kù)中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是所有用戶的公共數(shù)據(jù)視圖。一個(gè)數(shù)據(jù)庫(kù)只有一個(gè)模式。定義模式時(shí)不僅要定義數(shù)據(jù)的邏輯結(jié)構(gòu),例如數(shù)據(jù)記錄由哪些數(shù)據(jù)項(xiàng)構(gòu)成,數(shù)據(jù)項(xiàng)的名字、類型、取值范圍等,而且要定義數(shù)據(jù)之間的聯(lián)系,定義與數(shù)據(jù)有關(guān)安全性、完整性要求。(3)內(nèi)模式(存儲(chǔ)模式):一個(gè)數(shù)據(jù)庫(kù)只有一個(gè)內(nèi)模式。它是數(shù)據(jù)物理結(jié)構(gòu)和存儲(chǔ)方式的描述,是數(shù)據(jù)在數(shù)據(jù)庫(kù)內(nèi)部的表示方式。例如:數(shù)據(jù)是否壓縮存儲(chǔ),是否加密;數(shù)據(jù)的存儲(chǔ)記錄結(jié)構(gòu)有何規(guī)定等。1.3.5關(guān)系模型的三類完整性規(guī)則(1)實(shí)體完整性規(guī)則(entityintegrityrule)這條規(guī)則要求關(guān)系中元組在關(guān)鍵的屬性上不能有空值。如果出現(xiàn)空值,那么關(guān)鍵值就起不了唯一標(biāo)識(shí)元組的作用。(2)引用完整性規(guī)則(referenceintegrityrule)這條規(guī)則要求“不允許引用不存在的元組”。這條規(guī)則也稱為“參照完整性規(guī)則”。舉例說(shuō)明:學(xué)生實(shí)體和專業(yè)實(shí)體可以用下面的關(guān)系表示,其中主碼用下劃線標(biāo)識(shí):學(xué)生(學(xué)號(hào),姓名,性別,專業(yè)號(hào),年齡)專業(yè)(專業(yè)號(hào),專業(yè)名)這兩個(gè)關(guān)系之間存在著屬性的引用,即學(xué)生關(guān)系引用了專業(yè)關(guān)系的主碼“專業(yè)號(hào)”。顯然,學(xué)生關(guān)系中的“專業(yè)號(hào)”值必須是確實(shí)存在的專業(yè)的專業(yè)號(hào),即專業(yè)關(guān)系中有該專業(yè)的記錄,這也就是說(shuō),學(xué)生關(guān)系中的某個(gè)屬性的取值需要參照專業(yè)關(guān)系的屬性取值。(3)用戶定義的完整性規(guī)則這是針對(duì)某一具體數(shù)據(jù)的約束條件,由應(yīng)用環(huán)境決定。它反應(yīng)某一具體應(yīng)用所涉及的數(shù)據(jù)必須滿足的語(yǔ)義要求。第2章MySQL軟件安裝本章描述如何在Windows操作系統(tǒng)平臺(tái)上安裝MySQL服務(wù)器和客戶端軟件,安裝MySQL服務(wù)器的步驟以及安裝過(guò)程中的注意事項(xiàng),同時(shí)還介紹MySQL客戶端的工具的安裝和使用。除了詳細(xì)的操作步驟外,為了讓讀者能更形象地理解安裝過(guò)程,還配備大量安裝截屏圖。本章目標(biāo):完成本章內(nèi)容后我們將能夠:掌握MySQL安裝過(guò)程熟練MySQL客戶端安裝過(guò)程熟練應(yīng)用MySQL客戶端2.1安裝MySQL讀者可以從網(wǎng)站()上下載MySQL5.0的軟件,解壓后雙擊Setup的文件,幾秒鐘后,會(huì)出現(xiàn)圖2.1所示的窗口,這時(shí)就可以開(kāi)始進(jìn)行MySQL的安裝了。選擇窗口中的Next按鈕。這時(shí)會(huì)出現(xiàn)如圖2.2所示的窗口。圖2.1啟動(dòng)安裝向?qū)D2.2選擇安裝類型在如圖2.2所示的窗口中,會(huì)詢問(wèn)讀者選擇何種方式安裝MySQL。選擇Complete選項(xiàng),接著會(huì)詢問(wèn)讀者是否已準(zhǔn)備好安裝。如果已準(zhǔn)備好,那么選擇Next。這是會(huì)出現(xiàn)如圖2.3所示的窗口。準(zhǔn)備好后,選擇Install。如果希望更改內(nèi)容,可選擇Back并更改一些安裝參數(shù)。如果選擇Install,則安裝過(guò)程就會(huì)開(kāi)始并顯示其進(jìn)程,如圖2.4所示。圖2.3準(zhǔn)備安裝MySQL圖2.4MySQL正在安裝中幾秒鐘后,會(huì)出現(xiàn)如圖2.5所示的窗口。在該窗口中選擇SkipSign-Up并單擊Next,讀者可在稍后進(jìn)行登記。這時(shí)會(huì)出現(xiàn)如圖2.6所示的窗口。圖2.5登記窗口圖2.6安裝向?qū)瓿稍趫D2.6中標(biāo)記ConfiguretheMySQLServernow復(fù)選框后,選擇Finish。這時(shí)會(huì)出現(xiàn)圖2.7所示的窗口。選擇Next,這時(shí)會(huì)出現(xiàn)如圖2.8所示的窗口。圖2.7開(kāi)始配置MySQL圖2.8選擇所需要的配置在圖2.8中,選擇StandardConfiguration選項(xiàng),然后單擊Next。以后,當(dāng)讀者已有了一定經(jīng)驗(yàn)并具有了MySQL的完整知識(shí)后,可以在重新安裝MySQL時(shí)選擇DetailedConfiguration選項(xiàng)。在這里選擇DetailedConfiguration選項(xiàng),選擇Next后,會(huì)出現(xiàn)如圖2.9所示的窗口。圖2.9選擇機(jī)器類型在圖2.9中,根據(jù)需要選擇機(jī)器配置類型,選擇DeveloperMachine,選擇Next,會(huì)出現(xiàn)如圖2.10所示的窗口。圖2.10選擇應(yīng)用類型在圖2.10中,根據(jù)需要選擇安裝數(shù)據(jù)庫(kù)應(yīng)用類型,選擇MultifunctionalDatabase,選擇Next,會(huì)出現(xiàn)如圖2.11所示的窗口。圖2.11選擇表空間位置在圖2.11中,根據(jù)需要選擇表空間存放的位置,選擇Next,會(huì)出現(xiàn)如圖2.12所示的窗口。圖2.12選擇連接數(shù)目在圖2.12中,根據(jù)需要選擇連接數(shù)目。如果想指定連接數(shù)目,必須選擇ManualSetting,在后面的下拉框中輸入要指定的連接數(shù)目,如不選擇ManualSetting,但是在后面的下拉框中輸入要指定的連接數(shù)目,這是無(wú)效的設(shè)置。現(xiàn)在選擇ManualSetting,在后面的下拉框中輸入連接數(shù)目30,選擇Next,會(huì)出現(xiàn)如圖2.13所示的窗口。圖2.13選擇網(wǎng)絡(luò)端口在圖2.13中,可以設(shè)置網(wǎng)絡(luò)端口號(hào),默認(rèn)端口號(hào)3306,也可以進(jìn)行修改。該端口號(hào)會(huì)在以后和Java程序進(jìn)行連接時(shí)用到。在此建議讀者不要修改端口號(hào)。確定端口號(hào)之后,選擇Next,會(huì)出現(xiàn)如圖2.14所示的窗口。圖2.14選擇字符集在圖2.14中,可以設(shè)置數(shù)據(jù)庫(kù)的字符集,以便解決字符亂碼問(wèn)題,默認(rèn)字符集latin1,也可以進(jìn)行修改。默認(rèn)的字符集不支持漢字,可以選擇gb2312或utf8字符集,就可以支持漢字了。因此在圖2.14中,選擇ManualSelectedDefaultCharacterSet/Collation,在下拉框中選擇需要的字符集,選擇Next,會(huì)出現(xiàn)如圖2.15所示的窗口。圖2.15作為WindowsService安裝MySQL在圖2.15中,選擇InstallAsWindowsService選擇并單擊Next。這時(shí)會(huì)出現(xiàn)圖2.16所示的窗口;此時(shí)讀者必須輸入由MySQL創(chuàng)建的用戶口令。該用戶的名稱為root。當(dāng)然,讀者也可以給出自己的新口令;但在本書中,我們假設(shè)讀者使用root。讀者必須輸入該口令兩次。為了安全起見(jiàn),這些口令以星號(hào)的形式出現(xiàn)。然后單擊Next。這時(shí)會(huì)顯示如圖2.17所示的窗口。圖2.16使用root作為口令圖2.17做好開(kāi)始配置的準(zhǔn)備完成MySQL的配置后,單擊圖2.17所示窗口中的Execute按鈕。這時(shí)會(huì)出現(xiàn)以復(fù)選標(biāo)記標(biāo)記的配置進(jìn)行的狀態(tài),如圖2.18所示。這個(gè)過(guò)程只需幾秒鐘時(shí)間。當(dāng)該進(jìn)程成功完成后,會(huì)出現(xiàn)圖2.19所示的窗口。圖2.18配置正在進(jìn)行中圖2.19MySQL的配置完成選擇圖2.19中的Finish,則安裝過(guò)程結(jié)束,且MySQL數(shù)據(jù)庫(kù)服務(wù)器已被安裝。為檢查其是否工作正常,可在操作系統(tǒng)的ControlPanel(控制面板)中選擇AdministratorTools(管理工具),然后選擇Service(服務(wù)),如圖2.20所示。圖2.20MySQL正在運(yùn)行如果MySQL作為一個(gè)服務(wù)器出現(xiàn)在圖2.20所示的列表中,則表明MySQL正在運(yùn)行。下一個(gè)問(wèn)題是讀者是否使用數(shù)據(jù)庫(kù)服務(wù)器,換言之,讀者是否可成功登錄。這很容易檢查,方法是從任務(wù)欄啟動(dòng)程序MySQLCommandLineClient,如圖2.21所示。圖2.21啟動(dòng)MySQLCommandLineClient程序MySQLCommandLineClient程序會(huì)要求用戶輸入口令root。輸入該口令后,會(huì)出現(xiàn)如圖2.22所示的窗口。在該窗口中,輸入如下這條簡(jiǎn)單的SQL語(yǔ)句(不要遺漏分號(hào))并按回車鍵:selectversion();圖2.22MySQLCommandLineClient程序需要口令結(jié)果顯示在圖2.23中。如果一切工作正常,在圖2.23中鍵入exit關(guān)閉窗口。這時(shí)表明已正確地安裝了MySQL。圖2.23一切工作正常2.2MySQL客戶端工具2.2.1客戶端工具(Navicat8)安裝雙擊“navicat8_mysql_cs.exe”文件,出現(xiàn)如圖2.24所示的窗口。圖2.24Navicat開(kāi)始安裝界面單擊“下一步”按鈕,進(jìn)入圖2.25所示的窗口。圖2.25是否同意協(xié)議在圖2.25中,選擇“我同意”,可以繼續(xù)安裝,選擇“我不同意”就不可以繼續(xù)安裝,這里選擇“我同意”,點(diǎn)擊“下一步”按鈕,進(jìn)入圖2.26所示的窗口。圖2.26選擇安裝路徑在圖2.26中,選擇安裝路徑。點(diǎn)擊“下一步”按鈕,進(jìn)入圖2.27所示的窗口。圖2.27選擇開(kāi)始目錄在圖2.27中,輸入快捷方式文件夾名稱。點(diǎn)擊“下一步”按鈕,進(jìn)入圖2.28所示的窗口。圖2.28創(chuàng)建快捷方式圖標(biāo)在圖2.28中,選擇“Createadesktopicon”,可以在桌面上自動(dòng)創(chuàng)建快捷圖標(biāo);選擇“CreateaQuickLaunchicon”,在快速啟動(dòng)中創(chuàng)建快捷圖標(biāo),這里選擇“Createadesktopicon”,點(diǎn)擊“下一步”按鈕,進(jìn)入圖2.29所示的窗口。圖2.29準(zhǔn)備安裝在圖2.29中,選擇“安裝”,開(kāi)始進(jìn)行安裝,進(jìn)入圖2.30所示的窗口。圖2.30安裝進(jìn)度在圖2.30中經(jīng)過(guò)幾秒鐘,安裝就完成,出現(xiàn)圖2.31所示的窗口。圖2.31安裝完成在圖2.31中,點(diǎn)擊“完成”,安裝完成。然后按照?qǐng)D2.32所示的窗口,進(jìn)入客戶端的連接界面如圖2.33所示。圖2.32啟動(dòng)客戶端程序圖2.33客戶端連接MySQL在圖2.33界面上,點(diǎn)擊“連接”,進(jìn)入圖2.34所示的窗口。圖2.34連接參數(shù)在圖2.34中,輸入“連接名”信息,輸入密碼,如圖2.35所示。圖2.35參數(shù)設(shè)置在圖2.35中,點(diǎn)擊“連接測(cè)試”按鈕,測(cè)試一下數(shù)據(jù)庫(kù)連接狀態(tài),如果成功就出現(xiàn)圖2.36所示的界面,點(diǎn)擊“確定”按鈕,進(jìn)入圖2.37所示的客戶端主界面。圖2.36測(cè)試成功圖2.37客戶端主界面在圖2.37中,將鼠標(biāo)移動(dòng)到左邊樹(shù)結(jié)構(gòu)的跟結(jié)點(diǎn)上,點(diǎn)擊鼠標(biāo)右鍵,選擇“創(chuàng)建數(shù)據(jù)庫(kù)”,如下圖2.38所示的界面。圖2.38創(chuàng)建新數(shù)據(jù)庫(kù)在圖2.38中,點(diǎn)擊“創(chuàng)建數(shù)據(jù)庫(kù)”,進(jìn)入下圖2.39所示的界面。圖2.39設(shè)置數(shù)據(jù)庫(kù)名稱和字符集在圖2.39中,輸入數(shù)據(jù)庫(kù)名稱(imti),同時(shí)要選擇數(shù)據(jù)庫(kù)中的字符集(utf8),在整理下拉列表中選擇utf8_general_ci,這一點(diǎn)需要注意,一般與安裝MySQL服務(wù)器端字符集相對(duì)應(yīng),否則漢字會(huì)出現(xiàn)亂碼。在圖2.39中,配置完成后,單擊“確定”按鈕,進(jìn)入下如圖2.40所示的界面。圖2.40數(shù)據(jù)庫(kù)管理界面在圖2.40中,點(diǎn)擊左邊的樹(shù)結(jié)構(gòu)中的數(shù)據(jù)庫(kù)“imti”,然后在單擊“imti”下的“表”,在“表”上點(diǎn)擊鼠標(biāo)右鍵,如下圖2.41所示的界面。圖2.41創(chuàng)建表在圖2.41中,選擇“創(chuàng)建表”,在圖2.42中創(chuàng)建表中的字段(包括字段名稱、類型、長(zhǎng)度、是否允許為空、主鍵等信息),這里需要注意的是,當(dāng)字段類型為字符串類型時(shí),要選擇字符集與當(dāng)初安裝數(shù)據(jù)庫(kù)的字符集一致(utf8),整理下拉列表中選擇對(duì)應(yīng)的信息,如圖2.42所示。圖2.42創(chuàng)建表結(jié)構(gòu)創(chuàng)建表結(jié)構(gòu)完成后,點(diǎn)擊“保存”按鈕,彈出保存窗口,如圖2.43所示。圖2.43輸入表名稱在圖2.43中,輸入數(shù)據(jù)表名稱之后,點(diǎn)擊“確定”按鈕,這樣就創(chuàng)建表結(jié)構(gòu)完成。關(guān)于怎樣修改表結(jié)構(gòu)、刪除表結(jié)構(gòu),這里就不作詳細(xì)介紹了。第3章關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQLSQL是結(jié)構(gòu)化查詢語(yǔ)言StructuredQueryLanguage的縮寫。查詢是SQL語(yǔ)言的重要組成部分,但不是全部,SQL還包括數(shù)據(jù)定義、數(shù)據(jù)操縱和數(shù)據(jù)控制功能等部分。SQL已經(jīng)成為關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)數(shù)據(jù)語(yǔ)言。SQL(StructuredQueryLanguage)語(yǔ)言是1974年由Boyce和Chamberlin提出的。1975~1979年,IBM公司的SanJoseResearchLaboratory研制了著名的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)原型SystemR,并實(shí)現(xiàn)了這種語(yǔ)言。經(jīng)過(guò)各公司的不斷修改、擴(kuò)充和完善,1987年,SQL語(yǔ)言最終成為關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言。1986年美國(guó)頒布了SQL語(yǔ)言的美國(guó)標(biāo)準(zhǔn),1987年國(guó)際標(biāo)準(zhǔn)化組織將其采納為國(guó)際標(biāo)準(zhǔn)。SQL由于其使用方便、功能豐富、語(yǔ)言簡(jiǎn)潔易學(xué)等特點(diǎn),很快得到推廣和應(yīng)用。SQL語(yǔ)言集數(shù)據(jù)定義(datadefinition)、數(shù)據(jù)操作(datamanipulation)和數(shù)據(jù)控制(datacontrol)功能于一體,充分體現(xiàn)了關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言的特點(diǎn)和優(yōu)點(diǎn)。本章目標(biāo):完成本章內(nèi)容后我們將能夠:掌握SQL簡(jiǎn)史及功能特性了解SQL語(yǔ)句的結(jié)構(gòu)掌握常量的使用掌握SQL的數(shù)據(jù)類型掌握表達(dá)式和運(yùn)算符的使用了解控制語(yǔ)句的分類和規(guī)則3.1SQL概述SQL語(yǔ)言簡(jiǎn)單易學(xué)、風(fēng)格統(tǒng)一,利用簡(jiǎn)單的幾個(gè)英語(yǔ)單詞的組合就可以完成所有的功能。它不僅包含數(shù)據(jù)查詢功能,還包括插入、刪除、更新和數(shù)據(jù)定義功能。SQL的用戶可以是應(yīng)用程序,也可以是終端用戶。3.1.1SQL和SQL標(biāo)準(zhǔn)簡(jiǎn)史SQL語(yǔ)言是IBM公司在20世紀(jì)70年代開(kāi)發(fā)的關(guān)系數(shù)據(jù)庫(kù)原型SYSTEMR的一部分。在20世紀(jì)70年代初,Dr.E.F.Codd首先提出了關(guān)系模型。70年代中期,IBM公司在研制SYSTEMR關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)中研制了SQL語(yǔ)言。1986年美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)和國(guó)際標(biāo)準(zhǔn)化組織發(fā)布的ANSI/ISO標(biāo)準(zhǔn)正式確認(rèn)SQL的標(biāo)準(zhǔn)地位。1989年。美國(guó)ANSI采納在ANSIX3.135-1989報(bào)告中定義的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的SQL標(biāo)準(zhǔn)語(yǔ)言,稱為ANSISQL89。SQL語(yǔ)言主要包括數(shù)據(jù)定義、數(shù)據(jù)控制、數(shù)據(jù)操縱和數(shù)據(jù)查詢等功能,其中最重要的是數(shù)據(jù)查詢功能。SQL是一種非過(guò)程化語(yǔ)言。不過(guò),大多數(shù)數(shù)據(jù)庫(kù)系統(tǒng)對(duì)SQL進(jìn)行了有針對(duì)性的擴(kuò)展使它們成為了過(guò)程化語(yǔ)言?,F(xiàn)在SQL廣泛地被采用,它使全部用戶,包括應(yīng)用程序員、DBA管理員和終端用戶受益匪淺,其優(yōu)點(diǎn)主要有以下幾點(diǎn):非過(guò)程化語(yǔ)言:非關(guān)系數(shù)據(jù)模型的數(shù)據(jù)操縱語(yǔ)言是面向過(guò)程的,若要完成某項(xiàng)請(qǐng)求,必須指定存取路徑,而SQL是一個(gè)非過(guò)程化的語(yǔ)言,它讓數(shù)據(jù)庫(kù)系統(tǒng)負(fù)責(zé)決定怎樣處理數(shù)據(jù)的查詢問(wèn)題。當(dāng)進(jìn)行數(shù)據(jù)操作時(shí),只要指出要做什么,而無(wú)需指出怎么做,因此用戶無(wú)需了解存取路徑,存取路徑的選擇以及SQL語(yǔ)句的操作過(guò)程由系統(tǒng)自動(dòng)完成,這樣提高了數(shù)據(jù)的獨(dú)立性。綜合統(tǒng)一:非關(guān)系模型的數(shù)據(jù)語(yǔ)言分為模式定義語(yǔ)言和數(shù)據(jù)操縱語(yǔ)言,其缺點(diǎn)是,當(dāng)要修改模式時(shí),必須停止現(xiàn)有數(shù)據(jù)庫(kù)的運(yùn)行,轉(zhuǎn)儲(chǔ)數(shù)據(jù),修改模式并編譯后再重裝數(shù)據(jù)庫(kù),因此很麻煩。SQL集數(shù)據(jù)定義、數(shù)據(jù)操縱和數(shù)據(jù)控制功能于一體,語(yǔ)言風(fēng)格統(tǒng)一,可獨(dú)立完成數(shù)據(jù)庫(kù)生命周期的所有活動(dòng),包括定義關(guān)系模式、查詢、更新、建立數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)安全性控制等一系列操作的要求,這就為數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)提供了良好的環(huán)境??梢浦残裕河捎谒兄饕年P(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)都支持SQL語(yǔ)言,用戶可將使用SQL的技能從一個(gè)RDBMS轉(zhuǎn)到另一個(gè),所以用SQL編寫的程序都是可以移植的。兩種使用方式:第一個(gè)方式,用戶可以在終端鍵盤上鍵入SQL命令,對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,稱之為自含式語(yǔ)言。第二種方式,將SQL語(yǔ)言嵌入到高級(jí)語(yǔ)言程序中,此為嵌入語(yǔ)言。在這兩種不同的使用方式下,SQL語(yǔ)言的語(yǔ)法結(jié)構(gòu)基本上是一致的,它以統(tǒng)一的語(yǔ)法結(jié)構(gòu)提供兩種不同的使用方法,為用戶提供了極大的靈活性與方便性。語(yǔ)言簡(jiǎn)潔,易學(xué)易用:SQL語(yǔ)言功能極強(qiáng),但由于設(shè)計(jì)巧妙,語(yǔ)言十分簡(jiǎn)潔,而且SQL語(yǔ)言語(yǔ)法簡(jiǎn)單。完成數(shù)據(jù)定義、數(shù)據(jù)操縱、數(shù)據(jù)控制的核心功能只用了9個(gè)動(dòng)詞:CREATE、DROP、ALTER、SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE等,因此易于學(xué)習(xí),容易使用。3.1.2SQL的功能和特性SQL是應(yīng)用程序與DBMS進(jìn)行通信的一種語(yǔ)言和工具,將DBMS的組件聯(lián)系在一起,可以為用戶提供強(qiáng)大的功能,使用戶可以方便地進(jìn)行數(shù)據(jù)庫(kù)的管理、數(shù)據(jù)的操作。通過(guò)SQL命令,程序員或數(shù)據(jù)庫(kù)管理員(DBA)可以完成以下功能。·數(shù)據(jù)定義:SQL能讓用戶自己定義所存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu),以及所存儲(chǔ)數(shù)據(jù)各項(xiàng)之間的關(guān)系?!?shù)據(jù)更新:SQL為用戶和應(yīng)用程序提供了添加、刪除、修改等數(shù)據(jù)更新操作,使用戶或應(yīng)用程序可以向數(shù)據(jù)庫(kù)中增加新的數(shù)據(jù)、刪除舊的數(shù)據(jù)以及修改已有數(shù)據(jù),有效地支持了數(shù)據(jù)庫(kù)數(shù)據(jù)的更新。·數(shù)據(jù)查詢:SOL使用戶或應(yīng)用程序可以從數(shù)據(jù)庫(kù)中按照自己的需要查詢數(shù)據(jù)并組織使用它們,SQL不僅支持簡(jiǎn)單條件的檢索操作,而且支持子查詢、查詢的嵌套、視圖等復(fù)雜的查詢。·保護(hù)數(shù)據(jù)安全:SQL能對(duì)用戶和應(yīng)用程序訪問(wèn)數(shù)據(jù)、添加數(shù)據(jù)等操作的權(quán)限進(jìn)行限制,以防止未經(jīng)授權(quán)的訪問(wèn),有效地保護(hù)數(shù)據(jù)庫(kù)的安全?!ぞS持?jǐn)?shù)據(jù)完整性:SQL使用戶可以定義約束規(guī)則,定義的規(guī)則將存在于數(shù)據(jù)庫(kù)內(nèi)部,可以防止因數(shù)據(jù)庫(kù)更新過(guò)程中的意外或系統(tǒng)錯(cuò)誤而導(dǎo)致的數(shù)據(jù)庫(kù)崩潰。·修改數(shù)據(jù)庫(kù)結(jié)構(gòu):SQL使用戶或應(yīng)用程序可以修改數(shù)據(jù)庫(kù)的結(jié)構(gòu)。·SQL是一種易于理解的語(yǔ)言,同時(shí)又是綜合管理數(shù)據(jù)的工具。作為現(xiàn)在數(shù)據(jù)庫(kù)市場(chǎng)普通應(yīng)用的語(yǔ)言,它具有以下一些特性?!ご_定的標(biāo)準(zhǔn):美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)(ANSI)和國(guó)際標(biāo)準(zhǔn)化組織(ISO)在1986年制訂了SQL的標(biāo)準(zhǔn),并在1989年、1992年與1999年三次進(jìn)行了擴(kuò)展,使得所有廠商都可以按照統(tǒng)一標(biāo)準(zhǔn)實(shí)現(xiàn)對(duì)SQL的支持,SQL語(yǔ)言在數(shù)據(jù)庫(kù)廠家之間具有廣泛的適用性。雖然在不同廠家之間SQL語(yǔ)言的實(shí)現(xiàn)方式存在某些差異,但是通常情況下無(wú)論選擇何種數(shù)據(jù)庫(kù)平臺(tái),SQL語(yǔ)言都保持相同?!ぼ浖峁┥痰莫?dú)立性:所有主流的DBMS軟件提供商均提供對(duì)SQL的支持,SQL標(biāo)準(zhǔn)的確立使不同的廠商可以獨(dú)立地進(jìn)行DBMS軟件的設(shè)計(jì),查詢、報(bào)表生成器等數(shù)據(jù)庫(kù)工具能在許多不同類型的SQL數(shù)據(jù)庫(kù)中使用。·各大公司的支持:SQL由IBM研究人員發(fā)明,然后得到了Microsoft公司、Oracle公司等數(shù)據(jù)庫(kù)市場(chǎng)各大軟件公司的支持,保證了SQL今后的發(fā)展?!?shù)據(jù)的多視化:可以通過(guò)使用SQL產(chǎn)生不同的報(bào)表和視圖,將數(shù)據(jù)庫(kù)中數(shù)據(jù)從用戶所需的角度顯示出來(lái)供用戶使用,具有很大的靈活性。同時(shí),SQL的視圖功能也能提高數(shù)據(jù)庫(kù)的安全性,并且能滿足特定用戶的需要?!こ绦蚧瘮?shù)據(jù)庫(kù)訪問(wèn):SQL語(yǔ)句既能用于交互式訪問(wèn)也能用于程序化訪問(wèn),這樣應(yīng)用程序就具有很大的靈活性,可以將這兩種方式結(jié)合起來(lái)設(shè)計(jì)更好的程序?!た梢浦残裕夯赟QL的數(shù)據(jù)庫(kù)產(chǎn)品能在不同計(jì)算機(jī)上運(yùn)行,也支持在不同的操作系統(tǒng)上運(yùn)行,還可以通過(guò)網(wǎng)絡(luò)進(jìn)行訪問(wèn)和管理?!?yīng)用程序的支持:在數(shù)據(jù)庫(kù)發(fā)展的初期,SQL支持基于主機(jī)的應(yīng)用程序;隨著計(jì)算機(jī)技術(shù)的發(fā)展,客戶機(jī)/服務(wù)器體系結(jié)構(gòu)出現(xiàn),SQL使每個(gè)系統(tǒng)處于最佳工作狀態(tài);而Internet和WWW的迅速發(fā)展,建立了以SQL作為應(yīng)用程序和數(shù)據(jù)庫(kù)連接的標(biāo)準(zhǔn);Java的出現(xiàn)也引入了SQL,SQL在最新的編程語(yǔ)言中有了有效的應(yīng)用?!た蓴U(kuò)展性和對(duì)象:面向?qū)ο缶幊碳夹g(shù)的興起,使數(shù)據(jù)庫(kù)市場(chǎng)也面臨對(duì)象技術(shù)的引入,各個(gè)SQL數(shù)據(jù)庫(kù)廠商正在擴(kuò)展和提高SQL對(duì)對(duì)象的支持。3.1.3SQL語(yǔ)句的結(jié)構(gòu)所有的SQL語(yǔ)句均有自己的格式,每條SQL語(yǔ)句由一個(gè)謂詞開(kāi)始,謂詞描述該語(yǔ)句要產(chǎn)生的動(dòng)作。因此,SQL語(yǔ)句可以被劃分為3個(gè)部分:SQL操作、目標(biāo)和條件。SQL操作和目標(biāo)是必要的,至于條件,則根據(jù)執(zhí)行的SQL操作決定其是否可選。(1)SQL操作SQL操作語(yǔ)句有4種基本操作:SELECT、INSERT、UPDATE、DELETE。每一個(gè)操作都是SQL語(yǔ)句名。這些操作語(yǔ)句在后面的章節(jié)將分別進(jìn)行介紹。(2)目標(biāo)所有的SQL操作語(yǔ)句都在一個(gè)或多個(gè)數(shù)據(jù)庫(kù)表或視圖上進(jìn)行操作。目標(biāo)組件的目的是定義那些表或視圖。根據(jù)使用的語(yǔ)句不同,該組件也不同,例如,SELECT和DELETE語(yǔ)句具有相似的目標(biāo)結(jié)構(gòu),而INSERT和UPDATE語(yǔ)句則具有不同的目標(biāo)結(jié)構(gòu)。(3)條件使用WHERE條件語(yǔ)句說(shuō)明的條件定義了被SELECT、UPDATE或DELETE語(yǔ)句操作的特定行,而它最終是求得每行數(shù)據(jù)的TRUE或FALSE值,而且該行為控制了該操作是否發(fā)生在每一行上。3.1.4SQL的未來(lái)以訪問(wèn)二維表數(shù)據(jù)為主的SQL和XML的結(jié)合成了SQL的一個(gè)發(fā)展方向。SQL和XML結(jié)合的第一步是將關(guān)系型數(shù)據(jù)作為XML格式發(fā)布。XML發(fā)布是合乎邏輯的起點(diǎn),因?yàn)樗梢匀菀椎卦赬ML中代表SQL結(jié)果集合,因?yàn)楹芏嗟膭?dòng)態(tài)網(wǎng)頁(yè)都是由SQL查詢來(lái)提供的。傳統(tǒng)的方法要求用程序訪問(wèn)結(jié)果集合和用程序構(gòu)建網(wǎng)頁(yè)。新方法以完全公布的方式制作動(dòng)態(tài)網(wǎng)頁(yè),利用SQL-to-XML查詢生成數(shù)據(jù)的XML表示,并利用XSLT(可擴(kuò)展樣式表語(yǔ)言轉(zhuǎn)換)將XML融入到HTML中。最初這些虛擬文檔是利用專有的SQL擴(kuò)展來(lái)創(chuàng)建的?,F(xiàn)在有了一種叫做SQL/XML的新ISO/ANSI標(biāo)準(zhǔn),這項(xiàng)標(biāo)準(zhǔn)定義了一種通用的方法。目前,SQL/XML得到了Oracle和DB2的支持。它定義了用于這些產(chǎn)品中的本機(jī)XML數(shù)據(jù)類型的面向XML的運(yùn)算符。不過(guò),SQLServer現(xiàn)在還不支持XML數(shù)據(jù)類型或SQL/XML擴(kuò)展。3.2常量常量也稱為字面值或標(biāo)量值,是表示一個(gè)特定數(shù)據(jù)值的符號(hào)。常量的格式取決于它所表示的值的數(shù)據(jù)類型。同其他編程語(yǔ)言一樣,SQL也提供了對(duì)常量的支持,以方便用戶更好更靈活地使用SQL語(yǔ)句。SQL支持?jǐn)?shù)字、字符串、時(shí)間和日期、符號(hào)常量等4種常量。3.2.1數(shù)字常量整數(shù)和浮點(diǎn)數(shù)類型的數(shù)據(jù)都可以作為常量使用。整形常量由沒(méi)有用引號(hào)括起來(lái)且不含小數(shù)點(diǎn)的一串?dāng)?shù)字表示,例如11111。在Danwei數(shù)據(jù)表中,如果想列出編號(hào)在15以上的員工的名字,可以使用下面的SQL語(yǔ)句:SELECTnameSELECTnameFROMDanweiWHEREid>15 在SQL中,常量前面也可以加上加號(hào)或減號(hào)。如+700,-100等。對(duì)于浮點(diǎn)數(shù)據(jù)類型的常量,通常規(guī)定使用符號(hào)E,如6.25E5,+6.25E5,6.05E-7。其中,E代表“乘以10的幾次方”。所以,6.25E5就代表常量6.25×105。3.2.2字符串常量字符串常量括在單引號(hào)內(nèi)并包含字母數(shù)字字符(a~z、A~Z和0~9)以及特殊字符,如感嘆號(hào)(!)、at符(@)和數(shù)字號(hào)(#)。字符串常量的引入,大大方便了人們使用SQL語(yǔ)句,如查詢、添加等操作。例如,在Danwei數(shù)據(jù)庫(kù)中,查找名字叫作“王五”的工作人員的詳細(xì)情況,可以使用下面的SQL。語(yǔ)句:SELECT*SELECT*FROMDanweiWHEREname=’王五’SQL標(biāo)準(zhǔn)中規(guī)定,字符串常量要包括在單引號(hào)中,例如’王五’、’張三’、’李四’,如果字符串常量中包括單引號(hào),在其之前再加上一個(gè)單引號(hào),以表示其是字符串常量中的一個(gè)字符,如:’Idon"tknow’。注意:如果單引號(hào)中的字符串包含一個(gè)嵌入的引號(hào),可以使用兩個(gè)單引號(hào)表示嵌入的單引號(hào)。對(duì)于嵌入在雙引號(hào)中的字符串則沒(méi)有必要這樣做??兆址弥虚g沒(méi)有任何字符的兩個(gè)單引號(hào)來(lái)表示。注意:如果單引號(hào)中的字符串包含一個(gè)嵌入的引號(hào),可以使用兩個(gè)單引號(hào)表示嵌入的單引號(hào)。對(duì)于嵌入在雙引號(hào)中的字符串則沒(méi)有必要這樣做??兆址弥虚g沒(méi)有任何字符的兩個(gè)單引號(hào)來(lái)表示。3.2.3時(shí)間和日期常量在使用時(shí),也要將時(shí)間和日期常量用單引號(hào)括起來(lái)。例如:’04/15/99’(日期常量),’15:30:20’(時(shí)間常量)。如果要在Danwei數(shù)據(jù)庫(kù)中查詢啟動(dòng)時(shí)間早于SELECT*SELECT*FROMDanweiWHEREgongcheng<TO_DATE(‘2008-02-02’,’yyyy-MM-dd該例中使用了Oracle數(shù)據(jù)庫(kù)系統(tǒng)中的TO_DATE函數(shù),來(lái)將一個(gè)字符串常量轉(zhuǎn)換為Oracle的內(nèi)部數(shù)據(jù)格式。大多數(shù)數(shù)據(jù)庫(kù)系統(tǒng)都提供了時(shí)間和日期的轉(zhuǎn)換函數(shù),以使系統(tǒng)中時(shí)間和日期的格式得以統(tǒng)一。注意:通常時(shí)間和日期的使用都必須結(jié)合轉(zhuǎn)換函數(shù)一起使用,以保證進(jìn)行操作時(shí),時(shí)間和日期的格式是相同的。注意:通常時(shí)間和日期的使用都必須結(jié)合轉(zhuǎn)換函數(shù)一起使用,以保證進(jìn)行操作時(shí),時(shí)間和日期的格式是相同的。3.2.4符號(hào)常量除了上面3種常量外,SQL語(yǔ)言還包含了許多特殊的符號(hào)常量,如CURRENT_DATE、USER、SYSTEM_USER、SESSION_USER等等。這些都是在當(dāng)前數(shù)據(jù)庫(kù)系統(tǒng)中使用得比較多且很有用的符號(hào)常量。例如,在Danwei數(shù)據(jù)庫(kù)中,查詢當(dāng)前正在進(jìn)行的項(xiàng)目的信息,可以使用下面的SQL語(yǔ)句:SELECT*SELECT*FROMDanweiWHEREgongcheng<CURRENT_DATE符號(hào)常量CURRENT_DATE能生成當(dāng)前日期的值。注意:在某些數(shù)據(jù)庫(kù)產(chǎn)品中,是通過(guò)內(nèi)嵌函數(shù)而不是符號(hào)常量來(lái)訪問(wèn)系統(tǒng)值,如在Sybase中是通過(guò)GETDATE()函數(shù)。注意:在某些數(shù)據(jù)庫(kù)產(chǎn)品中,是通過(guò)內(nèi)嵌函數(shù)而不是符號(hào)常量來(lái)訪問(wèn)系統(tǒng)值,如在Sybase中是通過(guò)GETDATE()函數(shù)。3.3數(shù)據(jù)類型如果您曾經(jīng)使用過(guò)某種編程語(yǔ)言,那么一定對(duì)數(shù)據(jù)類型的概念很熟悉。數(shù)據(jù)類型是數(shù)據(jù)的一種屬性,代表數(shù)據(jù)所表示信息的類型。關(guān)系數(shù)據(jù)庫(kù)提供了很大范圍的數(shù)據(jù)類型供用戶使用,包括字符串?dāng)?shù)據(jù)類型、數(shù)字?jǐn)?shù)據(jù)類型、日期時(shí)間數(shù)據(jù)類型及大型對(duì)象等。關(guān)系數(shù)據(jù)庫(kù)中的字符串?dāng)?shù)據(jù)類型基本上也可以擁有其他類型的數(shù)據(jù),但這些數(shù)據(jù)只是作為字符串來(lái)對(duì)待的。目前,大多數(shù)的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)產(chǎn)品均提供了豐富的數(shù)據(jù)類型,并且在不同的系統(tǒng)中,提供的數(shù)據(jù)類型有一定的差異。有時(shí)甚至在兩種系統(tǒng)中名稱相同的數(shù)據(jù)類型,其表達(dá)的含義也可能不相同。另外,字符串?dāng)?shù)據(jù)、時(shí)間數(shù)據(jù)在SQL語(yǔ)句中使用時(shí)都必須用單引號(hào)包括,而數(shù)字?jǐn)?shù)據(jù)則不必包括在單引號(hào)中。若將數(shù)字?jǐn)?shù)據(jù)包括在單引號(hào)中,它將被作為字符串?dāng)?shù)據(jù)來(lái)對(duì)待。這是數(shù)字?jǐn)?shù)據(jù)類型和其他數(shù)據(jù)類型之間一個(gè)重要的差異。3.3.1數(shù)字?jǐn)?shù)據(jù)類型數(shù)字?jǐn)?shù)據(jù)類型是可以不進(jìn)行數(shù)據(jù)轉(zhuǎn)換而直接參與算術(shù)運(yùn)算的數(shù)據(jù),即數(shù)字?jǐn)?shù)據(jù)類型可以直接在數(shù)學(xué)表達(dá)式中使用。數(shù)字?jǐn)?shù)據(jù)類型在使用時(shí)不必包括在單引號(hào)中。一般來(lái)說(shuō),數(shù)字?jǐn)?shù)據(jù)類型可以分成兩類:·整數(shù)數(shù)據(jù)類型:整數(shù)數(shù)據(jù)類型只存儲(chǔ)整數(shù),通常叫做INTEGER、INT、NUMBER等。這種數(shù)據(jù)類型的列一般存儲(chǔ)的是計(jì)數(shù)值、數(shù)量或年齡等。所有的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)都提供了對(duì)算術(shù)運(yùn)算符的支持,提供了用于整數(shù)計(jì)算的聚集函數(shù)以計(jì)算所有數(shù)值的最大值、最小值、總值、平均值以及計(jì)數(shù)值?!じ↑c(diǎn)數(shù)數(shù)據(jù)類型:浮點(diǎn)數(shù)數(shù)據(jù)類型存儲(chǔ)的是浮點(diǎn)數(shù),通常稱精確的小數(shù)數(shù)字為DECIMAL或NUMERIC,一般的浮點(diǎn)數(shù)稱為FLOAT、REAL。等。對(duì)于精確的小數(shù)通常可以定義它們的精度(小數(shù)點(diǎn)兩邊數(shù)字的個(gè)數(shù))和位數(shù)(小數(shù)點(diǎn)后數(shù)字的個(gè)數(shù))。例如,需要一個(gè)精確小數(shù),精度為7,位數(shù)為4,則應(yīng)該描述為DECIMAL(3,4)或NUMERIC(3,4)。不過(guò),在不同的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)中,精確小數(shù)的精度和位數(shù)的定義可能會(huì)有所變化。注意:DECIMAL是一個(gè)十進(jìn)制數(shù)。小數(shù)點(diǎn)的位置由數(shù)字的精度(p)和小數(shù)位(s)確定。精度是數(shù)字的總位數(shù),必須小于32。小數(shù)位是小數(shù)部分?jǐn)?shù)字的位數(shù)且總是小于或等于精度值。如果未指定精度和小數(shù)位,則十進(jìn)制值的默認(rèn)精度為5,默認(rèn)小數(shù)位為0。注意:DECIMAL是一個(gè)十進(jìn)制數(shù)。小數(shù)點(diǎn)的位置由數(shù)字的精度(p)和小數(shù)位(s)確定。精度是數(shù)字的總位數(shù),必須小于32。小數(shù)位是小數(shù)部分?jǐn)?shù)字的位數(shù)且總是小于或等于精度值。如果未指定精度和小數(shù)位,則十進(jìn)制值的默認(rèn)精度為5,默認(rèn)小數(shù)位為0。有些系統(tǒng)中提供了特定的貨幣數(shù)據(jù)類型(小數(shù)點(diǎn)后面恰好包含兩位數(shù)字的精確小數(shù)),例如,在SQLServer中,貨幣數(shù)據(jù)的數(shù)據(jù)類型是Money和Smallmoney;Money數(shù)據(jù)類型要求8個(gè)存儲(chǔ)字節(jié),Smallmoney數(shù)據(jù)類型要求4個(gè)存儲(chǔ)字節(jié)。而對(duì)于沒(méi)有提供貨幣數(shù)據(jù)類型的系統(tǒng),可以用定義小數(shù)點(diǎn)后數(shù)字個(gè)數(shù)為2個(gè)的精確小數(shù)類型來(lái)替代。當(dāng)然,也可以將數(shù)字?jǐn)?shù)據(jù)存儲(chǔ)在字符串中。例如,對(duì)于郵政編碼、電話號(hào)碼這樣的數(shù)據(jù),它們雖然由數(shù)字組成,但也可以將其存在字符串中,因?yàn)樵S多系統(tǒng)中會(huì)自動(dòng)刪除數(shù)據(jù)開(kāi)頭的0,在這樣的系統(tǒng)中,以0開(kāi)頭的郵政編碼和電話號(hào)碼就不能正確存儲(chǔ)。同時(shí),所有的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)都為數(shù)字?jǐn)?shù)據(jù)類型提供了很多內(nèi)嵌函數(shù),可以很方便地使用這些內(nèi)嵌函數(shù)進(jìn)行特定的計(jì)算,如POWER()函數(shù)可以進(jìn)行求冪運(yùn)算,這大大方便了用戶的使用。3.3.2字符串?dāng)?shù)據(jù)類型字符串?dāng)?shù)據(jù)類型是指不能成為算術(shù)操作的直接目標(biāo)的單字節(jié)或多字節(jié)數(shù)據(jù)字符串。字符串?dāng)?shù)據(jù)類型用于存儲(chǔ)字母、數(shù)字和特殊字符。在使用時(shí),必須為字符串加上單引號(hào)。一般來(lái)說(shuō),字符串?dāng)?shù)據(jù)類型有兩種基本形式:·定長(zhǎng)字符串(CHAR):CHAR的長(zhǎng)度屬性在1~254之間,并包括1和254。對(duì)于CHAR,不論實(shí)際存放的數(shù)據(jù)是多長(zhǎng),在內(nèi)存中總是占據(jù)相同的空間,系統(tǒng)會(huì)自動(dòng)插入固定的字符來(lái)填滿剩余的空間。一般來(lái)說(shuō),在定義定長(zhǎng)字符串時(shí),必須根據(jù)實(shí)際情況指定字符串的長(zhǎng)度,以保證字符串的長(zhǎng)度足夠使用,又不至于造成存儲(chǔ)空間的浪費(fèi);·變長(zhǎng)字符串(VARCHAR):在實(shí)際應(yīng)用中,很多情況下無(wú)法明確確定所需字符串的長(zhǎng)度,此時(shí),可以應(yīng)用變長(zhǎng)字符串。在變長(zhǎng)字符串中,存放的字符長(zhǎng)度允許不同,只要不超過(guò)系統(tǒng)支持的最大限制,例如,可以將長(zhǎng)度為9的字符串插入VARCHAR(15)中,而該字符串的長(zhǎng)度將仍然為9。注意:字符串的最大長(zhǎng)度在不同系統(tǒng)中可能會(huì)有很大變化。例如,Oracle中提供給定長(zhǎng)字符串CHAR類型多達(dá)2000個(gè)字節(jié)長(zhǎng)度,而變長(zhǎng)字符串則為4000個(gè)字節(jié)長(zhǎng)度。注意:字符串的最大長(zhǎng)度在不同系統(tǒng)中可能會(huì)有很大變化。例如,Oracle中提供給定長(zhǎng)字符串CHAR類型多達(dá)2000個(gè)字節(jié)長(zhǎng)度,而變長(zhǎng)字符串則為4000個(gè)字節(jié)長(zhǎng)度。另外,還有許多特殊的字符串類型,如圖形字符串類型、二進(jìn)制字符串類型等。同時(shí),一些系統(tǒng)為大型文本提供特殊字符數(shù)據(jù),通常稱為L(zhǎng)OAD或TEXT。關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)也為字符串類型數(shù)據(jù)提供了很多內(nèi)嵌函數(shù),以方便用戶進(jìn)行字符串的轉(zhuǎn)換、字符串的截取等等,如LOWER(Str)函數(shù)用于將字符串“Str”中的大寫字母轉(zhuǎn)換成小寫字母,而UPPER(Str)函數(shù)則可以將字符串“Str”中的小寫字母轉(zhuǎn)換成大寫字母。3.3.3日期時(shí)間數(shù)據(jù)類型日期時(shí)間數(shù)據(jù)類型是日期、時(shí)間以及時(shí)間戳記的表示,用于存儲(chǔ)日期、時(shí)間、時(shí)間與日期的組合。日期時(shí)間值也可以用于某些算術(shù)運(yùn)算和字符串運(yùn)算,并且與某些字符串是相容的。與其他數(shù)據(jù)類型一樣,日期和時(shí)間的值也存儲(chǔ)在列表中。在SQL標(biāo)準(zhǔn)中有三種用來(lái)存儲(chǔ)日期和時(shí)間的數(shù)據(jù)類型:(1)DATE用于存儲(chǔ)日期數(shù)據(jù),可分為3個(gè)部分(年、月、日)。其格式為:YYYY(year)-MM(Month)-DD(day)有效范圍為:0001-01-01到9999-12-31。例如,2008-2-10。(2)TIME用于存儲(chǔ)時(shí)間數(shù)據(jù),是用24小時(shí)制式來(lái)指定一天內(nèi)的時(shí)間值,分為3個(gè)部分(小時(shí)、分鐘、秒)。其格式為:HH:MI:SS.nn…有效范圍為:00:00:00…到23:59:59.999…。例如,20:15:10。(3)TIMESTAMP用于存儲(chǔ)日期和時(shí)間數(shù)據(jù),分為7個(gè)部分(年、月、日、小時(shí)、分鐘、秒及微秒)。其格式為:YYYY-MM-DDHH:MI:SS.nn…有效范圍為:0001-01-0100:00:00…到9999-12-3123:59:59.999…。例如,2008-2-1020:15:10注意:不同數(shù)據(jù)庫(kù)系統(tǒng)處理日期時(shí)間數(shù)據(jù)的方式有很多種,日期的存儲(chǔ)和顯示方法都可以變化。這與很多國(guó)家的習(xí)慣有關(guān),如美國(guó)習(xí)慣用month/day/year的格式來(lái)表示日期,用hour:minuteam/pm的格式來(lái)表示時(shí)間,例如注意:不同數(shù)據(jù)庫(kù)系統(tǒng)處理日期時(shí)間數(shù)據(jù)的方式有很多種,日期的存儲(chǔ)和顯示方法都可以變化。這與很多國(guó)家的習(xí)慣有關(guān),如美國(guó)習(xí)慣用month/day/year的格式來(lái)表示日期,用hour:minuteam/pm的格式來(lái)表示時(shí)間,例如10/2/2008,5:27pm。SQL標(biāo)準(zhǔn)中還提供了INTERVAL來(lái)存儲(chǔ)時(shí)間間隔。如果是一個(gè)年—月間隔,則組合了日期字段YEAR、MONTH等,例如,’06-05’表示6年零5個(gè)月的時(shí)間間隔;如果是一個(gè)日—3.4SOL表達(dá)式表達(dá)式是符號(hào)與運(yùn)算符的組合,簡(jiǎn)單的表達(dá)式可以是一個(gè)常量、變量、列或標(biāo)量函數(shù),也可以用運(yùn)算符將兩個(gè)或更多的簡(jiǎn)單表達(dá)式聯(lián)接起來(lái)組成復(fù)雜的表達(dá)式。表達(dá)式的應(yīng)用,使SQL的查詢操作有了更大的靈活性。一個(gè)表達(dá)式返回的值,不僅可以用來(lái)計(jì)算查詢返回的數(shù)據(jù),還可以用于限制篩選查詢返回的行。數(shù)據(jù)庫(kù)中基本的數(shù)據(jù)類型,如數(shù)字?jǐn)?shù)據(jù)類型、字符串?dāng)?shù)據(jù)類型、時(shí)間和日期數(shù)據(jù)類型等,都可以在表達(dá)式中使用。SQL標(biāo)準(zhǔn)中規(guī)定了4種能用于表達(dá)式中的運(yùn)算符:加號(hào)(+)、減號(hào)(-)、乘號(hào)(*)和除號(hào)(/)。在SQL中,這四種運(yùn)算符的優(yōu)先級(jí)與數(shù)學(xué)中的優(yōu)先級(jí)相同,乘除的優(yōu)先級(jí)高于加減的優(yōu)先級(jí),乘除具有相同的優(yōu)先級(jí),加減之間也具有相同的優(yōu)先級(jí)。它們都可以在同一表達(dá)式中使用,具有相同優(yōu)先級(jí)的符號(hào)按照從左到右的順序來(lái)計(jì)算。例如,列出數(shù)據(jù)庫(kù)Danwei中所有項(xiàng)目的項(xiàng)目編號(hào)、員工ID號(hào)及項(xiàng)目的利潤(rùn),可以使用下面的SQL語(yǔ)句:SELECTnumber,id,shou-zhiSELECTnumber,id,shou-zhiFROMDanwei在SQL中也可以使用括號(hào)使運(yùn)算式的表達(dá)更加清晰,這樣就可以編寫復(fù)雜的條件語(yǔ)句以便更好地查詢數(shù)據(jù),增加了語(yǔ)句的可讀性,并使SQL語(yǔ)句更易于維護(hù)。例如,查詢數(shù)據(jù)庫(kù)Danwei中所有利潤(rùn)大于3000元的項(xiàng)目編號(hào)及員工ID號(hào),可以使用下面的SQL語(yǔ)句:SELECTnumber,idSELECTnumber,idFROMDanweiWHERE(shou-zhi)>3000同編程語(yǔ)言一樣,SQL表達(dá)式中進(jìn)行運(yùn)算的兩個(gè)值,其數(shù)據(jù)類型必須相同。不能將不同類型的數(shù)據(jù)隨意進(jìn)行操作。SQL標(biāo)準(zhǔn)中也支持?jǐn)?shù)據(jù)類型的自動(dòng)轉(zhuǎn)化,可以將數(shù)據(jù)從整型自動(dòng)轉(zhuǎn)化到浮點(diǎn)型。這樣就可以在數(shù)字表達(dá)式中同時(shí)使用這些數(shù)據(jù)類型,而不會(huì)造成錯(cuò)誤。另外,在表達(dá)式中還可以使用比較運(yùn)算符(=,<>,<,>,>=,<=)、邏輯運(yùn)算符(AND,OR,NOT,ANY,ALL)等很多其他的運(yùn)算符。如果兩個(gè)表達(dá)式是用比較或者邏輯運(yùn)算符組合的,則結(jié)果的數(shù)據(jù)類型是布爾型,其值有三種:TRUE、FALSE或UNKNOWN。如果兩個(gè)表達(dá)式是用算術(shù)運(yùn)算符、位運(yùn)算符或者字符串運(yùn)算符組合的,則結(jié)果的數(shù)據(jù)類型由運(yùn)算符確定。復(fù)雜的表達(dá)式由很多符號(hào)與運(yùn)算符構(gòu)成,得出一個(gè)單值結(jié)果,通過(guò)對(duì)子表達(dá)式進(jìn)行組合來(lái)確定結(jié)果表達(dá)式的數(shù)據(jù)類型、排序規(guī)則、精度和值,進(jìn)行計(jì)算時(shí),每次組合兩個(gè)表達(dá)式,直到得到最后結(jié)果。表達(dá)式中元素組合的順序由表達(dá)式中運(yùn)算符的優(yōu)先級(jí)決定。3.5SQL控制語(yǔ)句每條SQL語(yǔ)句均由一個(gè)關(guān)鍵字開(kāi)頭,這個(gè)關(guān)鍵字描述了這條語(yǔ)句將要執(zhí)行的動(dòng)作,如SELECT、CREATE、INSERT、UPDATE等。每個(gè)關(guān)鍵字后都跟了一個(gè)子句,子句可以指定語(yǔ)句作用的數(shù)據(jù),也可以提供語(yǔ)句作用的更詳細(xì)的情況。子句可以包含表名、字段名,還可以包含表達(dá)式、常量及其他的一些關(guān)鍵字(如AND、NOT、OR等)。3.5.1語(yǔ)句的分類語(yǔ)句是SQL的主體,SQL中的操作都是由SQL語(yǔ)句實(shí)現(xiàn)的。SQL語(yǔ)句主要分為4類:數(shù)據(jù)定義類、數(shù)據(jù)操作類、訪問(wèn)控制類、事務(wù)控制類。(1)數(shù)據(jù)定義類。SQL中包含了定義數(shù)據(jù)的語(yǔ)句,主要包括以下幾種:·CREATEDATABASE創(chuàng)建數(shù)據(jù)庫(kù)·CREATETABLE創(chuàng)建表·DROPTABLE刪除表·ALTERTABLE修改表的結(jié)構(gòu)·CREATEVIEW創(chuàng)建視圖·DROPVIEW刪除視圖·CREATEINDEX創(chuàng)建索引·DROPINDEX刪除索引(2)數(shù)據(jù)操作類。SQL中包含了操作數(shù)據(jù)的語(yǔ)句,主要包括以下幾種:·INSERT添加記錄·UPDATE修改記錄·DELETE刪除記錄·SELECT檢索數(shù)據(jù)(3)訪問(wèn)控制類。SQL中包含了控制訪問(wèn)的語(yǔ)句,主要包括以下兩種:·GRANT授予權(quán)限·REVOKE撤消權(quán)限(4)事務(wù)控制類。SQL中包含了控制事務(wù)的語(yǔ)句,主要包括以下兩種:·COMMIT提交事務(wù)·ROLLBACK取消事務(wù)上面列出了SQL中使用的基本SQL語(yǔ)句,還有許多SQL語(yǔ)句并沒(méi)有列出,如果讀者有興趣可以參考相關(guān)的SQL資料。3.5.2語(yǔ)句的規(guī)則雖然SQL中并沒(méi)有規(guī)定SQL語(yǔ)句應(yīng)該怎樣書寫,但是,在SQL語(yǔ)句中最好按照統(tǒng)一的格式書寫,以使SQL語(yǔ)句清晰易懂。SQL是一門格式自由的語(yǔ)言,既不要求在一行放置的單詞數(shù),也不要求斷行的地方。但是,一般來(lái)說(shuō),SQL中每一個(gè)子句都從一個(gè)新的行開(kāi)始,過(guò)長(zhǎng)或復(fù)雜的子句放在附加的行,這樣SQL語(yǔ)句就顯得比較清晰明了。例如:SELECT*FROM表名WHERE條件SELECT*FROM表名WHERE條件或者SELECT*FROM表名WHERE條件SQL語(yǔ)句不區(qū)分大小寫。一般來(lái)說(shuō),SQL語(yǔ)句中的關(guān)鍵字如SELECT、FROM等使用大寫字母,表名的第一個(gè)字母采用大寫,而表名的其他字母都采用小寫字母,表中列的名稱都采用小寫字母。在這種約定下,編寫的SQL代碼就比較容易閱讀。例如:SELECTnameSELECTnameFROMDanweiWHEREid=10注意:一些數(shù)據(jù)庫(kù)允許指定數(shù)據(jù)庫(kù)中使用的名稱是否區(qū)分大小寫。SQL中關(guān)鍵字的大小寫并不會(huì)影響SQL語(yǔ)句執(zhí)行結(jié)果。但是,SQL語(yǔ)句中數(shù)據(jù)的大小寫對(duì)數(shù)據(jù)庫(kù)則是敏感的。例如,數(shù)據(jù)庫(kù)存儲(chǔ)字符串?dāng)?shù)據(jù)時(shí),如果將字符串以大寫字母的方式存儲(chǔ),而訪問(wèn)時(shí)若以小寫字母進(jìn)行比較,則無(wú)法找到匹配的字符串,這時(shí)應(yīng)該進(jìn)行大小寫的轉(zhuǎn)換。注意:一些數(shù)據(jù)庫(kù)允許指定數(shù)據(jù)庫(kù)中使用的名稱是否區(qū)分大小寫。SQL中關(guān)鍵字的大小寫并不會(huì)影響SQL語(yǔ)句執(zhí)行結(jié)果。但是,SQL語(yǔ)句中數(shù)據(jù)的大小寫對(duì)數(shù)據(jù)庫(kù)則是敏感的。例如,數(shù)據(jù)庫(kù)存儲(chǔ)字符串?dāng)?shù)據(jù)時(shí),如果將字符串以大寫字母的方式存儲(chǔ),而訪問(wèn)時(shí)若以小寫字母進(jìn)行比較,則無(wú)法找到匹配的字符串,這時(shí)應(yīng)該進(jìn)行大小寫的轉(zhuǎn)換。數(shù)據(jù)庫(kù)中的數(shù)據(jù)對(duì)大小寫是敏感的,假設(shè)存儲(chǔ)數(shù)據(jù)時(shí)名字都是小寫,則在查找名字為大寫的數(shù)據(jù)時(shí),查詢將找不到任何記錄。因此,數(shù)據(jù)的大小寫會(huì)影響SQL語(yǔ)句的執(zhí)行結(jié)果。花括號(hào)“{}”表示至少選擇一個(gè)選項(xiàng)。若選項(xiàng)之間用逗號(hào)分隔,則可以選擇一個(gè)選項(xiàng)也可以選擇多個(gè)選項(xiàng)。例如,{apple,banana,pear}表示必須從中選擇一個(gè)或多個(gè)選項(xiàng),而如果選項(xiàng)用豎線(|)分隔,就只能選擇一個(gè)選項(xiàng)。例如,{applelbanana|pear}表示必須從中選擇一個(gè),而不能選擇多個(gè)。方括號(hào)“[]”表示是一個(gè)可選項(xiàng)。若選項(xiàng)用豎線分隔,則可以選擇一個(gè),也可以不選擇。例如,[applelbanana|pear]表示可以從中選擇一個(gè)或不選擇。而如果選項(xiàng)用逗號(hào)分隔,則可以不選擇,也可以選擇一個(gè)或多個(gè)。例如,[apple,banana,pear]表示可以從中選擇一個(gè)、多個(gè)或不選擇。3.6丟失數(shù)據(jù)在實(shí)際的數(shù)據(jù)庫(kù)中,數(shù)據(jù)常常會(huì)不可避免地出現(xiàn)丟失、不可知或不可用的情況。例如,在一個(gè)數(shù)據(jù)庫(kù)中,一項(xiàng)工程可能還沒(méi)有確定具體的完工日期,這種信息的缺失使得表中缺少了內(nèi)容。在數(shù)據(jù)庫(kù)中,缺失一些內(nèi)容問(wèn)題倒不大,真正的問(wèn)題是這些缺失的內(nèi)容可能會(huì)給數(shù)據(jù)庫(kù)帶來(lái)危險(xiǎn),導(dǎo)致數(shù)據(jù)庫(kù)的完整性出現(xiàn)問(wèn)題。例如,在一個(gè)表中工作人員的地址、生日等列的信息缺少是可以允許的,這些信息的缺失并不會(huì)給數(shù)據(jù)庫(kù)帶來(lái)危險(xiǎn)。而由于公司中每個(gè)工作人員都只有惟一的ID號(hào),職員ID號(hào)的缺失將導(dǎo)致無(wú)法區(qū)分工作人員記錄,使數(shù)據(jù)庫(kù)的完整性出現(xiàn)問(wèn)題。因此,數(shù)據(jù)庫(kù)中提供了NuLL來(lái)處理數(shù)據(jù)缺失的問(wèn)題。通過(guò)規(guī)定表中的列是否允許空值,明確表明該列是否支持丟失、不可知或不可用的數(shù)據(jù)。SQL標(biāo)準(zhǔn)中規(guī)定了在不同的SQL語(yǔ)句和子句中一組處理NULL值的特殊規(guī)則。下面看兩個(gè)例子,如果用戶需要顯示EMP數(shù)據(jù)表中所有工資未知的職員的全部信息,可以使用如下SELECT語(yǔ)句:SELECT*SELECT*FROMEMPWHERESALARYISNULL如果用戶需要EMP數(shù)據(jù)表中所有已知工資數(shù)據(jù)的職員的信息,可以使用以下語(yǔ)句:SELECT*SELECT*FROMEMPWHERESALARYISNOTNULLNULL與0不相同。任何包含NULL的數(shù)據(jù)元素的算術(shù)運(yùn)算將得到NULL值。例如,如果a的當(dāng)前值為NULL,那么下面的表達(dá)式將等于NULL:(a+10)*10注意:NULL既不是字符,也不是數(shù)字,而是默認(rèn)數(shù)據(jù)。字符和數(shù)字?jǐn)?shù)據(jù)都可以被設(shè)置為NULL。注意:NULL既不是字符,也不是數(shù)字,而是默認(rèn)數(shù)據(jù)。字符和數(shù)字?jǐn)?shù)據(jù)都可以被設(shè)置為NULL。NULL表示未知的值。對(duì)于SQL來(lái)說(shuō)意味著這個(gè)值是未知的,而只要這個(gè)值為未知,就不能將其與其他值比較,即使其他值也是NULL。所以SQL允許除了在TRUE和FALSE之外還有第三種類型的值,稱之為“非確定”(unknown)值。如果比較的兩邊都是NULL,就被認(rèn)為是非確定的。將一個(gè)非確定值取反或使用AND或OR與其他進(jìn)行合并之后,其結(jié)果仍是非確定的。由于結(jié)果表中只包括值為“真”的行,所以NULL不可能滿足該檢查,需要使用特殊的運(yùn)算符ISNULL和ISNOTNULL。雖然NULL并不能很好地解決信息缺失的問(wèn)題,但是,不管如何,NULL值是SQL標(biāo)準(zhǔn)的一部分,在實(shí)際數(shù)據(jù)庫(kù)系統(tǒng)中,也都提供了對(duì)NULL值的支持。在數(shù)據(jù)庫(kù)開(kāi)發(fā)中,NULL值有著重要的作用。習(xí)題1.選擇題(1)SQL語(yǔ)句可以被劃分為()部分。A.SQL操作B.目標(biāo)C.條件D.結(jié)果(2)SQL操作語(yǔ)句中的基本操作有()。A.SELECTB.INSERTC.UPDATED.DELETE(3)SQL中支持()常量。A.?dāng)?shù)字B.字符串C.時(shí)間和日期D.符號(hào)(4)字符串?dāng)?shù)據(jù)類型有()基本形式。A.圖形字符串類型B.定長(zhǎng)字符串類型C.二進(jìn)制字符串類型D.變長(zhǎng)字符串類型(5)SQL標(biāo)準(zhǔn)中規(guī)定的能用于表達(dá)式的運(yùn)算符有()。A.加號(hào)(+)B.減號(hào)(-)C.乘號(hào)(*)D.除號(hào)(/)2.填空題(1)SQL是結(jié)構(gòu)化查詢語(yǔ)言(StructuredQueryLanguage)的縮寫,是IBM公司在20世紀(jì)70年代開(kāi)發(fā)的________________________________________的一部分。(2)常量也稱為字面值或標(biāo)量值,是表示一個(gè)___________________的符號(hào)。(3)表達(dá)式是_________________與____________________________的組合。(4)SQL語(yǔ)言核心功能使用的9個(gè)動(dòng)詞為_(kāi)____________、_____________、_____________、_____________、_____________、_____________、_____________、_____________、_____________。第4章SQL函數(shù)與其他編程語(yǔ)言一樣,SQL提供了許多內(nèi)置的函數(shù),例如計(jì)算多行數(shù)據(jù)的聚合函數(shù)、求字符串子串的字符串函數(shù)、處理日期和時(shí)間的日期時(shí)間函數(shù)、求數(shù)字的數(shù)字函數(shù)、轉(zhuǎn)換數(shù)據(jù)類型的轉(zhuǎn)換函數(shù)等等。通過(guò)使用這些函數(shù),用戶可以對(duì)數(shù)據(jù)表中的數(shù)據(jù)按照自己的需要進(jìn)行各種復(fù)雜的運(yùn)算和操作。這些內(nèi)置函數(shù)可以大大提高在SQL語(yǔ)句中操縱信息的能力,使得對(duì)SQL語(yǔ)句的使用有了更大的靈活性。本章將對(duì)這些SQL函數(shù)進(jìn)行簡(jiǎn)單介紹。本章目標(biāo):完成本章內(nèi)容后我們將能夠:掌握聚合函數(shù)掌握字符串函數(shù)了解日期時(shí)間函數(shù)了解數(shù)學(xué)函數(shù)了解轉(zhuǎn)換函數(shù)4.1聚合函數(shù)在實(shí)際應(yīng)用中,有時(shí)候需要知道所有記錄中某項(xiàng)值的總和、平均值等等,這時(shí)可以使用SQL。提供的聚合函數(shù)。聚合函數(shù)是SQL中很重要的一部分。聚合函數(shù)不是對(duì)某個(gè)記錄進(jìn)行操作,而是對(duì)表中或查詢到的所有記錄的某個(gè)項(xiàng)進(jìn)行操作。在實(shí)際應(yīng)用中,聚合函數(shù)還可以被稱為匯合函數(shù)、聚集函數(shù)、匯總函數(shù)等等。聚合函數(shù)是設(shè)計(jì)為允許大家匯總表或視圖的多行數(shù)據(jù)的SQL函數(shù),以便用戶進(jìn)行特定的查詢,如COUNT()函數(shù)可以統(tǒng)計(jì)滿足WHERE子句中的條件的記錄總數(shù)。所有聚合函數(shù)都具有確定性,任何時(shí)候用一組給定的輸入值調(diào)用它們時(shí),都返回相同的值。SQL中支持的聚合函數(shù)有以下5種:··COUNT()統(tǒng)計(jì)列中值的數(shù)量?!UM()計(jì)算總和?!VG()計(jì)算平均值?!AX()計(jì)算最大值?!IN()計(jì)算最小值。在使用聚合函數(shù)時(shí),需要注意:··在函數(shù)COUNT()、SUM()、AVG()中可以使用DISTINCT關(guān)鍵字,以便在計(jì)算中不包含重復(fù)的行。而對(duì)于函數(shù)MAX()、MIN()與COUNT(*),由于不會(huì)改變其結(jié)果,因此沒(méi)有必要使用DISTINCT?!ず瘮?shù)SUM()、AVG()只能對(duì)數(shù)字?jǐn)?shù)據(jù)類型的列使用,而函數(shù)COUNT()、MAX()、MIN()與COUNT(*)可以對(duì)所有數(shù)據(jù)類型使用。但在不同的數(shù)據(jù)庫(kù)系統(tǒng)中,又提供一些其他的聚合函數(shù),如Oracle中提供了STDDEV()、VARIANCE()函數(shù),SQLServer中提供了STDEV()、VAR()函數(shù)等。4.1.1COUNT()函數(shù)COUNT()函數(shù)可以用來(lái)計(jì)算查詢結(jié)果中某個(gè)特定列出現(xiàn)的次數(shù)。SQL提供了COUNT()和COUNT(*)函數(shù)。這兩個(gè)函數(shù)很相似,但使用是完全不同的。COUNT(*)函數(shù)計(jì)算所有的記錄,不用考慮空值。當(dāng)然,如果COUNT()函數(shù)在沒(méi)有空值的列上進(jìn)行計(jì)算,得到的值與COUNT(*)函數(shù)相同。DISTINCT關(guān)鍵字與COUNT()一起使用,就可以不計(jì)算重復(fù)的值,而返回特定列中惟—值的數(shù)目。而DISTINCT不與函數(shù)COUNT(*)一起使用,因?yàn)镃OUNT(*)計(jì)算的是表中含有的記錄的數(shù)目,并不對(duì)特定列進(jìn)行計(jì)算。4.1.2SUM()與AVG()函數(shù)SUM()函數(shù)用來(lái)計(jì)算特定列所有值的總和并返回計(jì)算結(jié)果。AVG()函數(shù)用來(lái)計(jì)算特定列所有值的平均值。因此,SUM()與AVG()函數(shù)只能處理數(shù)字?jǐn)?shù)據(jù)類型的列。而且,AVG()函數(shù)計(jì)算值的數(shù)目時(shí),并不會(huì)將空值計(jì)算在內(nèi)。DISTINCT關(guān)鍵字也可以在SUM()與AVG()函數(shù)中使用。在SUM()函數(shù)中使用DISTINCT時(shí),SUM()函數(shù)將只計(jì)算列中惟一值的總和。在AVG()函數(shù)中使用DISTINCT時(shí),AVG()函數(shù)將只計(jì)算列中惟一值的平均值。例如,下面的語(yǔ)句在AVG()函數(shù)中使用DISTINCT:SELECTAVG(DISTINCTprice)SELECTAVG(DISTINCTprice)FROMDanweiWHEREtype-’business’4.1.3MAX()與MIN()函數(shù)MAX()函數(shù)用來(lái)計(jì)算特定列包含的所有值中最大的值,而MIN()函數(shù)用來(lái)計(jì)算特定列包含的所有值中最小的值。例如,可以使用這些函數(shù)返回最低和最高的貨運(yùn)成本。因此,MAX()與MIN()函數(shù)中沒(méi)有必要使用DISTINCT關(guān)鍵字。另外,當(dāng)列中存在非空值時(shí),MAX()與MIN()函數(shù)并不會(huì)返回空值。因?yàn)?,空值是未知的,不能認(rèn)為大于或小于任何值。在后面的章節(jié)里將繼續(xù)介紹聚合函數(shù)的使用。4.2字符串函數(shù)字符串是數(shù)據(jù)庫(kù)中使用較多的數(shù)據(jù)類型,很多數(shù)據(jù)的存儲(chǔ)都要使用到字符串。對(duì)字符串進(jìn)行操作是數(shù)據(jù)庫(kù)中很重要的一種操作,SQL中也為字符串提供了很多函數(shù),如SUBSTR()函數(shù)用于從字符串中取出一個(gè)子串。SQL中常見(jiàn)的字符串函數(shù)有:··CHR(code)返回字符代碼數(shù)值等于code的字符。如果數(shù)據(jù)庫(kù)采用ASCII字符集,則code代表字符的ASCII代碼,CHR(code)返回該ASCII代碼所代表的字符。例如,ASCII代碼65、49分別代表字符“A”、“l(fā)”。·CONCAT(strl,str2)返回的字符串是strl和str2連接的結(jié)果?!NITCAP(str)返回將str的首字符大寫,其余字符小寫的字符串?!OWER(str)返回將str的所有字母都變成小寫后的字符串?!PPER(str)返回將str的所有字母都變成大寫后的字符串。例如,下面的語(yǔ)句分別將name列的所有字母變成小寫、大寫和首字母大寫其余字符小寫,然后將結(jié)果返回。SELECTname,LOWER(name),UPPER(name),INITCAP(UPPER(name))SELECTname,LOWER(name),UPPER(name),INITCAP(UPPER(name))FROMDanwei·REPLACE(str1,str2,str3)返回在strl中使用str3對(duì)str2進(jìn)行替換后的字符串,strl是被查找的字符串,str2是查找的字符串,str3是替換字符串。如果第三個(gè)參數(shù)默認(rèn),或者是NULL,則在被查找的字符串中刪去查找的字符串。·SUBSTR(strl,n,m)返回按參數(shù)要求得到的一個(gè)strl的子串,str1是主串,n是所求子串的第一個(gè)字符在strl中的位置,m是子串的字符數(shù)。n為負(fù)數(shù)時(shí)表示子串在strl中的開(kāi)始位置由后向前確定。例如,下面的語(yǔ)句返回FIRSTNAME列中字符串從第2位開(kāi)始長(zhǎng)度為3的字符。SELECTFIRSTNAME,SUBSTR(FIRSTNAME,2,3)SELECTFIRSTNAME,SUBSTR(FIRSTNAME,2,3)FROMDanwei·INSTR(str1,str2,n,m)返回指定子串在主串中的位置。str1是主串,str2是要查找的子串,n是在主串中開(kāi)始查找時(shí)的位置,m表示要返回的子串是第幾個(gè)。n,m的默認(rèn)值是1,如果n是負(fù)數(shù),表示查找時(shí)從strl的末尾計(jì)數(shù)。例如,下面的語(yǔ)句將從字符串的第2個(gè)字符開(kāi)始搜索并返回第一個(gè)以O(shè)開(kāi)頭的字符的位置。SELECTFIRSTNAME,INSTR(FIRSTNAME,SELECTFIRSTNAME,INSTR(FIRSTNAME,‘O’,2,1)FROMDanwei·LENGTH(str1)返回字符串strl的長(zhǎng)度。例如,下面的語(yǔ)句返回指定的FIRSTNAME列中字符串的長(zhǎng)度。SELECTFIRSTNAME,LENGTH(FIRSTNAME)SELECTFIRSTNAME,LENGTH(FIRSTNAME)FROMDanwei各種SQL工具都支持多種字符串函數(shù),以方便對(duì)數(shù)據(jù)庫(kù)中存儲(chǔ)的大量字符串?dāng)?shù)據(jù)進(jìn)行處理。這些函數(shù)在不同的數(shù)據(jù)庫(kù)可能有著不同的函數(shù)名稱,例如,在Oracle數(shù)據(jù)庫(kù)系統(tǒng)中,返回字符串長(zhǎng)度的函數(shù)是LENGTH(),在SQLServer數(shù)據(jù)庫(kù)系統(tǒng)中,返回字符串長(zhǎng)度的函一是CHAR_LENGTH()。所以,在使用這些字符串函數(shù)前要先查閱當(dāng)前使用的數(shù)據(jù)庫(kù)系統(tǒng)的文檔資料。4.3日期時(shí)間函數(shù)時(shí)間和日期在現(xiàn)在的數(shù)據(jù)庫(kù)中使用很頻繁。SQL中也定義了很多時(shí)間日期函數(shù),可以方便地進(jìn)行時(shí)間和日期的顯示、比較、修改和格式轉(zhuǎn)換,如SYSDATE()函數(shù)用于返回系統(tǒng)時(shí)間和日期。這些日期時(shí)間函數(shù)在不同的數(shù)據(jù)庫(kù)可能有著不同的函數(shù)名稱,如Oracle系統(tǒng)中返回系統(tǒng)的時(shí)間和日期的函數(shù)是SYSDATE()函數(shù),但在SQLServer中返回系統(tǒng)的時(shí)間和日期的函數(shù)是GETDATE()。所以,在使用這些函數(shù)前一定要先查閱當(dāng)前使用的數(shù)據(jù)庫(kù)系統(tǒng)的文檔資料。SQL中常見(jiàn)的日期時(shí)間函數(shù)有:·ADD_MONTHS(date,n)返回將指定日期date所在的月份增加n后的日期。例如,下面的語(yǔ)句把顯示的所有員工的生日延遲兩個(gè)月。SELECTid,birthday,ADD_MONTHS(birthday,2)SELECTid,birthday,ADD_MONTHS(birthday,2)FROMDanwei·LAST_DAY(date)返回指定日期date所在月份的最后一天的日期。例如,下面的語(yǔ)句返回ENDDATE列中給出的日期所在月份的最后一天是幾號(hào)。SELECTENDDATE,LAST_DAY(ENDDATE)SELECTENDDATE,LAST_DAY(ENDDATE)FROMDanwei·MONTHS_BETWEEN(datel,date2)返回指定的日期datel和date2之間的月數(shù)。例如,下面的語(yǔ)句返回給定的日期startdate

溫馨提示

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

評(píng)論

0/150

提交評(píng)論