數(shù)據(jù)庫(kù)原理與開(kāi)發(fā)技術(shù) 課件 第3章 關(guān)系型數(shù)據(jù)庫(kù)語(yǔ)言SQL_第1頁(yè)
數(shù)據(jù)庫(kù)原理與開(kāi)發(fā)技術(shù) 課件 第3章 關(guān)系型數(shù)據(jù)庫(kù)語(yǔ)言SQL_第2頁(yè)
數(shù)據(jù)庫(kù)原理與開(kāi)發(fā)技術(shù) 課件 第3章 關(guān)系型數(shù)據(jù)庫(kù)語(yǔ)言SQL_第3頁(yè)
數(shù)據(jù)庫(kù)原理與開(kāi)發(fā)技術(shù) 課件 第3章 關(guān)系型數(shù)據(jù)庫(kù)語(yǔ)言SQL_第4頁(yè)
數(shù)據(jù)庫(kù)原理與開(kāi)發(fā)技術(shù) 課件 第3章 關(guān)系型數(shù)據(jù)庫(kù)語(yǔ)言SQL_第5頁(yè)
已閱讀5頁(yè),還剩91頁(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)介

第3章關(guān)系型數(shù)據(jù)庫(kù)語(yǔ)言SQL本章主要內(nèi)容:(1)SQL數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)、SQL的主要功能、SQL語(yǔ)法基礎(chǔ)(2)SQL的常用數(shù)據(jù)類型和常用函數(shù)(3)SQL定義功能:創(chuàng)建(Create)、修改(Alter)、刪除(Drop)(4)數(shù)據(jù)更新:插入(Insert)、修改(Update)、刪除(Delete)(5)數(shù)據(jù)查詢:Select<列名>From<表名>Where<條件表達(dá)式>3.1

SQL概述SQL和一般的高級(jí)程序語(yǔ)言不同,它不是程序設(shè)計(jì)語(yǔ)言。它是高級(jí)的非過(guò)程化編程語(yǔ)言,允許用戶在高層數(shù)據(jù)結(jié)構(gòu)上工作。它不要求用戶指定對(duì)數(shù)據(jù)的存放方法,也不需要用戶了解具體的數(shù)據(jù)存放方式,因此,具有完全不同底層結(jié)構(gòu)的不同數(shù)據(jù)庫(kù)系統(tǒng),都可以使用相同的SQL作為數(shù)據(jù)輸入與管理的接口。本章SQL的例子,以MySQL8.0為主。結(jié)構(gòu)化查詢語(yǔ)言(StructuredQueryLanguage,SQL)是一種用于和關(guān)系數(shù)據(jù)庫(kù)進(jìn)行交互通訊的計(jì)算機(jī)語(yǔ)言,是用于對(duì)存放在網(wǎng)絡(luò)計(jì)算機(jī)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行組織管理和檢索的工具。3.1.1SQL的產(chǎn)生和發(fā)展

1970年,美國(guó)IBM研究中心的E.F.Codd連續(xù)發(fā)表多篇論文,提出關(guān)系模型。

1972年,IBM公司開(kāi)始研制實(shí)驗(yàn)型關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)SYSTEMR,配制的查詢語(yǔ)言稱為SQUARE(SpecifyingQueriesAsRelationalExpression)語(yǔ)言,在語(yǔ)言中使用了較多的數(shù)學(xué)符號(hào)。1974年,Boyce和Chamberlin把SQUARE修改為SEQUEL(StructuredEnglishQUEryLanguage)語(yǔ)言。后來(lái)SEQUEL簡(jiǎn)稱為SQL(StructuredQueryLanguage),SQL的發(fā)音仍為“sequel”。3.1.1SQL的產(chǎn)生和發(fā)展1986年10月,美國(guó)國(guó)家標(biāo)準(zhǔn)局(ANSI)采用SQL作為關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的標(biāo)準(zhǔn)語(yǔ)言(ANSIX3.135-1986),后來(lái)國(guó)際標(biāo)準(zhǔn)化組織(ISO)也通過(guò)了這一標(biāo)準(zhǔn)。1999年,ISO發(fā)布了標(biāo)準(zhǔn)化文件:《數(shù)據(jù)庫(kù)語(yǔ)言SQL》,有1000多頁(yè),習(xí)慣上稱為SQL3。最新的標(biāo)準(zhǔn)是2010年發(fā)布的SQL2011。自從SQL成為國(guó)際標(biāo)準(zhǔn)語(yǔ)言以后,世界各數(shù)據(jù)庫(kù)廠商紛紛推出各自的SQL軟件或與SQL的接口軟件。目前,主流的R-DBMS,如:Oracle、MySQL、MSSQLServer、IBMDB2、Sybase等,都支持SQL3或推出了與SQL3兼容的接口。3.1.2SQL數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)

SQL數(shù)據(jù)庫(kù)的體系結(jié)構(gòu),其術(shù)語(yǔ)與傳統(tǒng)的關(guān)系模型術(shù)語(yǔ)有些不同,如表3-1所示。它也是3層結(jié)構(gòu),如圖3-1所示。表3-1關(guān)系模型術(shù)語(yǔ)圖3-1SQL數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)關(guān)系模型SQL數(shù)據(jù)庫(kù)關(guān)系模式:屬性、元組基本表:列(column)、行(row)存儲(chǔ)模式、Schema存儲(chǔ)文件、Database子模式視圖(View)3.1.2SQL數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)

SQL數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)要點(diǎn)如下:

(1)一個(gè)SQL模式(Schema)是表和約束的集合,在具體的RDBMS中,模式一般叫DataBase。(2)一個(gè)表(Table)由若干行(row)構(gòu)成,一行就是一條記錄,是列(column)的序列,每列對(duì)應(yīng)一個(gè)

屬性。(3)表有3種類型:基本表、視圖和導(dǎo)出表?;颈硎菍?shí)際存儲(chǔ)在數(shù)據(jù)庫(kù)中的表;視圖是由若干基本表或其他視圖構(gòu)成的表的定義,是虛擬表,它本身沒(méi)有存儲(chǔ)數(shù)據(jù);而導(dǎo)出表是執(zhí)行查詢時(shí),產(chǎn)生的臨時(shí)表,存儲(chǔ)在內(nèi)存或數(shù)據(jù)庫(kù)緩沖區(qū)中。(4)一個(gè)基本表可以跨一個(gè)或多個(gè)存儲(chǔ)文件,一個(gè)存儲(chǔ)文件也可以存放一個(gè)或多個(gè)基本表。每個(gè)存儲(chǔ)文件與外部存儲(chǔ)器上的物理文件相對(duì)應(yīng)。(5)用戶可以用SQL語(yǔ)句對(duì)基本表和視圖進(jìn)行查詢操作。在用戶看來(lái),兩者的執(zhí)行效果是一樣的。3.1.3SQL的組成核心的SQL,主要由四個(gè)部分組成,也稱SQL的四大功能。SQL通過(guò)數(shù)據(jù)定義語(yǔ)言(DataDefineLanguage,DDL)來(lái)實(shí)現(xiàn),用于定義SQL數(shù)據(jù)庫(kù)(DataBase)、基本表(Table)、視圖(View)、索引(Index)等結(jié)構(gòu),可以對(duì)這四種數(shù)據(jù)庫(kù)對(duì)象進(jìn)行創(chuàng)建(Create)、修改(Alter)、刪除(Drop)等操作。

1.數(shù)據(jù)定義功能

2.數(shù)據(jù)操縱功能SQL通過(guò)數(shù)據(jù)操縱語(yǔ)言(DataManipulationLanguage,DML)來(lái)實(shí)現(xiàn),包括查詢和更新兩種操作。其中,更新包括數(shù)據(jù)插入(Insert)、修改(Update)、刪除(Delete)3種操作。3.1.3SQL的組成數(shù)據(jù)控制是指對(duì)數(shù)據(jù)庫(kù)的四大保護(hù)功能:數(shù)據(jù)庫(kù)恢復(fù)、完整性、并發(fā)、安全性控制。SQL通過(guò)數(shù)據(jù)控制語(yǔ)言(DCL)來(lái)實(shí)現(xiàn)四大保護(hù)的。具體內(nèi)容,將在第7章介紹。

3.數(shù)據(jù)控制功能

4.嵌入式SQL語(yǔ)言使用規(guī)則這部分內(nèi)容涉及到SQL語(yǔ)句嵌入到宿主語(yǔ)言(如C語(yǔ)言)程序中的使用規(guī)則。3.1.4SQL的作用

SQL不是一個(gè)獨(dú)立的產(chǎn)品,它是R-DBMS的一個(gè)組成部分,是用戶和DBMS進(jìn)行通信的工具。其交互模式如圖3-2所示。圖3-2SQL與R-DBMS的交互模式

SQL與R-DBMS進(jìn)行交互,是通過(guò)數(shù)據(jù)庫(kù)引擎(DataBaseEngine)來(lái)實(shí)現(xiàn)的。所謂數(shù)據(jù)庫(kù)引擎,是DBMS的核心進(jìn)程,負(fù)責(zé)存儲(chǔ)器上數(shù)據(jù)的實(shí)際構(gòu)造、存儲(chǔ)和檢索。它接收從其他DBMS部分發(fā)送的SQL請(qǐng)求,還接收來(lái)自用戶的應(yīng)用程序,甚至計(jì)算機(jī)系統(tǒng)的SQL請(qǐng)求。3.1.4SQL的作用例如,在Windows10上,查看MySQL8.0的核心進(jìn)程:3.1.4SQL的作用歸納起來(lái),SQL有下列作用:(1)SQL是一種交互式查詢(Interactivequery)語(yǔ)言。(2)SQL是一種數(shù)據(jù)庫(kù)編程(DataBaseProgramming)語(yǔ)言,程序員可以將SQL命令嵌入到應(yīng)用程序中,以存取數(shù)據(jù)庫(kù)中的數(shù)據(jù)。

(3)SQL是數(shù)據(jù)庫(kù)管理員(DataBase

Administractor)的語(yǔ)言,DBA利用SQL定義DB結(jié)構(gòu),控制數(shù)據(jù)存取。(4)SQL是一種客戶端/服務(wù)器(Client/Server)語(yǔ)言,具有網(wǎng)絡(luò)通信功能。(5)SQL是一種分布式數(shù)據(jù)庫(kù)(DistributedDataBase)語(yǔ)言。(6)SQL是一種數(shù)據(jù)庫(kù)網(wǎng)關(guān)(DataBasegateway)語(yǔ)言,在不同的RDBMS產(chǎn)品之間,利用SQL進(jìn)行通信。3.1.5SQL語(yǔ)法基礎(chǔ)SQL語(yǔ)言與其他計(jì)算機(jī)編程語(yǔ)言類似,也有一些組成要素。1.常量

SQL的常量一般有字符串、整數(shù)、實(shí)數(shù)、邏輯常量(true、false)等,其中字符串用一對(duì)單引號(hào)作為界定符。

2.數(shù)據(jù)類型

SQL常用的數(shù)據(jù)類型,如表3-2所示。SQL更多的數(shù)據(jù)類型及語(yǔ)法形式在不同的R-DBMS中會(huì)有所差異,要以具體的關(guān)系數(shù)據(jù)庫(kù)管理軟件的版本為準(zhǔn)。3.1.5SQL語(yǔ)法基礎(chǔ)序號(hào)數(shù)據(jù)類型中文說(shuō)明注釋1tinyint微整型范圍:-128~127,存儲(chǔ)占1個(gè)字節(jié)2smallint短整型范圍:-215~215-1(-32768~32767),存儲(chǔ)占2個(gè)字節(jié)3int或integer整型范圍:-231~231-1,存儲(chǔ)占4個(gè)字節(jié)4long長(zhǎng)整型字長(zhǎng)32位,存儲(chǔ)占8個(gè)字節(jié)5numeric(p,d)定長(zhǎng)浮點(diǎn)數(shù)由p位數(shù)字(不含符號(hào)、小數(shù)點(diǎn))組成,其中含d位小數(shù)6decimal(p,d)定長(zhǎng)浮點(diǎn)數(shù)同上,或dec(p,d)7float(n)單精度浮點(diǎn)數(shù)精度至少為n位數(shù)字,存儲(chǔ)占4個(gè)字節(jié)8real或double雙精度浮點(diǎn)數(shù)精度取決于所在電腦,存儲(chǔ)占8個(gè)字節(jié)9char(n)定長(zhǎng)字符型長(zhǎng)度為n的字符串,不足自動(dòng)補(bǔ)空格,占n個(gè)字節(jié)(n<=255)10varchar(n)變長(zhǎng)字符型最大長(zhǎng)度為n的變長(zhǎng)字符串(n<=255)11text非二進(jìn)制字符型最大長(zhǎng)度不超過(guò)216-1(65535)個(gè)的變長(zhǎng)字符串12blog二進(jìn)制字節(jié)字符最大長(zhǎng)度不超過(guò)216-1個(gè)字節(jié),可以存儲(chǔ)圖片、影像等13datetime日期時(shí)間型中文格式:yyyy-mm-dd

hh:mm:ss,占8個(gè)字節(jié)3.1.5SQL語(yǔ)法基礎(chǔ)3.空值(null):不知道內(nèi)容。

4.運(yùn)算符

(1)算術(shù)運(yùn)算符:+、-、*、/,分別表示加、減、乘、除;(2)字符串運(yùn)算符:+(兩個(gè)字符串連接,MySQL不支持,MSSQLServer支持);(3)比較運(yùn)算符:<、<=、>、>=、<>、!=、=;(4)邏輯運(yùn)算符:not、and、or;(5)集合運(yùn)算符:union、join。3.1.5SQL語(yǔ)法基礎(chǔ)5.謂詞(1)between…and/notbetween…and:介于兩者之間/介于兩者之外;(2)in/notin:在里面/不在里面;(3)like:用于字符串匹配查找,常用的匹配符有2個(gè):%(匹配任意長(zhǎng)字符串)、_(匹配任意單個(gè)字符);(4)isnull/isnotnull:空/非空;(5)exists/notexists:存在量詞/不存在量詞;(6)any:任意一個(gè)存在量詞;(7)all:全稱量詞。3.1.5SQL語(yǔ)法基礎(chǔ)

6.函數(shù)SQL提供了豐富的內(nèi)部函數(shù),下面以MySQL為例,列舉其中一部分。序號(hào)函數(shù)名函數(shù)說(shuō)明1Count(*)對(duì)檢索出的結(jié)果進(jìn)行計(jì)數(shù),即行數(shù)2Sum(列名)對(duì)檢索出的記錄,按指定的列求和,該列必須為數(shù)值型3Avg(列名)對(duì)檢索出的記錄,按指定的列求平均,該列必須為數(shù)值型4Max(列名)對(duì)檢索出的記錄,按指定的列求最大值5Min(列名)對(duì)檢索出的記錄,按指定的列求最小值6Char_length(str)返回字符串str所含字符的個(gè)數(shù)7Concat(s1,s2,…)返回連接后的字符串,參數(shù)中只要有一個(gè)為null,則返回null8Lowse(str)將字符串str中的字母全轉(zhuǎn)為小寫(xiě)3.1.5SQL語(yǔ)法基礎(chǔ)說(shuō)明:除序號(hào)6、7、16等3個(gè)函數(shù)外,其余函數(shù)是SQL3中的標(biāo)準(zhǔn)函數(shù)。序號(hào)函數(shù)名函數(shù)說(shuō)明9Upper(str)將字符串str中的字母全轉(zhuǎn)為大寫(xiě)10Left(str,n)返回字符串str中,從左邊開(kāi)始的n個(gè)字符11Right(str,n)返回字符串str中,從右邊開(kāi)始的n個(gè)字符12Substring(str,n,len)返回參數(shù)str中,從左邊n個(gè)字符開(kāi)始、長(zhǎng)度為len的子字符串13Ltrim(str)刪除字符串str左邊的空格14Rtrim(str)刪除字符串str右邊、兩邊的空格15trim(str)刪除字符串str左右兩邊的空格16Now()獲取當(dāng)前日期和時(shí)間,返回格式為:yyyy-mm-dd

hh:mm:dd17Year(d)獲取日期d中的年份數(shù)18Month(d)獲取日期d中的月份數(shù)19Day(d)獲取日期d中的日期數(shù)20Datediff(d1,d2)返回兩個(gè)日期d1、d2之間相隔的天數(shù)21If(expr,V1,V2)若表達(dá)式expr為真,返回V1,否則返回V23.2開(kāi)源數(shù)據(jù)庫(kù)管理系統(tǒng)MySQL

介紹本章主要內(nèi)容:(1)SQL數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)、SQL的主要功能、SQL語(yǔ)法基礎(chǔ)(2)SQL的常用數(shù)據(jù)類型和常用函數(shù)(3)SQL定義功能:創(chuàng)建(Create)、修改(Alter)、刪除(Drop)(4)數(shù)據(jù)更新:插入(Insert)、修改(Update)、刪除(Delete)(5)數(shù)據(jù)查詢:Select<列名>From<表名>Where<條件表達(dá)式>3.2開(kāi)源數(shù)據(jù)庫(kù)管理系統(tǒng)MySQL

介紹

MySQL誕生于1994年,由芬蘭的MySQLAB公司開(kāi)發(fā)、發(fā)布并支持,其主要?jiǎng)?chuàng)始人為芬蘭的MontyWidenius(蒙蒂·維德紐斯,1962年出生)。2005年10月,公司發(fā)布了一個(gè)里程碑式的版本:MySQL5.0,加入了游標(biāo)、存儲(chǔ)過(guò)程、觸發(fā)器、視圖和事務(wù)的支持。從此,MySQL向高性能數(shù)據(jù)庫(kù)的方向發(fā)展。由于開(kāi)源、免費(fèi),MySQL迅速成為互聯(lián)網(wǎng)上最受歡迎的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)。2009年4月被Oracle收購(gòu)后,發(fā)布了兩種模式的版本:Community(社區(qū)版,免費(fèi),用于學(xué)習(xí)足夠)、Enterprise(企業(yè)版,要收費(fèi))。3.2.1MySQL

的下載及安裝進(jìn)入官網(wǎng)/downloads,下載MySQL數(shù)據(jù)庫(kù)最新的社區(qū)版軟件安裝包(community)。注意:不是越新越好!3.2.1MySQL

的下載及安裝3.2.1MySQL

的下載及安裝3.2.2MySQLWorkbench的使用

MySQL提供了一些管理工具,MySQLWorkbench因圖形化界面,成為初學(xué)者的首選。MySQL安裝成功后,重啟電腦,點(diǎn)擊電腦左下角,找到

MySQL,點(diǎn)擊:MySQLWorkbench。第一次使用MySQL時(shí),最好先新建一個(gè)數(shù)據(jù)庫(kù)連接,如圖3-5、圖3-6所示。為了版本過(guò)渡,MySQLWorkbench8.0中,保留了MySQL5.7的一個(gè)連接

3.2.2MySQLWorkbench的使用3.2.2MySQLWorkbench的使用3.2.2MySQLWorkbench的使用對(duì)數(shù)據(jù)的任何操作,必須先新建一個(gè)數(shù)據(jù)庫(kù)。對(duì)數(shù)據(jù)庫(kù)的使用分4步:(1)新建一個(gè)數(shù)據(jù)庫(kù),例如:新建一個(gè)學(xué)生數(shù)據(jù)庫(kù)student,語(yǔ)法為:

Createdatabasestudent;(2)將新建的數(shù)據(jù)庫(kù)設(shè)置為當(dāng)前數(shù)據(jù)庫(kù),例如,將student設(shè)為當(dāng)前數(shù)據(jù)庫(kù),語(yǔ)法:

usestudent;(3)新建數(shù)據(jù)庫(kù)基本表:Createtable。(4)編寫(xiě)數(shù)據(jù)更新(Insert、Update、Delete)和數(shù)據(jù)查詢(Select)語(yǔ)句。注意:MySQL默認(rèn)以分號(hào)作為每條語(yǔ)句的結(jié)束符,所以每條SQL語(yǔ)句都應(yīng)輸入一個(gè)英文輸入狀態(tài)下的分號(hào)(;)作為結(jié)束。MySQL的SQL語(yǔ)句以一對(duì)英文狀態(tài)下的單引號(hào)作為字符串的界定符。SQL語(yǔ)句不區(qū)分英文大小寫(xiě)。3.2.3修改數(shù)據(jù)庫(kù)用戶的密碼

MySQL默認(rèn)只允許本地電腦訪問(wèn)。若要通過(guò)網(wǎng)絡(luò)上別的電腦能訪問(wèn)本MySQL數(shù)據(jù)庫(kù),只需將圖中的LimitConnectivitytoHostsMatching中的localhost修改為百分號(hào)“%”即可。3.3

SQL的數(shù)據(jù)定義功能本章主要內(nèi)容:(1)SQL數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)、SQL的主要功能、SQL語(yǔ)法基礎(chǔ)(2)SQL的常用數(shù)據(jù)類型和常用函數(shù)(3)SQL定義功能:創(chuàng)建(Create)、修改(Alter)、刪除(Drop)(4)數(shù)據(jù)更新:插入(Insert)、修改(Update)、刪除(Delete)(5)數(shù)據(jù)查詢:Select<列名>From<表名>Where<條件表達(dá)式>3.3

SQL的數(shù)據(jù)定義功能

SQL的數(shù)據(jù)定義功能包括定義數(shù)據(jù)庫(kù)、基本表、視圖、索引等。由于視圖是基本表的虛擬表,索引是依附基本表的,SQL一般不提供對(duì)視圖、索引的修改功能。用戶如果想修改,可以先刪除,再新建。序號(hào)操作對(duì)象創(chuàng)建修改刪除1數(shù)據(jù)庫(kù)CreateDatabase數(shù)據(jù)庫(kù)名AlterDatabase數(shù)據(jù)庫(kù)名DropDatabase數(shù)據(jù)庫(kù)名2基本表CreateTable表名AlterTable表名DropTable表名

3視圖CreateView視圖名DropView視圖名4索引CreateIndex索引名DropIndex索引名3.3

SQL的數(shù)據(jù)定義功能在SQL語(yǔ)句中,有關(guān)約定符號(hào)及語(yǔ)法規(guī)定的說(shuō)明:(1)語(yǔ)句格式中,尖括號(hào)“<>”中的內(nèi)容,為用戶必須輸入的數(shù)據(jù)庫(kù)對(duì)象名;中括號(hào)“[]”中的內(nèi)容為任選項(xiàng);大括號(hào)“{}”或豎線“|”中的內(nèi)容為必選項(xiàng),即必選其中之一項(xiàng)。

(2)SQL語(yǔ)法中,多個(gè)數(shù)據(jù)項(xiàng)的之間的分隔符為“,”,字符串常數(shù)的界定符為一對(duì)單引號(hào)“’’”,注釋用“/*注釋內(nèi)容*/”。SQL語(yǔ)句的結(jié)束符為分號(hào)“;”。

(3)在SQL語(yǔ)句中,英文字母大小寫(xiě)均可以,不敏感,一般首寫(xiě)字母用大寫(xiě)。所有的約定符號(hào)中,只能在英文輸入狀態(tài)下輸入,不能在中文狀態(tài)下輸入。

1.數(shù)據(jù)庫(kù)的創(chuàng)建3.3.1數(shù)據(jù)庫(kù)(DataBase)的創(chuàng)建、刪除創(chuàng)建數(shù)據(jù)庫(kù)的語(yǔ)法如下,其中,尖括號(hào)

<>為語(yǔ)法格式,表示里面的參數(shù)必須輸入:

Createdatabase<數(shù)據(jù)庫(kù)名>;例3-1在MySQL中,創(chuàng)建一個(gè)名稱為Student的數(shù)據(jù)庫(kù),如圖3-9所示,語(yǔ)句為:3.3.1數(shù)據(jù)庫(kù)(DataBase)的創(chuàng)建、刪除CreateDatabasestudent;/*創(chuàng)建一個(gè)學(xué)生數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)名為:student*/數(shù)據(jù)庫(kù)Student創(chuàng)建后的路徑:

2.數(shù)據(jù)庫(kù)的刪除3.3.1數(shù)據(jù)庫(kù)(DataBase)的創(chuàng)建、刪除如果一個(gè)數(shù)據(jù)庫(kù)不需要了,可將其刪除,語(yǔ)法:

Dropdatabase<數(shù)據(jù)庫(kù)名>;

例如,刪除上面創(chuàng)建的student數(shù)據(jù)庫(kù):

Dropdatabasestudent;

一個(gè)數(shù)據(jù)庫(kù)被刪除后,其所含資源都全部被刪除,如果原先沒(méi)有做數(shù)據(jù)庫(kù)備份,則將無(wú)法恢復(fù)。

1.基本表的創(chuàng)建3.3.2基本表(Table)的創(chuàng)建、修改和刪除

CreateTable<表名>/*-----------------表的中文說(shuō)明-------------------------*/( <列名1><數(shù)據(jù)類型><notnull|null>[default<默認(rèn)值>], <列名2><數(shù)據(jù)類型><notnull|null>[列級(jí)完整性約束條件],

…,Constraint<主鍵名>Primarykey(列名1,列名2,…,列名n)/*主鍵定義*/[,Constraint<外鍵名1>Foreignkey(列名1)references<表名(列名1)>]/*外鍵定義*/[,Constraint<外鍵名2>Foreignkey(列名2)references<表名(列名2)>]/*外鍵定義*/);例3-2下面是教學(xué)、借(還)書(shū)數(shù)據(jù)庫(kù)的關(guān)系模式圖,如圖3-10所示。其中,一個(gè)學(xué)生可以選修多門(mén)課程,學(xué)生選修的課都有一個(gè)成績(jī),每門(mén)課程可被多個(gè)學(xué)生選修,每門(mén)課只能安排一個(gè)教師上課,一個(gè)教師可以上多門(mén)課。一個(gè)學(xué)生或教師可以借多本書(shū),一本書(shū)可以被多人借,但借出去的書(shū),只有把書(shū)還回來(lái)后,才可以外借。根據(jù)以上情況,創(chuàng)建基本表。3.3.2基本表(Table)的創(chuàng)建、修改和刪除3.3.2基本表(Table)的創(chuàng)建、修改和刪除3.3.2基本表(Table)的創(chuàng)建、修改和刪除12345678910111213CreateTableT/*-------------------------------教師基本信息表-------------------------------*/(

tNochar(4)notnullprimarykey,/*教師編號(hào),設(shè)為主鍵*/

tName

varchar(30)notnull,/*教師姓名*/Title varchar(10)null/*職稱,最后1行不能有逗號(hào)*/);CreateTableC/*-------------------------------課程基本信息表-------------------------------*/(

cNochar(4)notnullprimarykey,/*課程編號(hào)*/

cName

varchar(30)notnull,/*課程名稱*/

tNochar(4)null,/*教師編號(hào)*/constraintc_fkforeignkey(tNo)referencesT(tNo)/*定義外鍵,最后1行不能有逗號(hào)*/);3.3.2基本表(Table)的創(chuàng)建、修改和刪除14151617181920212223CreateTableS/*-------------------------------學(xué)生基本信息表-------------------------------*/(

sNochar(8)notnullprimarykey,/*學(xué)號(hào)*/

sName

varchar(30)notnull,/*姓名*/sexchar(1)notnulldefault'M',/*性別:M-男,F(xiàn)-女*/Ageintnotnulldefault0,/*年齡*/

dtBirthDatedatenotnull,/*出生日期*/professvarchar(20)null,/*專業(yè)*/check(sexin('M','F'))/*自定義約束:sex只能取M或F*/);3.3.2基本表(Table)的創(chuàng)建、修改和刪除2425262728293031323334353637383940CreateTableSC/*-------------------------------學(xué)生選課信息表-------------------------------*/(

sNochar(8)notnull,/*學(xué)號(hào)*/

cNochar(4)notnull,/*課程編號(hào)*/Scoredecimal(6,2)notnulldefault0,/*考試成績(jī)*/Check(Scorebetween0and100),/*MySQL8.0才支持Check功能*/constraintsc_pkprimarykey(sNo,cNo),/*定義主鍵*/constraintsc_fk1foreignkey(sNo)referencesS(sNo),/*定義外鍵:學(xué)號(hào)*/constraintsc_fk2foreignkey(cNo)referencesC(cNo)/*定義外鍵:課程號(hào)*/);CreateTableBook/*--------------------------圖書(shū)基本信息表----------------------------*/(

cBookNochar(8)notnullprimarykey,/*圖書(shū)編號(hào)*/

vcBookName

varchar(60)notnull,/*書(shū)名*/

vcPYCode

varchar(50)null,/*拼音碼*/

cStatus char(1) notnulldefault'1'/*當(dāng)前狀態(tài):1-在庫(kù),2-借出*/);3.3.2基本表(Table)的創(chuàng)建、修改和刪除414243444546474849505152CreateTablesmBorrow/*---------------學(xué)生、教師借(還)書(shū)信息表-----------------*/(

iID

intnotnullauto_increment,/*自動(dòng)流水號(hào),從1開(kāi)始,每插入1條記錄加1*/

dtBorrowDate

datetimenotnulldefaultnow(), /*借書(shū)日期*/

cBookNochar(8)notnull,/*圖書(shū)編號(hào)*/

cBorrowNochar(8)notnull,/*借閱人編號(hào)*/

cTypechar(1)notnulldefault'1',/*借閱人類別:1-學(xué)生,2-教師*/

cReturn char(1) notnulldefault'0',/*是否還書(shū):1-yes,0-no*/

dtReturnDate

datetimenull, /*還書(shū)日期*/constraintsmBorrow_pkprimarykey(iID),/*定義主鍵*/constraintsmBorrow_fkforeignkey(cBookNo)referencesBook(cBookNo)/*外鍵:書(shū)號(hào)*/);3.3.2基本表(Table)的創(chuàng)建、修改和刪除基本表創(chuàng)建后的物理文件:2.基本表的修改3.3.2基本表(Table)的創(chuàng)建、修改和刪除隨著應(yīng)用環(huán)境和需求的變化,有時(shí)已經(jīng)投入運(yùn)行的數(shù)據(jù)庫(kù)系統(tǒng),需要修改基本表的結(jié)構(gòu)。例如,某些列的長(zhǎng)度不夠、或約束需要修改、或要增加新的列、或刪除已有的完整性約束等。SQL可通過(guò)AlterTable語(yǔ)句來(lái)完成,其語(yǔ)法為:AlterTable<表名>Add<新列名><數(shù)據(jù)類型><notnull|null>[default<默認(rèn)值>]/*增加列名*/AlterTable<表名>Modify<列名><數(shù)據(jù)類型><notnull|null>[default<默認(rèn)值>]/*修改列名*/AlterTable<表名>Drop<約束條件>/*刪除約束*/3.3.2基本表(Table)的創(chuàng)建、修改和刪除例如,在例3.2中,將課程名稱的長(zhǎng)度修改為50個(gè)字符,語(yǔ)法為:

AltertableCmodifycNamevarchar(50)notnull;

在學(xué)生表中,增加一列:vcMemo,記載學(xué)生的備注信息,語(yǔ)法為:

AltertableSaddvcMemovarchar(250)null;3.3.2基本表(Table)的創(chuàng)建、修改和刪除3.基本表的刪除當(dāng)一張表不再需要時(shí),可用SQL語(yǔ)句Droptable將其刪除?;颈硪坏┍粍h除,依附在該表中的數(shù)據(jù)、約束、索引都將被刪除,且不可恢復(fù)。語(yǔ)法為:

Droptable<表名>[Restrict|Cascade]選項(xiàng)Restrict表示,如果被刪除的表上,存在有約束,則不允許直接刪除,需要先把相關(guān)約束全部刪除;選項(xiàng)Cascade則不需要,它可把表上的相關(guān)約束及表一次性全部刪除。

如果該表是參照表,即它的主鍵是另一表的外鍵,則不允許刪除。必須先把被參照表的外鍵刪除,才允許刪除參照表。3.3.3索引的創(chuàng)建和刪除當(dāng)表的行數(shù)比較大時(shí),數(shù)據(jù)檢索會(huì)比較耗時(shí)。建立索引可以加快數(shù)據(jù)查詢速度。數(shù)據(jù)庫(kù)中的索引相當(dāng)于圖書(shū)的目錄,可以快速定位查找內(nèi)容。表的主鍵是一個(gè)天然的索引。另外,用戶可以對(duì)基本表查詢頻繁的屬性列,創(chuàng)建多個(gè)索引。每創(chuàng)建一個(gè)索引,都會(huì)在存儲(chǔ)內(nèi)部增加一個(gè)索引文件。因此,索引雖然會(huì)加快數(shù)據(jù)查詢速度,但同時(shí)也會(huì)占用存儲(chǔ)空間,增加系統(tǒng)開(kāi)銷。當(dāng)基本表中的數(shù)據(jù)發(fā)生插入、修改、刪除時(shí),表上所有索引文件都要隨之發(fā)生變化,以便于表中數(shù)據(jù)保持一致。所以,對(duì)于信息量少、查詢不頻繁的屬性列,不要?jiǎng)?chuàng)建索引。3.3.3索引的創(chuàng)建和刪除1.索引的創(chuàng)建SQL創(chuàng)建索引的語(yǔ)法為:

Create[Unique][Cluster]Index<索引名>on<表名>(<列名>[Asc|Desc][,<列名>[Asc|Desc]]…)(1)一個(gè)索引可以建在表的多個(gè)列上,列之間用逗號(hào)“,”隔開(kāi)。(2)每個(gè)列名后可以用ASC或DESC來(lái)指定是按升序,還是按降序排列,默認(rèn)按ASC(升序)。(3)Unique表示此索引的每一個(gè)索引值只對(duì)應(yīng)唯一的記錄值。(4)Cluster表示要建立的索引是聚簇索引。3.3.3索引的創(chuàng)建和刪除例3-3針對(duì)例3-2中的學(xué)生信息表,可在專業(yè)上,創(chuàng)建一個(gè)聚簇索引,語(yǔ)法:CreateClusterIndexS_professonS(professAsc);這樣,專業(yè)相同的學(xué)生元組會(huì)各自保存在磁盤(pán)上連續(xù)的物理塊中,如果按專業(yè)查詢學(xué)生,查詢速度會(huì)大大提高。3.3.3索引的創(chuàng)建和刪除2.索引的刪除索引一經(jīng)建立,就由系統(tǒng)使用和維護(hù),用戶無(wú)須干預(yù)。對(duì)于作用不大的索引,可以將其刪除,語(yǔ)法為:

DropIndex<索引名>;3.4SQL的數(shù)據(jù)更新本章主要內(nèi)容:(1)SQL數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)、SQL的主要功能、SQL語(yǔ)法基礎(chǔ)(2)SQL的常用數(shù)據(jù)類型和常用函數(shù)(3)SQL定義功能:創(chuàng)建(Create)、修改(Alter)、刪除(Drop)(4)數(shù)據(jù)更新:插入(Insert)、修改(Update)、刪除(Delete)(5)數(shù)據(jù)查詢:Select<列名>From<表名>Where<條件表達(dá)式>3.4SQL的數(shù)據(jù)更新基本表創(chuàng)建后,里面沒(méi)有數(shù)據(jù),可輸入下面的SQL語(yǔ)句查看:

Select*fromS;/*簡(jiǎn)單的查詢語(yǔ)句:查詢學(xué)生表S中的記錄*/

1.插入一個(gè)元組

3.4.1插入數(shù)據(jù)(Insertinto)

SQL的數(shù)據(jù)插入語(yǔ)句有兩種形式:插入一個(gè)元組(即一條記錄);通過(guò)子查詢的結(jié)果,一次插入多個(gè)元組(即多條記錄)。語(yǔ)法格式為(如果列數(shù)不多,且表結(jié)構(gòu)固定,可以采用第2種格式):

Insertinto<表名>(<列名1>[,<列名2,…>])Values(<值1>[,<值2,…>]);Insertinto<表名>Values(<值1>[,<值2,…>]);上述語(yǔ)句的功能是將指定的元組插入到指定的表中。其中,列名與順序無(wú)關(guān),但后面的值必須與列名相對(duì)應(yīng)。

3.4.1插入數(shù)據(jù)(Insertinto)這里有3點(diǎn)需要說(shuō)明:(1)對(duì)于有外鍵的表(也稱子表),如果要插入外鍵所對(duì)應(yīng)的屬性值,該值必須先在參照表中,以主鍵值的形式插入。

(2)對(duì)于有默認(rèn)值列名,如果沒(méi)有出現(xiàn)在Insert語(yǔ)句中,則系統(tǒng)自動(dòng)賦予定義時(shí)的默認(rèn)值。

(3)其它沒(méi)有出現(xiàn)在Insert語(yǔ)句中的屬性列,新元組將在這些列上去空值(null),但是,在表定義時(shí)有“notnull”的屬性列,必須出現(xiàn)在Insert語(yǔ)句中,否則出錯(cuò)。

3.4.1插入數(shù)據(jù)(Insertinto)例3-4針對(duì)例3.2中的關(guān)系模式,插入記錄:(1)學(xué)生元組:學(xué)號(hào)“18071188”,姓名“張三”,性別“F”,出生日期“2001-01-08”;InsertintoS(sNo,SName,sex,dtBirthDate)Values('18071188','張三','F','2001-01-08');(2)教師元組:教師編號(hào)“T01”,姓名“高山”,職稱“教授”;

InsertintoT(tNo,tName,Title)values('T01','高山','教授');

3.4.1插入數(shù)據(jù)(Insertinto)例3-4針對(duì)例3.2中的關(guān)系模式,插入記錄:

InsertintoC(cNo,cName,tNo)values('C01','數(shù)據(jù)庫(kù)','T01');/*教師編號(hào)T01必須在T表中*/

InsertintoC(cNo,cName)values('C02','C語(yǔ)言');/*暫時(shí)還沒(méi)有安排任課教師*/(3)2門(mén)課程:一門(mén)是“C01,數(shù)據(jù)庫(kù)”,高山老師教,一門(mén)是“C02,C語(yǔ)言”;(4)插入2條選課記錄,注意賦值時(shí),外鍵sNo、cNo的值必須來(lái)自各自的父表:

InsertintoSC(sNo,cNo,Score)Values('18071188','C01',90);InsertintoSC(sNo,cNo,Score)Values('18071188','C02',120);/*注意:成績(jī)不滿足觸發(fā)器條件*/

*2.通過(guò)子查詢的結(jié)果,一次性插入多個(gè)元組

3.4.1插入數(shù)據(jù)(Insertinto)語(yǔ)法格式為:

Insertinto<表名>(<列名1>[,<列名2,…>])Select子查詢;其中,子查詢的屬性值必須與前面的列名相對(duì)應(yīng)。需要提醒的是,該語(yǔ)句在處理數(shù)據(jù)分析時(shí),非常實(shí)用,但在實(shí)際的應(yīng)用程序開(kāi)發(fā)中,千萬(wàn)慎用,因?yàn)樗菀讓?dǎo)致鎖表。有關(guān)鎖表的技術(shù),將在7.3節(jié)中介紹。

例如,假若學(xué)生表“S”中,計(jì)算機(jī)專業(yè)的學(xué)生有2人,他們都要選修編號(hào)為“C01”的“數(shù)據(jù)庫(kù)”這門(mén)課,則可以通過(guò)下面的語(yǔ)句,一次性插入到學(xué)生選課表“SC”中:(先插入計(jì)算機(jī)專業(yè)的2個(gè)學(xué)生)

3.4.1插入數(shù)據(jù)(Insertinto)

InsertintoS(sNo,SName,sex,dtBirthDate,profess)Values('18071181','劉燕','F','2001-06-08','計(jì)算機(jī)'); InsertintoS(sNo,SName,sex,dtBirthDate,profess)Values('18071182','王強(qiáng)','M','2001-02-28','計(jì)算機(jī)'); InsertintoSC(sNo,cNo)SelectsNo,'C01'ascNoFromSwhereprofess='計(jì)算機(jī)';其中,課程編號(hào)為“C01”的課程記錄,必須先在課程表中。上機(jī)練習(xí)時(shí),為了查看這條語(yǔ)句的執(zhí)行效果,可以將沒(méi)有選修“C02”課程的所有學(xué)生,一次性全部插入到SC表中,其中'C02'為常數(shù)列:

3.4.1插入數(shù)據(jù)(Insertinto)

InsertintoSC(sNo,cNo)SelectsNo,'C02'ascNoFromSwheresNonotin(SelectdistinctsNoFromSC);其中,課程編號(hào)為“C02”的課程記錄,必須先在課程表中。

SQL修改數(shù)據(jù)記錄的語(yǔ)句格式為:

3.4.2修改數(shù)據(jù)(Update)

Update<表名>Set<列名1>=<值1>[,<列名2>=<值2>,…][Where條件表達(dá)式];該語(yǔ)句的功能是:在指定的表中,將滿足where條件表達(dá)式的所有元組,用賦予的值替換對(duì)應(yīng)的列名值。如果省略where條件表達(dá)式,則將修改所有元組對(duì)應(yīng)的列名值。(不帶where的,千萬(wàn)慎用?。。。?/p>

另外,在where條件表達(dá)式中,可以嵌套子查詢。例3-5針對(duì)例3-2中的關(guān)系模式,修改記錄數(shù)據(jù):

3.4.2修改數(shù)據(jù)(Update)(1)將學(xué)號(hào)為“18071188”的學(xué)生姓名改為“張山”,出生日期改為“2001-03-18”:

UpdateSsetsName='張山',dtBirthDate='2001-03-18'wheresNo='18071188';(2)將選課表“SC”中,課程編號(hào)為“C01”的考試成績(jī),全部修改為0:UpdateSCsetScore=0WherecNo='C01'; UpdateSCsetScore=-8WherecNo='C01';/*若將成績(jī)修改為負(fù)數(shù),則違反check規(guī)則*/

ErrorCode:3819.Checkconstraint'sc_chk_1'isviolated.例3-5針對(duì)例3-2中的關(guān)系模式,修改記錄數(shù)據(jù):

3.4.2修改數(shù)據(jù)(Update)(3)將選課表“SC”中,課程編號(hào)為“C01”、不及格的女生的考試成績(jī),提高5%:

UpdateSCsetScore=Score*1.05WherecNo='C01'andScore<60 andsNoin(SelectsNofromSwhereSex='F');

SQL刪除數(shù)據(jù)記錄的語(yǔ)句格式為:

3.4.3刪除數(shù)據(jù)(Delete)

DeleteFrom<表名>[Where條件表達(dá)式];該語(yǔ)句的功能是:在指定的表中,將滿足where條件表達(dá)式的所有元組全部刪除。如果省略where條件表達(dá)式,則將指定表中的記錄全部刪除。(不帶where條件表達(dá)式的刪除語(yǔ)句,千萬(wàn)慎用?。。。?/p>

另外,在where條件表達(dá)式中,可以嵌套子查詢。例3-6針對(duì)例3-2中的關(guān)系模式,刪除記錄:

3.4.3刪除數(shù)據(jù)(Delete)

DeleteFromSwheresNo='18071188';(1)將學(xué)號(hào)為“18071188”的學(xué)生記錄刪除:(2)將選課表“SC”中,課程編號(hào)為“C01”的記錄,全部刪除:

DeleteFromSCWherecNo='C01';(3)將選課表“SC”中,課程編號(hào)為“C01”、成績(jī)10分以下的男生記錄,全部刪除:

DeleteFromSCWherecNo='C01'andScore<10

andsNoin(SelectsNofromSwhereSex='M');3.5SQL數(shù)據(jù)查詢(Select)本章主要內(nèi)容:(1)SQL數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)、SQL的主要功能、SQL語(yǔ)法基礎(chǔ)(2)SQL的常用數(shù)據(jù)類型和常用函數(shù)(3)SQL定義功能:創(chuàng)建(Create)、修改(Alter)、刪除(Drop)(4)數(shù)據(jù)更新:插入(Insert)、修改(Update)、刪除(Delete)(5)數(shù)據(jù)查詢:Select<列名>From<表名>Where<條件表達(dá)式>3.5

SQL數(shù)據(jù)查詢數(shù)據(jù)查詢是關(guān)系運(yùn)算理論在SQL中的具體實(shí)現(xiàn)。Select語(yǔ)句屬于非過(guò)程化語(yǔ)句,即只需要告訴SQL要什么數(shù)據(jù),不需要知道如何獲取這些數(shù)據(jù)。其一般格式為:

Select[All|Distinct]<列名或列名表達(dá)式1>[,<列名或列名表達(dá)式2,…>]/*默認(rèn)All*/From<表名或視圖名1>[As<表的別名1>,<表名或視圖名2[As<表的別名1>],…>][Where<條件表達(dá)式>][Groupby<列名>[having<聚合條件表達(dá)式1>]]/*分組聚合*/[Orderby<列名1>[Asc|Desc][,<列名2>[Asc|Desc]]]/*排序:默認(rèn)Asc(升序)*/本章附件“insertSQL.txt”收錄了部分?jǐn)?shù)據(jù)的Insert語(yǔ)句,在查詢前,先執(zhí)行這些語(yǔ)句。單表查詢是指僅涉及一個(gè)數(shù)據(jù)表的查詢,其語(yǔ)法格式為:3.5.1單表查詢:Select列名from表名where條件表達(dá)式

Select<列名或列名表達(dá)式1[as<列別名1>]>[,<列名或列名表達(dá)式2,…>[as<列別名2>]]From<表名[as<表別名>]>[Where條件表達(dá)式][Orderby列名[asc|desc]];

1.查詢指定表中的若干列(選列),具體有下面幾種情況3.5.1單表查詢:Select列名from表名where條件表達(dá)式(1)查詢指定列:可以指定多列,各列之間用逗號(hào)“,”分開(kāi)。

(2)查詢?nèi)苛校河眯翘?hào)“*”顯示所有列。(3)列名用別名顯示:格式為“列名as‘別名’”,其中“as”可省略。(4)對(duì)特殊的屬性值,可用case語(yǔ)句處理,格式為:

Casewhen列名=值1then'顯示1'when列名=值2then'顯示2'…else'其它'endas'別名'(5)調(diào)用SQL中的函數(shù)或運(yùn)算符,將查詢出來(lái)的屬性列經(jīng)過(guò)某種計(jì)算后列出的結(jié)果。例3-7針對(duì)例3-2中的關(guān)系,查詢記錄:3.5.1單表查詢:Select列名from表名where條件表達(dá)式

SelectsNo,sName,SexfromS;(1)查詢所有學(xué)生的學(xué)號(hào)、姓名、性別,結(jié)果如圖3-13所示:3.5.1單表查詢:Select列名from表名where條件表達(dá)式

SelectsNo'學(xué)號(hào)',sNameas'姓名',

Case

whenSex='M'then'男'

whenSex='F'then'女'

else''

endas'性別'fromS;(2)上面查詢顯示的列標(biāo)題、性別為英文,下面用別名顯示列標(biāo)題,性別利用Case語(yǔ)句轉(zhuǎn)為中文,其中用“as”定義別名時(shí),“as”可有可無(wú)。(3)若表的列名比較多,或不知道具體列名,可用星號(hào)“*”查看所有列:

Select*FromSWhereSex='M';/*查看男生的所有屬性值*/3.5.1單表查詢:Select列名from表名where條件表達(dá)式SelectsNo,sName,date_format(dtBirthDate,'%Y-%m-%d')'出生日期',year(now())-year(dtBirthDate)'年齡'fromSWheredate_format(dtBirthDate,'%Y-%m-%d')>'2000-01-01';/*大寫(xiě)的Y表示4位年份,小寫(xiě)的y表示2位年份*/(4)函數(shù)now()返回系統(tǒng)當(dāng)前日期,Year(d)返回日期d的年份,通過(guò)調(diào)用這2個(gè)函數(shù),查看2000年出生以后所有學(xué)生的年齡,結(jié)果如圖3-15所示。其中,函數(shù)date_format(d,format)將日期d按指定格式format轉(zhuǎn)為字符串。3.5.1單表查詢:Select列名from表名where條件表達(dá)式Selectleft(sNo,6)fromSwheresNo>'01'; Selectdistinctleft(sNo,6)fromSwheresNo>'01';(5)在學(xué)生表中,分別用distinct和不用distinct查詢學(xué)號(hào)前6位的取值,體會(huì)兩者的區(qū)別3.5.1單表查詢:Select列名from表名where條件表達(dá)式

2.從表中選擇若干元組(選行):帶where組合條件的查詢序號(hào)查詢條件運(yùn)算符、謂詞1比較運(yùn)算符<,<=,=,>,>=,<>,!=2確定范圍Between…and…,Notbetween…and…3確定集合In,Notin4字符匹配Like,%(與零個(gè)或多個(gè)字符匹配),_(與單個(gè)字符匹配)5空值判斷Isnull,Notisnull,6邏輯運(yùn)算符And,or,Not例3-8查詢:年齡在21歲以下的男同學(xué)信息,按出生日期排降序:3.5.1單表查詢:Select列名from表名where條件表達(dá)式

SelectsNo,sName,sex,dtBirthDatefromSWheresex='M'andyear(now())-year(dtBirthDate)<21OrderbydtBirthDate

Desc;如果查詢條件中,沒(méi)有主鍵、沒(méi)有索引,DBMS執(zhí)行該查詢的一種可能的方案是:對(duì)S表進(jìn)行全表掃描,取出元組,一個(gè)一個(gè)進(jìn)行核對(duì),輸出符合條件的元組。

如果查詢條件中,含有主鍵或別的索引,則DBMS會(huì)從主鍵或別的索引文件中查找滿足條件的記錄,再通過(guò)記錄指針(即存儲(chǔ)地址)讀出對(duì)應(yīng)元組的內(nèi)容并返回。例3-9查詢:年齡在18~22歲之間的所有同學(xué)的學(xué)號(hào)、姓名、性別、出生。3.5.1單表查詢:Select列名from表名where條件表達(dá)式

SelectsNo,sName,sex,dtBirthDatefromSWhereyear(now())-year(dtBirthDate)Between18and22;例3-10查詢:計(jì)算機(jī)專業(yè)、或數(shù)學(xué)專業(yè),姓“張”的學(xué)生,按姓名排升序:

Select*fromSwhereprofessin('計(jì)算機(jī)專業(yè)','數(shù)學(xué)專業(yè)')andsNamelike'張%'OrderbysName;例3-11查詢:姓名中,第2個(gè)字為“小”的學(xué)生,且不在計(jì)算機(jī)專業(yè)、也不在數(shù)學(xué)專業(yè):3.5.1單表查詢:Select列名from表名where條件表達(dá)式

Select*fromSwhereprofessnotin('計(jì)算機(jī)專業(yè)','數(shù)學(xué)專業(yè)')andsNamelike'_小%';例3-12查詢:專業(yè)為空的學(xué)生:

Select*fromSwhereprofessisnull;/*專業(yè)為空*/Select*fromSwhereprofessnotisnull;/*專業(yè)非空*/為便于統(tǒng)計(jì)匯總,SQL提供了5個(gè)聚合函數(shù),它們是:3.5.2聚合查詢

Count(*):

對(duì)元組個(gè)數(shù)進(jìn)行計(jì)數(shù) Count([All|Distinct]<列名>):

對(duì)元組個(gè)數(shù)進(jìn)行計(jì)數(shù) Sum([All|Distinct]<列名>):

按列求和(該列必須為數(shù)值型)

Avg([All|Distinct]<列名>):

按列求平均(該列必須為數(shù)值型) Max([All|Distinct]<列名>):

按列求最大值 Min([All|Distinct]<列名>):

按列求最小值如果列名前,帶參數(shù)Distinct,則計(jì)算時(shí)會(huì)取消指定列中的重復(fù)記錄數(shù),即重復(fù)元組中,只按一個(gè)元組計(jì)算。如果沒(méi)帶參數(shù)Distinct(系統(tǒng)默認(rèn)為All),則不取消重復(fù)記錄數(shù)。例3-13統(tǒng)計(jì)男同學(xué)的人數(shù),下面兩條語(yǔ)句,效果是一樣的:3.5.2聚合查詢Selectcount(*)fromSwhereSex='M'; Selectcount(sNo)fromSwhereSex='M';例3-14統(tǒng)計(jì)選修了課程的女生人數(shù),下面兩條語(yǔ)句,效果是不一樣的。當(dāng)一個(gè)人選修了多門(mén)課時(shí),第2條語(yǔ)句,消除了重復(fù)學(xué)號(hào):

Selectcount(*)fromSCwheresNoin(SelectsNofromSwhereSex='F');/*in后面為子查詢*/ Selectcount(DistinctsNo)fromSCwheresNo

in(SelectsNofromSwhereSex='F');例3-15求選修課程表中,課程編號(hào)為“C01”的總成績(jī)、平均成績(jī)、最高分、最低分:3.5.2聚合查詢Selectsum(score),Avg(score),Max(score),Min(score)fromSCwherecNo='C01';

GroupBy子句可以將查詢的結(jié)果,按一列或多列的值分組,值相等的分為一組,即每一組都有一個(gè)聚合函數(shù)值。它可以細(xì)化聚合函數(shù)的作用對(duì)象,并結(jié)合Having條件表達(dá)式,滿足用戶更多個(gè)性化的要求。3.5.3對(duì)聚合結(jié)果分組(Groupby)如果在一條Select語(yǔ)句中,同時(shí)出現(xiàn)了Where子句和Having子句,要注意它們的區(qū)別,它

溫馨提示

  • 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)論