




版權(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ù)原理及應(yīng)用第4章 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL7/18/20221SQL語(yǔ)言簡(jiǎn)介SQL的數(shù)據(jù)定義SQL數(shù)據(jù)查詢數(shù)據(jù)更新視圖SQL數(shù)據(jù)控制本章內(nèi)容7/18/202224.1 SQL語(yǔ)言概述 SQL的發(fā)展及其特點(diǎn)SQL的基本概念SQL的功能7/18/20223 SQL是結(jié)構(gòu)化查詢語(yǔ)言Structured QueryLanguage 的縮寫,它是數(shù)據(jù)庫(kù)的核心語(yǔ)言。4.1.1 SQL的發(fā)展及其特點(diǎn)7/18/20224IBM的Boyce在1974年首先提出了SQL;1979年ORACLE公司發(fā)表第一個(gè)基于SQL的商業(yè)化RDBMS產(chǎn)品;隨后,SQL在IBMSystem R上的關(guān)系數(shù)據(jù)庫(kù)SQL/DS得到了
2、實(shí)現(xiàn);發(fā)展史:7/18/202251986年美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)(ANSI)公布了第一個(gè)SQL標(biāo)準(zhǔn),即SQL86;國(guó)際標(biāo)準(zhǔn)化組織(ISO)于1987年正式采納它為國(guó)際標(biāo)準(zhǔn)。1989年ISO提出了完整特性的SQL,并稱之為SQL89,后來(lái)又發(fā)展的SQL92(也稱為SQL2)。發(fā)展史(續(xù)):7/18/20226特點(diǎn):1.功能一體化 SQL包括數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)操縱和數(shù)據(jù)控制的功能。7/18/202272.語(yǔ)言簡(jiǎn)潔,易學(xué)易用 只用7個(gè)動(dòng)詞(select , drop, alter, create, insert, update, delete)就實(shí)現(xiàn)了SQL的核心功能。7/18/20228SQL使
3、用的動(dòng)詞SQL功能操作符(所用動(dòng)詞)數(shù)據(jù)定義CREATE,ALTER,DROP數(shù)據(jù)查詢SELECT數(shù)據(jù)操縱INSERT,UPDATE,DELETE數(shù)據(jù)控制GRANT,REVOKE7/18/202297/18/2022103.高度非過(guò)程化 它沒有必要告訴計(jì)算機(jī)“如何”去做,而只需要描述清楚用戶“要做什么”,系統(tǒng)會(huì)自動(dòng)完成。 7/18/2022114.語(yǔ)法結(jié)構(gòu)統(tǒng)一SQL語(yǔ)言有兩種使用方式:自含式和嵌入式。自含式:一般DBMS都提供聯(lián)機(jī)交互工具,用戶可直接鍵入SQL命令對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作由DBMS來(lái)進(jìn)行解釋。嵌入式:能將SQL語(yǔ)句嵌入到高級(jí)語(yǔ)言(宿主語(yǔ)言),使應(yīng)用程序充分利用SQL訪問數(shù)據(jù)庫(kù)的能力、宿
4、主語(yǔ)言的過(guò)程處理能力,一般需要預(yù)編譯,將嵌入的SQL語(yǔ)句轉(zhuǎn)化為宿主語(yǔ)言編譯器能處理的語(yǔ)句。 7/18/2022125.面向集合的操作方式 SQL所作用的對(duì)象、作用后所得的結(jié)果都可以是元組的集合。 7/18/2022134.1.2 SQL的基本概念1SQL語(yǔ)言的組成(1)數(shù)據(jù)定義語(yǔ)言(DDL):用于實(shí)現(xiàn)SQL的數(shù)據(jù)定義功能。(2)數(shù)據(jù)操縱語(yǔ)言(DML):用于實(shí)現(xiàn)SQL的數(shù)據(jù)操縱功能。(3)數(shù)據(jù)控制語(yǔ)言(DCL):用于實(shí)現(xiàn)SQL的數(shù)據(jù)控制功能。7/18/2022144.1.2 SQL的基本概念2. SQL支持三級(jí)模式結(jié)構(gòu)一個(gè)SQL數(shù)據(jù)庫(kù)的總體邏輯結(jié)構(gòu)是基本表(Table)的集合,對(duì)應(yīng)于概念模式SQ
5、L數(shù)據(jù)庫(kù)的底層存儲(chǔ)結(jié)構(gòu)采用文件,一個(gè)或幾個(gè)表對(duì)應(yīng)一個(gè)存儲(chǔ)文件,以及索引文件。對(duì)應(yīng)內(nèi)模式用戶所見的數(shù)據(jù)結(jié)構(gòu)是視圖(View),用戶可直接操作的表,可為視圖或部分基本表。對(duì)應(yīng)外模式7/18/2022157/18/202216兩個(gè)基本概念:基本表和視圖?;颈恚˙ASE TABLE):是獨(dú)立存在的表,不是由其它的表導(dǎo)出的表。一個(gè)關(guān)系對(duì)應(yīng)一個(gè)基本表,一個(gè)或多個(gè)基本表對(duì)應(yīng)一個(gè)存儲(chǔ)文件。視圖(VIEW):是一個(gè)虛擬的表,是從一個(gè)或幾個(gè)基本表導(dǎo)出的表。它本身不獨(dú)立存在于數(shù)據(jù)庫(kù)中,數(shù)據(jù)庫(kù)中只存放視圖的定義而不存放視圖對(duì)應(yīng)的數(shù)據(jù),這些數(shù)據(jù)仍存放在導(dǎo)出視圖的基本表中。當(dāng)基本表中的數(shù)據(jù)發(fā)生變化時(shí),從視圖中查詢出來(lái)的
6、數(shù)據(jù)也隨之改變。7/18/202217例如:學(xué)生數(shù)據(jù)庫(kù)中有學(xué)生基本情況表STUDENT(SNO,SNAME,SSEX,SAGE,SDEPT),此表為基本表,對(duì)應(yīng)一個(gè)存儲(chǔ)文件??梢栽谄浠A(chǔ)上定義一個(gè)男生基本情況表STUDENT_MALE(SNO,SNAME,SAGE,SDEPT),它是從STUDENT中選擇SSEX=男的各個(gè)行,然后在SNO,SNAME,SAGE,SDEPT上投影得到的。在數(shù)據(jù)庫(kù)中只存有STUDENT_MALE的定義,而STUDENT_MALE的記錄不重復(fù)存儲(chǔ)。在用戶看來(lái),視圖是通過(guò)不同路徑去看一個(gè)實(shí)際表,就象一個(gè)窗口一樣,透過(guò)視圖可以看到數(shù)據(jù)庫(kù)中自己感興趣的內(nèi)容。7/18/20
7、22184.1.3 SQL的功能數(shù)據(jù)定義(DEFINITION)數(shù)據(jù)查詢(QUERY)數(shù)據(jù)操縱(MANIPULATION)數(shù)據(jù)控制(CONTROL)7/18/2022194.2 SQL的數(shù)據(jù)定義SQL語(yǔ)言使用數(shù)據(jù)定義語(yǔ)言(DATA DEFINITION LANGUAGE,簡(jiǎn)稱DDL)實(shí)現(xiàn)其數(shù)據(jù)定義功能。 SQL的數(shù)據(jù)定義功能包括對(duì)數(shù)據(jù)庫(kù)、基本表、視圖和索引的定義,即對(duì)數(shù)據(jù)庫(kù)和表的創(chuàng)建、刪除和修改,以及對(duì)視圖和索引的創(chuàng)建和刪除 。7/18/202220SQL的數(shù)據(jù)定義 操作對(duì)象操作方式創(chuàng)建刪除修改表Create tableDrop tableAlter table視圖Create viewDro
8、p view索引Create indexDrop index數(shù)據(jù)庫(kù)Create databaseDrop databaseAlter database7/18/2022214.2.1 創(chuàng)建與刪除數(shù)據(jù)庫(kù)要對(duì)數(shù)據(jù)庫(kù)模式進(jìn)行操作,首先要建立相應(yīng)的數(shù)據(jù)庫(kù),并把它作為一個(gè)文件存放在磁盤上?,F(xiàn)代的數(shù)據(jù)庫(kù)管理系統(tǒng)都提供圖形用戶界面,可以通過(guò)點(diǎn)擊菜單完成。7/18/202222使用SQL語(yǔ)句建立數(shù)據(jù)庫(kù)的一般格式為:CREATE DATABASE 數(shù)據(jù)庫(kù)名參數(shù)我們僅要求掌握參數(shù)省略的情況,即CREATE DATABASE 數(shù)據(jù)庫(kù)名 創(chuàng)建數(shù)據(jù)庫(kù)7/18/202223刪除數(shù)據(jù)庫(kù) 如果所建立的數(shù)據(jù)庫(kù)不再需要時(shí),可以對(duì)
9、此數(shù)據(jù)庫(kù)進(jìn)行刪除,刪除數(shù)據(jù)庫(kù)的一般格式為: DROP DATABASE 數(shù)據(jù)庫(kù)名7/18/202224 例4-1 創(chuàng)建一個(gè)名稱為“學(xué)生管理”的學(xué)生信息管理數(shù)據(jù)庫(kù) SQL語(yǔ)句為: CREATE DATABASE 學(xué)生管理 7/18/202225 提示: 本章中所舉例子均為基于學(xué)生管理數(shù)據(jù)庫(kù),假設(shè)“學(xué)生管理”為管理學(xué)生日?;顒?dòng)有關(guān)信息的數(shù)據(jù)庫(kù) 。7/18/2022264.2.2 創(chuàng)建、刪除和修改基本表 基本表是數(shù)據(jù)庫(kù)中存儲(chǔ)數(shù)據(jù)的最基本的對(duì)象,是構(gòu)成數(shù)據(jù)庫(kù)的一個(gè)重要組成部分。建立數(shù)據(jù)庫(kù)后可以在其中創(chuàng)建基本表。 7/18/2022271. 創(chuàng)建基本表其一般格式為: CREATE TABLE (列級(jí)完整
10、性約束條件 ,列級(jí)完整性約束條件 ,); 7/18/202228常用數(shù)據(jù)類型數(shù)據(jù)類型說(shuō)明CHAR(n)長(zhǎng)度為n的定長(zhǎng)字符串VARCHAR(n)最大長(zhǎng)度為n的變長(zhǎng)字符串INTEGER全字長(zhǎng)整數(shù)SMALLINT半字長(zhǎng)整數(shù)NUMERIC(p, d)由p位數(shù)字(不包括符號(hào)和小數(shù)點(diǎn))組成的定點(diǎn)數(shù),小數(shù)點(diǎn)后面有d位數(shù)字REAL浮點(diǎn)數(shù)DOUBLE RECISION雙精度浮點(diǎn)數(shù)FLOAT(n)精度至少為n位數(shù)字的浮點(diǎn)數(shù)DATE日期,形如YYYY-MM-DD(年-月-日)TIME時(shí)間,形如HH:MM:SS(時(shí):分:秒)7/18/202229 字符串使用一對(duì)單引號(hào) 來(lái)表示,例如數(shù)據(jù)庫(kù)、表等。 不同的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)
11、所支持的數(shù)據(jù)類型不完全相同。提示:7/18/202230幾點(diǎn)說(shuō)明:列級(jí)完整性約束僅作用在該列上;表級(jí)完整性約束作用在整個(gè)表上;完整性約束主要有五類:主關(guān)鍵字約束(PRIMARY KEY)、外關(guān)鍵字約束(FOREIGN KEY)、惟一性約束(UNIQUE)、檢查約束(CHECK)和缺省約束(DEFAULT)。7/18/202231如果某一列作為表的關(guān)鍵字段,則該列應(yīng)定義為非空(NOT NULL);省略的情況下表示允許為空。(了解)使用UNIQUE定義列取值唯一。(了解)7/18/202232主關(guān)鍵字(PRIMARY KEY)約束 主關(guān)鍵字約束指定表的一列或幾列的組合的值在表中具有惟一性,即能惟一
12、的確定一行記錄。每個(gè)表中主關(guān)鍵字是惟一的,不允許指定主關(guān)鍵字列有NULL屬性。 PRIMARY KEY用于定義表約束時(shí),即將某些列的組合定義為主鍵,其語(yǔ)法格式如下:CONSTRAINT PRIMARY KEY ()7/18/202233例 4-2 在學(xué)生管理數(shù)據(jù)庫(kù)中建立院系表D,它有三個(gè)屬性:院系編號(hào)(Dno)、院系名稱(Dname)、聯(lián)系方式(Dtel),其中院系編號(hào)為該表的主鍵,院系名稱不能為空。7/18/202234 CREATE TABLE D (Dno CHAR(10) NOT NULL, Dname CHAR(20) NOT NULL, Dtel CHAR(18), PRIMARY
13、 KEY(Dno); /*主關(guān)鍵字約束*/ 執(zhí)行該語(yǔ)句后在學(xué)生管理數(shù)據(jù)庫(kù)中建立一個(gè)院系表D,并且將該表的有關(guān)定義和約束條件存放在數(shù)據(jù)字典中。 7/18/202235外關(guān)鍵字(FOREIGN KEY)約束外關(guān)鍵字約束定義了表之間的關(guān)系。當(dāng)一個(gè)表中的一列或多個(gè)列的組合和其它表中的主關(guān)鍵字定義相同時(shí),就可以將這些列或列的組合定義為外關(guān)鍵字。7/18/202236FOREIGN KEY既可用于列約束,也可用于表約束,其語(yǔ)法格式為:CONSTRAINT FOREIGN KEY REFERENCES ()FOREIGN KEY約束7/18/202237惟一性(UNIQUE)約束惟一性約束指定一列或幾列的組
14、合的值具有惟一性,定義了惟一性約束的那些列稱為惟一鍵,系統(tǒng)自動(dòng)為惟一鍵建立惟一索引,以防止在列中輸入重復(fù)的值。惟一性約束指定的列可以有NULL屬性。由于主關(guān)鍵字值是有惟一性的,因此主關(guān)鍵字列不能再設(shè)定惟一性約束。7/18/202238例4-3在學(xué)生管理數(shù)據(jù)庫(kù)中建立學(xué)生表S,它有六個(gè)屬性:學(xué)號(hào)(Sno)、姓名(Sname)、性別(Ssex)、年齡(Sage)、所在系(Sdept)、身份證號(hào)(Sid)。其中學(xué)號(hào)為該表的主鍵,所在系是該表的外關(guān)鍵字,學(xué)生身份證號(hào)是惟一的。7/18/202239CREATE TABLE S(Sno CHAR(10) NOT NULL, Sname CHAR(8) CO
15、NSTRAINT Sname_CONS NOT NULL, Ssex CHAR(2), Sage INT, Sdept CHAR(10) , Sid CHAR(18) UNIQUE, /*惟一性約束*/ PRIMARY KEY(Sno), /*主關(guān)鍵字約束*/FOREIGN KEY(Sdept) REFERENCES D (Dno); /*外關(guān)鍵字約束*/7/18/202240二者類似,都是通過(guò)建立唯一索引來(lái)保證基本表在主鍵列取值的唯一性,但它們之間也存在著很大的區(qū)別:在一個(gè)基本表中只能定義一個(gè)PRIMARY KEY約束,但可定義多個(gè)UNIQUE約束;對(duì)于指定為PRIMARY KEY的一個(gè)列或
16、多個(gè)列的組合,其中任何一個(gè)列都不能出現(xiàn)空值,而對(duì)于UNIQUE所約束的唯一鍵,則允許為空。主關(guān)鍵字約束與唯一性約束區(qū)別7/18/202241不能為同一個(gè)列或一組列既定義UNIQUE約束,又定義PRIMARY KEY約束。注意:7/18/202242檢查(CHECK)約束檢查約束對(duì)輸入列或整個(gè)表中的值設(shè)置檢查條件,以限制輸入值,保證數(shù)據(jù)庫(kù)的數(shù)據(jù)完整性。7/18/202243CHECK約束CHECK既可用于列約束,也可用于表約束。其語(yǔ)法格式為:CONSTRAINT CHECK ()7/18/202244例4-4在學(xué)生管理數(shù)據(jù)庫(kù)中建立課程表C,它有四個(gè)屬性:課程編號(hào)(Cno)、課程名稱(Cname)
17、、學(xué)分(Ccredit)、任課教師(Cteacher),其中課程號(hào)為該表的主鍵,學(xué)分取值必須大于等于0.5。7/18/202245CREATE TABLE C(Cno CHAR(5) NOT NULL, Cname CHAR(30), Ccredit REAL, Cteacher CHAR(10), PRIMARY KEY(Cno), /*主關(guān)鍵字約束*/ CONSTRAINT Ccredit_CHK CHECK(Ccredit=0.5); /*檢查約束*/7/18/202246缺省約束缺省約束通過(guò)定義列的缺省值或使用數(shù)據(jù)庫(kù)的缺省值對(duì)象綁定表的列,來(lái)指定列的缺省值,若某列設(shè)置有缺省值,則當(dāng)該字
18、段未被輸入數(shù)據(jù)時(shí),以該缺省值自動(dòng)填入該字段。注:此操作在Access中可通過(guò)設(shè)置字段屬性完成。7/18/202247例4-5建立學(xué)生選課表SC,它有三個(gè)屬性:學(xué)號(hào)(Sno)、課程編號(hào)(Cno)、成績(jī)(Score),其中學(xué)號(hào)和課程編號(hào)的組合作為主關(guān)鍵字,成績(jī)的缺省值為0。7/18/202248CREATE TABLE SC(Sno CHAR(10) NOT NULL, Cno CHAR(5) NOT NULL, Score REAL DEFAULT 0, /*缺省約束*/ PRIMARY KEY(Sno,Cno), /*主關(guān)鍵字約束*/ FOREIGN KEY(Sno) REFERENCES S
19、 (Sno), /*外關(guān)鍵字約束*/ FOREIGN KEY(Cno) REFERENCES C (Cno); /*外關(guān)鍵字約束*/7/18/2022492. 修改基本表一般格式為:ALTER TABLE ADD 完整性約束DROP ALTER;7/18/202250ALTER TABLE語(yǔ)句的幾點(diǎn)說(shuō)明:ADD子句用于增加新列和新的完整性約束條件。DROP子句用于刪除指定的完整性約束條件。(了解)ALTER子句用于修改原有的列名和數(shù)據(jù)類型。7/18/202251例4-6向系院表D中增加新的屬性列:系主任(Dhead),并為其設(shè)置惟一性約束。 ALTER TABLE D ADD Dhead CH
20、AR(10) CONSTRAINT Dhead_CONS UNIQUE;7/18/202252例4-7將院系表D中系主任列的惟一性約束條件刪除。 ALTER TABLE D DROP CONSTRAINT Dhead_CONS; 7/18/202253 在這個(gè)例子中刪除的僅僅是某列的約束條件,如果要?jiǎng)h除基本表中的某列,則其句法如下: ALTER TABLE DROP CASCADE| RESTRICT;7/18/202254CASCADE| RESTRICT為列的刪除方式。CASCADE方式表示在基本表中刪除列時(shí),所有引用該列的視圖或完整性約束均一起自動(dòng)刪除;RESTRICT方式表示只有當(dāng)沒有
21、視圖或完整性約束時(shí)該列才能被刪除,否則拒絕刪除操作。7/18/202255例. 將學(xué)生表S中的年齡Sage列刪除,并將該列的所有視圖和約束一起刪除。 ALTER TABLE S DROP Sage CASCADE; 7/18/202256例4-8將學(xué)生表S中Sage的數(shù)據(jù)類型改成短整型。ALTER TABLE S ALTER COLUMN Sage SMALLINT;7/18/2022573.刪除基本表一般格式為:DROP TABLE CASCADE| RESTRICT;注意刪除基本表后,基本表的定義、表中數(shù)據(jù)和在此表上建立的索引都將自動(dòng)被刪除、但由此表導(dǎo)出的視圖定義仍然保留,但已無(wú)法使用。7
22、/18/202258例4-9刪除學(xué)生表S。 DROP TABLE S;7/18/2022594.2.3 創(chuàng)建和刪除索引索引是根據(jù)數(shù)據(jù)庫(kù)表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu)。索引有如下作用1. 加快查詢速度;2. 保證行的唯一性。7/18/202260索引的分類1. 按照索引記錄的存放位置可分為聚集索引與非聚集索引聚集索引:按照索引的字段排列記錄,并且依照排好的順序?qū)⒂涗洿鎯?chǔ)在表中。非聚集索引:按照索引的字段排列記錄,但是排列的結(jié)果并不會(huì)存儲(chǔ)在表中,而是另外存儲(chǔ)。2. 復(fù)合索引的概念復(fù)合索引是將兩個(gè)字段或多個(gè)字段組合起來(lái)建立的索引,而單獨(dú)的字段允許有重復(fù)的值。7/18/2022613. 唯一索引
23、的概念唯一索引表示表中每一個(gè)索引值只對(duì)應(yīng)唯一的數(shù)據(jù)記錄,這與表的PRIMARY KEY的特性類似,因此唯一性索引常用于PRIMARY KEY的字段上,以區(qū)別每一筆記錄。當(dāng)表中有被設(shè)置為UNIQUE的字段時(shí),SQL SERVER會(huì)自動(dòng)建立一個(gè)非聚集的唯一性索引。而當(dāng)表中有PRIMARY KEY的字段時(shí),SQL SERVER會(huì)在PRIMARY KEY字段建立一個(gè)聚集索引。7/18/2022621. 創(chuàng)建索引一般格式為:CREATE UNIQUE CLUSTER INDEX ON ( , );7/18/202263UNIQUE指明索引是否為唯一性索引。如果是唯一性索引,則該索引的每一個(gè)索引值不能相同
24、。CLUSTER項(xiàng)表示該索引為聚簇索引。聚簇索引是指索引項(xiàng)的順序與基本表中記錄的物理順序一致的索引。一般在查詢頻率最高的列上建立聚簇索引,以提高查詢效率說(shuō)明:7/18/202264說(shuō)明:索引可以建立在一個(gè)或多個(gè)列上,可選參數(shù)為ASC(升序)或DESC(降序),缺省的情況下,系統(tǒng)默認(rèn)為升序。在數(shù)據(jù)庫(kù)管理員建立索引后,它的使用和維護(hù)由數(shù)據(jù)庫(kù)系統(tǒng)自動(dòng)進(jìn)行,用戶不必也不能干預(yù)。一個(gè)基本表可以建立多個(gè)索引,以提供多條存取路徑,但是相應(yīng)基本表更新數(shù)據(jù)時(shí)會(huì)增加系統(tǒng)開銷。7/18/202265例4-10在學(xué)生表S的姓名列Sname上建立索引。 CREATE INDEX index_Sname ON S (Sn
25、ame);7/18/202266在SC表的學(xué)號(hào)Sno和課程編號(hào)Cno上建立唯一索引,要求學(xué)號(hào)為主索引且為升序,課程編號(hào)為降序。 CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);例4-117/18/202267注意:1. 改變表中的數(shù)據(jù)(如增加或刪除記錄)時(shí),索引將自動(dòng)更新。索引建立后,在查詢使用該列時(shí),系統(tǒng)將自動(dòng)使用索引進(jìn)行查詢。 2. 索引數(shù)目無(wú)限制,但索引越多,更新數(shù)據(jù)的速度越慢。對(duì)于僅用于查詢的表可多建索引,對(duì)于數(shù)據(jù)更新頻繁的表則應(yīng)少建索引。7/18/2022682. 刪除索引一般格式為:DROP INDEX ;7/18/202269刪除
26、學(xué)生表S的index_Sname索引。 DROP INDEX S.index_Sname;例4-127/18/2022704.3 SQL數(shù)據(jù)查詢 數(shù)據(jù)庫(kù)的核心操作就是進(jìn)行數(shù)據(jù)查詢。數(shù)據(jù)查詢就是根據(jù)用戶的需要,以一種可讀的方式從數(shù)據(jù)庫(kù)中提取所需要的數(shù)據(jù)。 7/18/2022714.3.1 SELECT命令的一般格式說(shuō)明 SELECT ALL|DISTINCT , FROM , WHERE GROUP BY HAVING ORDER BY ASC| DESC ;7/18/202272SELECT子句指明要查詢的項(xiàng)目。ALL| DISTINCT為目標(biāo)屬性, 使用ALL來(lái)顯示表中符合條件的所有行,默認(rèn)
27、為ALL;使用DISTINCT選項(xiàng)時(shí),刪除重復(fù)的數(shù)據(jù)行。7/18/202273FROM子句指明被查詢的基本表或視圖,它們之間用逗號(hào)隔開。WHERE子句指明查詢的條件。WHERE子句可以過(guò)濾掉不需要的數(shù)據(jù)行,用來(lái)查詢滿足指定條件的元組。7/18/202274GROUP BY子句指明如何將查詢結(jié)果進(jìn)行分組。使用GROUP BY子句將查詢結(jié)果按某一列或多列值分組,值相等的為一組。如果GROUP子句帶HAVING短語(yǔ),則只有滿足指定的組才給以輸出。 7/18/202275ORDER BY子句指明查詢結(jié)果如何排序。使用ORDER BY子句對(duì)查詢返回的結(jié)果按一列或多列排序。其中ASC表示升序,為默認(rèn)值,D
28、ESC為降序。7/18/202276SELECT語(yǔ)句的執(zhí)行過(guò)程根據(jù)WHERE子句的檢索條件,從FROM子句指定的基本表或視圖中選取滿足條件的元組,再按照SELECT子句中指定的列,投影得到結(jié)果表。如果有GROUP子句,則將查詢結(jié)果按照相同的值進(jìn)行分組。如果GROUP子句后有HAVING短語(yǔ),則只輸出滿足HAVING條件的元組。如果有ORDER子句,查詢結(jié)果還要按照的值進(jìn)行排序。查詢的結(jié)果是仍是一個(gè)表。7/18/2022774.3.1 單表查詢單表查詢是相對(duì)多表查詢而言的,指從一個(gè)數(shù)據(jù)表中查詢數(shù)據(jù)。因?yàn)閱伪聿樵儾簧婕岸鄠€(gè)基本表的連接查詢和嵌套查詢等復(fù)雜的情況,所以也稱之為簡(jiǎn)單查詢。7/18/20
29、2278例4-13 查詢學(xué)生表中所有學(xué)生的學(xué)號(hào)、年齡及姓名。解 SELECT Sno,Sage,SnameFROM S;7/18/202279例4-14 查詢系院表的所有情況。解一: SELECT Dno,Dname,Dtel,Dhead FROM D;解二: SELECT * FROM D;7/18/202280例4-15 列出所有選修課程的學(xué)生的學(xué)號(hào)。解:SELECT SnoFROM SC;7/18/202281例4-16 查詢所有的系院編號(hào)及名稱。解 SELECT Dno,系院名為:,DnameFROM D;7/18/202282例4-17 查詢?nèi)w學(xué)生的學(xué)號(hào)及其出生年份和所在系別。解
30、SELECT Sno,2011-Sage AS BirthYear,SdeptFROM S;7/18/202283例4-18 查詢每個(gè)系院的編號(hào)及其名稱,在每個(gè)系院名后都加上“系”字。解 SELECT Dno,Dname+ 系 AS 社團(tuán)名稱 FROM D;“+”是一個(gè)字符運(yùn)算符,表示字符串連接,該運(yùn)算可以把兩個(gè)字符串連接成一個(gè)字符串。7/18/202284查詢表中的若干行(元組)1)消除取值重復(fù)的行在例4-15中,學(xué)生學(xué)號(hào)的重復(fù)行應(yīng)該去掉,因此,可以使用下面的語(yǔ)句實(shí)現(xiàn):解:SELECT DISTINCT Sno FROM SC;7/18/2022852)查詢滿足條件的元組例4-19查詢所有年
31、齡大于18歲的學(xué)生信息。 解SELECT * FROM SWHERE Sage18;7/18/202286WHERE子句常用的查詢條件運(yùn)算符 7/18/202287比較運(yùn)算符 、=、=、=、!、! =、! 比較運(yùn)算符主要用來(lái)在WHERE子句中比較兩個(gè)值的大小。7/18/202288例4-20查詢學(xué)生表中所有男同學(xué)的信息。解 SELECT * FROM SWHERE Ssex=男;7/18/202289范圍運(yùn)算符BETWEEN AND、NOT BETWEEN AND 范圍運(yùn)算符用來(lái)判斷表達(dá)式的值是否在(不在)指定的范圍內(nèi)。 7/18/202290例4-21查詢考試成績(jī)?cè)?5到90之間的學(xué)生學(xué)號(hào)及
32、課程編號(hào)。解 SELECT Sno,Cno,ScoreFROM SCWHERE Score BETWEEN 75 AND 90;7/18/202291列表運(yùn)算符IN (項(xiàng)1,項(xiàng)2) 、NOT IN (項(xiàng)1,項(xiàng)2) 用于判斷表達(dá)式是否為列表中的指定項(xiàng)。7/18/202292例4-22查詢選修課程A01或B02的學(xué)生學(xué)號(hào)以及成績(jī)。解 SELECT Sno,Score,CnoFROM SCWHERE Cno IN (A01,B02);7/18/202293模式匹配符(了解)LIKE、NOT LIKE 常用于模糊查找,判斷列值是否與指定的字符串格式相匹配。7/18/202294可使用以下通配字符: 百
33、分號(hào)*:可匹配任意類型和長(zhǎng)度的字符。 下劃線_:匹配單個(gè)任意字符,它常用來(lái)限制表達(dá)式的字符長(zhǎng)度。如果要表示中文字符,就要使用_ _,因?yàn)橐粋€(gè)漢字需要占兩個(gè)字符的位置。7/18/202295方括號(hào):指定一個(gè)字符、字符串或范圍,要求所匹配對(duì)象為它們中的任一個(gè)。:其取值也和 相同,但它要求所匹配對(duì)象為指定字符以外的任一個(gè)字符。 例如:限制以Publishing結(jié)尾,使用LIKE %Publishing;限制以A開頭:LIKE A%;限制以A開頭外:LIKE A%。7/18/202296例4-23.查詢所有姓劉的學(xué)生的姓名及年齡。 SELECT Sname,SageFROM StudentWHERE
34、Sname LIKE 劉*;7/18/202297例4-24. 查詢學(xué)生姓名是兩個(gè)字的學(xué)生的學(xué)號(hào)、姓名及年齡。SELECT Sno,Sname,SageFROM SWHERE Sname LIKE _ _ _ _;7/18/202298通配符%或_ 如果所查詢的字符或字符串本身帶有通配符%或_,則要使用轉(zhuǎn)義符ESCAPE對(duì)通配符進(jìn)行轉(zhuǎn)義。 7/18/202299例4.25.列出課程名稱中帶有_的課程信息。解Select *From CWhere Cname LIKE %_% ESCAPE;7/18/2022100空值判斷符IS NULL、NOT IS NULL可以用來(lái)判斷某個(gè)列值是否為空。例4
35、-26 查詢年齡值為空的學(xué)生信息。解 Select * From S WHERE Sage IS NULL;7/18/2022101邏輯運(yùn)算符此類運(yùn)算符的優(yōu)先級(jí)為:NOT、AND、OR;用戶可以使用括號(hào)改變它們的優(yōu)先級(jí);邏輯運(yùn)算符可以用來(lái)連接多個(gè)查詢條件。7/18/2022102例4-27查詢所在系為003的年齡小于20歲的女同學(xué)的信息。解 SELECT * FROM S WHERE Sdept=003 AND Sage=2;7/18/20221125.使用ORDER BY子句對(duì)查詢結(jié)果排序使用ORDER BY子句對(duì)查詢返回的結(jié)果按一列或多列排序。在該子句中的ASC表示升序,為默認(rèn)值,DESC
36、為降序。 7/18/2022113例4-34將所有學(xué)生信息按學(xué)號(hào)降序排列。解 SELECT *FROM SORDER BY Sno DESC;7/18/2022114例4-35查詢所有學(xué)生信息,結(jié)果按所在系升序排列,同一系中學(xué)生按年齡降序排列。解 SELECT *FROM SORDER BY Sdept ,Sage DESC;7/18/2022115多表查詢 在數(shù)據(jù)庫(kù)使用中,很多情況下數(shù)據(jù)的查詢要跨兩個(gè)或多個(gè)表進(jìn)行,這種查詢就稱為多表查詢??梢酝ㄟ^(guò)連接運(yùn)算符實(shí)現(xiàn)多表查詢。連接是關(guān)系數(shù)據(jù)庫(kù)模型的主要特點(diǎn),也是它區(qū)別于其它類型數(shù)據(jù)庫(kù)管理系統(tǒng)的一個(gè)標(biāo)志。7/18/20221164.3.2 連接查詢
37、當(dāng)檢索數(shù)據(jù)時(shí),通過(guò)連接操作查詢出存放在多個(gè)表中的不同實(shí)體的信息。連接查詢可分為: 自連接查詢、內(nèi)部連接查詢、外部連接查詢和復(fù)合條件連接查詢。7/18/20221171自連接查詢連接不僅可以在表之間進(jìn)行,也可以使一個(gè)表同其自身進(jìn)行連接,這種連接稱為自身連接(self join),相應(yīng)的查詢稱為自連接查詢。在自連接查詢中,由于同一個(gè)基本表名在查詢語(yǔ)句中出現(xiàn)多次,為了區(qū)別表的每次出現(xiàn),需要為表定義一個(gè)別名。7/18/2022118例4-36查詢同一個(gè)系里年齡相同的學(xué)生學(xué)號(hào)、姓名、年齡和所在系信息。解 SELECT a.Sno, a.Sname, a.Sage, a.Sdept, b.Sno, b.S
38、name, b.Sage, b.Sdept FROM S AS a , S AS b WHERE (a.Snob.Sno) AND (a.Sdept=b.Sdept) AND (a.Sage=b.Sage);7/18/20221192內(nèi)連接查詢內(nèi)連接(INNER JOIN)使用比較運(yùn)算符進(jìn)行表間某(些)列數(shù)據(jù)的比較操作,并列出這些表中與連接條件相匹配的數(shù)據(jù)行,如果數(shù)據(jù)無(wú)法滿足連接條件則將其丟棄。 內(nèi)連接查詢操作返回查詢結(jié)果集合中的僅是符合查詢條件(WHERE搜索條件或HAVING 條件)和連接條件的行。7/18/2022120例4-37查詢每個(gè)學(xué)生和他(她)所選修課程的詳細(xì)情況。解 SELEC
39、T S.*,SC.*FROM S,SCWHERE S.Sno=SC.Sno7/18/2022121例4-38將上例用自然連接完成。解 SELECT S.*,Cno,ScoreFROM S,SCWHERE S.Sno= SC.Sno;7/18/2022122例4-39列出學(xué)生表中學(xué)號(hào)低于選課表中學(xué)號(hào)的所有學(xué)生信息和選課信息的組合。解 SELECT S.*, SC.Sno, Cno,ScoreFROM S,SCWHERE S.Sno, =, =, !=)將父查詢和子查詢連接起來(lái)。7/18/2022132例4-42查詢與學(xué)號(hào)為03050211的學(xué)生在同一個(gè)系的學(xué)生的學(xué)號(hào)、姓名、性別及所在系。解 SE
40、LECT * FROM S WHERE Sdept=(SELECT Sdept FROM S WHERE Sno=03050211);7/18/2022133例4-43 列出年齡低于平均年齡的學(xué)生的信息。解: SELECT * FROM SWHERE Sage(SELECT AVG(Sage) FROM S);7/18/20221342. 使用由ANY或ALL修改的比較運(yùn)算符的子查詢?nèi)绻硬樵兊姆祷刂挡恢挂粋€(gè),而是一個(gè)集合時(shí),則不能直接使用比較運(yùn)算符,可以在比較運(yùn)算符和子查詢之間插入ANY或ALL。其具體含義詳見下例。7/18/2022135例4-44查詢其它系中比003系所有學(xué)生年齡都小的學(xué)
41、生學(xué)號(hào)、姓名、年齡以及所在系。解 SELECT Sno,Sname,Sage,SdeptFROM SWHERE SageALL(SELECT SageFROM SWHERE Sdept=003)AND Sdept003;7/18/20221363. 使用謂詞IN的子查詢?cè)谇短撞樵冎校硬樵兊慕Y(jié)果在很多時(shí)候不僅是一個(gè)單值,而往往是一個(gè)集合,這時(shí)就要用到謂詞IN。在嵌套查詢中IN運(yùn)算符也是最常用到的。7/18/2022137例4-45查詢選修了課程編號(hào)為B03的學(xué)生信息。解 SELECT * FROM S WHERE Sno IN(SELECT Sno FROM SC WHERE Cno=B03)
42、;7/18/2022138例4-46查詢選修了“大學(xué)語(yǔ)文”課程的學(xué)生的姓名、年齡和所在系。解 SELECT Sname,Sage,SdeptFROM SWHERE Sno IN(SELECT Sno FROM SC WHERE Cno = (SELECT Cno FROM C WHERE Cname=大學(xué)語(yǔ)文);7/18/20221394.使用謂詞EXISTS的子查詢EXISTS是謂詞,EXISTS或NOT EXISTS是用來(lái)檢查在子查詢中是否有結(jié)果返回,即存在元組或不存在元組。EXISTS代表存在量詞。帶有EXISTS的子查詢不返回任何數(shù)據(jù),只產(chǎn)生邏輯真值“true”或邏輯假值“false”
43、。7/18/2022140例4-47查詢所有選修了課程編號(hào)為A04的學(xué)生信息。解 SELECT * FROM S WHERE EXISTS (SELECT * FROM SCWHERE Sno=S.Sno AND Cno=A04);7/18/2022141子查詢包含普通子查詢和相關(guān)子查詢。前面所講的子查詢均為普通子查詢,而本例中子查詢的查詢條件引用了父查詢表中的屬性值(S表的Sno值),我們把這類查詢稱為相關(guān)子查詢。7/18/2022142二者的執(zhí)行方式不同:普通子查詢的執(zhí)行順序是:首先執(zhí)行子查詢,然后把子查詢的結(jié)果作為父查詢的查詢條件的值。普通子查詢只執(zhí)行一次,而父查詢所涉及的所有記錄行都與
44、其查詢結(jié)果進(jìn)行比較以確定查詢結(jié)果集合。7/18/2022143相關(guān)子查詢的執(zhí)行順序是:首先選取父查詢表中的第一行記錄,內(nèi)部的子查詢利用此行中相關(guān)的屬性值進(jìn)行查詢,然后父查詢根據(jù)子查詢返回的結(jié)果判斷此行是否滿足查詢條件。如果滿足條件,則把該行放入父查詢的查詢結(jié)果集合中。重復(fù)執(zhí)行這一過(guò)程,直到處理完父查詢表中的每一行數(shù)據(jù)。由此可以看出,相關(guān)子查詢的執(zhí)行次數(shù)是由父查詢表的行數(shù)決定的。7/18/20221444.3.4 組合查詢當(dāng)兩個(gè)或多個(gè)查詢塊的結(jié)果為多個(gè)元組(即元組的集合)時(shí),可以對(duì)這兩個(gè)或多個(gè)結(jié)果集進(jìn)行集合運(yùn)算,這種查詢稱之為組合查詢。進(jìn)行集合運(yùn)算的操作主要包括并(UNION)、交(INTERS
45、ECT)和差(MINUS)。7/18/2022145并(UNION)運(yùn)算符可以將兩個(gè)或兩個(gè)以上的SELECT語(yǔ)句的查詢結(jié)果集合并成一個(gè)結(jié)果集顯示,即執(zhí)行聯(lián)合查詢。并操作會(huì)將查詢結(jié)果合并而且會(huì)去掉重復(fù)元組,如果要保留重復(fù)元組,則必須使用UNION ALL。7/18/2022146交操作是把同時(shí)出現(xiàn)在查詢結(jié)果中的元組取出。差操作是把出現(xiàn)在第一個(gè)查詢結(jié)果中但不出現(xiàn)在第二個(gè)查詢結(jié)果中的元組取出。在實(shí)際運(yùn)用中很少用到交操作和差操作,標(biāo)準(zhǔn)SQL中沒有直接提供這兩種操作,可以用其它方法來(lái)實(shí)現(xiàn)。7/18/2022147例4-48查詢選修了課程編號(hào)為A02或選修了課程編號(hào)為B03的學(xué)生信息。解 SELECT *
46、 FROM SC WHERE Cno=A02 UNION SELECT * FROM SC WHERE Cno=B03;7/18/20221484.4 SQL數(shù)據(jù)更新INSERT:向數(shù)據(jù)庫(kù)的表中添加記錄;DELETE:從數(shù)據(jù)庫(kù)的表中刪除記錄;UPDATE:修改數(shù)據(jù)庫(kù)的表中已存在的記錄。7/18/20221494.4.1 插入數(shù)據(jù) 當(dāng)創(chuàng)建新表時(shí),新表不包含任何數(shù)據(jù)。要將新的行輸入表中,使用 INSERT 語(yǔ)句。此語(yǔ)句根據(jù)插入數(shù)據(jù)方式不同相應(yīng)地也有兩種不同格式: 插入元組值 插入子查詢的結(jié)果(了解)7/18/2022150插入元組值 插入數(shù)據(jù)為元組值的時(shí)候,使用 VALUES 子句來(lái)指定一行或多行
47、的列值。一般格式如下:INSERTINTO ( , ) VALUES (,);7/18/2022151在此語(yǔ)句中,是用來(lái)指定用來(lái)來(lái)插入新元組的表的名稱。常量1、常量2對(duì)應(yīng)為列名1、列名2的值。在INTO子句中沒有給出的列,系統(tǒng)將默認(rèn)為空值。如果INTO子句中沒有給出任何列,則新插入的元組在每個(gè)列上都必須有值。 7/18/2022152例4-49課程表中新增加一門課,其課程編號(hào)為C05,課程名為WEB程序設(shè)計(jì),學(xué)分為2,任課教師盧偉。請(qǐng)將此記錄添加到課程表C中。解 此題其實(shí)就是在課程表中添加一條課程記錄:(Cno(課程編號(hào)):C05,Cname(課程名稱):WEB程序設(shè)計(jì),Ccredit(學(xué)分)
48、:2,Cteacher(任課教師):盧偉)使用INSERT語(yǔ)句將它加入到課程表中即可。解INSERTINTO CVALUES (C05,WEB程序設(shè)計(jì),2,盧偉); 7/18/2022153例4-50學(xué)號(hào)為07070103的學(xué)生又選修了編號(hào)為A02的課程。解 INSERTINTO SC(Sno,Cno)VALUES (07070103,A02);7/18/2022154插入子查詢的結(jié)果指定全查詢而非指定 VALUES 來(lái)標(biāo)識(shí)包含在其他表或視圖中的行的列。全查詢是 INSERT 或 CREATE VIEW 語(yǔ)句中所使用的選擇語(yǔ)句、或者是跟在謂詞后面的選擇語(yǔ)句。括在括號(hào)中的全查詢一般稱為子查詢。插
49、入的一般格式為:INSERT ( , ) 子查詢;7/18/2022155例4-51將建筑工程系學(xué)生的所有信息存入一個(gè)新表建筑工程系中。 見教材7/18/2022156.4. 刪除數(shù)據(jù) SQL中使用 DELETE 語(yǔ)句,基于在 WHERE 子句中指定的搜索條件從表中刪除數(shù)據(jù)行。其一般格式如下: DELETE FROM WHERE;7/18/2022157WHERE 子句是可選的,它指定要?jiǎng)h除的行。如果省略 WHERE 子句,則數(shù)據(jù)庫(kù)管理程序刪除表或視圖中的所有行。7/18/2022158例4-52刪除學(xué)號(hào)為03060105的學(xué)生的記錄。解 DELETEFROM SWHERE Sno=03060105;7/18/2022159.4. 修改數(shù)據(jù) SQL中使用 UPDATE 語(yǔ)句來(lái)更改表中的數(shù)據(jù)。使用此語(yǔ)句,可以更改滿足 WHERE 子句搜索條件的每行中的一列或多列的值。7/18/2022160一般格式如下:UPDATE SET = , = WHERE ;7/18/2022161用來(lái)指定要修改的表的名稱,修改該表中滿足WHERE子句條件的那些元組的列值。SET 子句指
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 特殊體型服裝定制企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 信息導(dǎo)入勞務(wù)合同范例
- 代理建設(shè)工程合同范例
- odm外貿(mào)合同范例
- 光伏企業(yè)合同范例
- 全日制用工合同范例
- 中心設(shè)計(jì)合同范例
- 修路購(gòu)買土方合同范例
- 語(yǔ)言類新教師培訓(xùn)心得體會(huì)總結(jié)
- 統(tǒng)計(jì)學(xué)專業(yè)社會(huì)實(shí)踐總結(jié)報(bào)告
- 壓力管道安全檢查表參考范本
- SB∕T 10170-2007 腐乳
- 外貿(mào)進(jìn)出口流程圖
- 部編人教版小學(xué)五年級(jí)下冊(cè)語(yǔ)文文言文閱讀理解課后專項(xiàng)練習(xí)
- 皮膚管理--ppt課件
- 雙向氣動(dòng)插板門使用說(shuō)明書
- 無(wú)生老母救世血書寶卷
- (完整版)2019年高考數(shù)學(xué)浙江卷(附答案)
- 信用社大額貸款會(huì)審制度
- 門式起重機(jī)檢驗(yàn)報(bào)告
- 小學(xué)數(shù)學(xué)總復(fù)習(xí)-數(shù)的認(rèn)識(shí)講義
評(píng)論
0/150
提交評(píng)論