數(shù)據(jù)庫原理及應(yīng)用課件:第4章 關(guān)系數(shù)據(jù)庫標準語言SQL_第1頁
數(shù)據(jù)庫原理及應(yīng)用課件:第4章 關(guān)系數(shù)據(jù)庫標準語言SQL_第2頁
數(shù)據(jù)庫原理及應(yīng)用課件:第4章 關(guān)系數(shù)據(jù)庫標準語言SQL_第3頁
數(shù)據(jù)庫原理及應(yīng)用課件:第4章 關(guān)系數(shù)據(jù)庫標準語言SQL_第4頁
數(shù)據(jù)庫原理及應(yīng)用課件:第4章 關(guān)系數(shù)據(jù)庫標準語言SQL_第5頁
已閱讀5頁,還剩172頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)據(jù)庫原理及應(yīng)用第4章 關(guān)系數(shù)據(jù)庫標準語言SQL7/18/20221SQL語言簡介SQL的數(shù)據(jù)定義SQL數(shù)據(jù)查詢數(shù)據(jù)更新視圖SQL數(shù)據(jù)控制本章內(nèi)容7/18/202224.1 SQL語言概述 SQL的發(fā)展及其特點SQL的基本概念SQL的功能7/18/20223 SQL是結(jié)構(gòu)化查詢語言Structured QueryLanguage 的縮寫,它是數(shù)據(jù)庫的核心語言。4.1.1 SQL的發(fā)展及其特點7/18/20224IBM的Boyce在1974年首先提出了SQL;1979年ORACLE公司發(fā)表第一個基于SQL的商業(yè)化RDBMS產(chǎn)品;隨后,SQL在IBMSystem R上的關(guān)系數(shù)據(jù)庫SQL/DS得到了

2、實現(xiàn);發(fā)展史:7/18/202251986年美國國家標準協(xié)會(ANSI)公布了第一個SQL標準,即SQL86;國際標準化組織(ISO)于1987年正式采納它為國際標準。1989年ISO提出了完整特性的SQL,并稱之為SQL89,后來又發(fā)展的SQL92(也稱為SQL2)。發(fā)展史(續(xù)):7/18/20226特點:1.功能一體化 SQL包括數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)操縱和數(shù)據(jù)控制的功能。7/18/202272.語言簡潔,易學(xué)易用 只用7個動詞(select , drop, alter, create, insert, update, delete)就實現(xiàn)了SQL的核心功能。7/18/20228SQL使

3、用的動詞SQL功能操作符(所用動詞)數(shù)據(jù)定義CREATE,ALTER,DROP數(shù)據(jù)查詢SELECT數(shù)據(jù)操縱INSERT,UPDATE,DELETE數(shù)據(jù)控制GRANT,REVOKE7/18/202297/18/2022103.高度非過程化 它沒有必要告訴計算機“如何”去做,而只需要描述清楚用戶“要做什么”,系統(tǒng)會自動完成。 7/18/2022114.語法結(jié)構(gòu)統(tǒng)一SQL語言有兩種使用方式:自含式和嵌入式。自含式:一般DBMS都提供聯(lián)機交互工具,用戶可直接鍵入SQL命令對數(shù)據(jù)庫進行操作由DBMS來進行解釋。嵌入式:能將SQL語句嵌入到高級語言(宿主語言),使應(yīng)用程序充分利用SQL訪問數(shù)據(jù)庫的能力、宿

4、主語言的過程處理能力,一般需要預(yù)編譯,將嵌入的SQL語句轉(zhuǎn)化為宿主語言編譯器能處理的語句。 7/18/2022125.面向集合的操作方式 SQL所作用的對象、作用后所得的結(jié)果都可以是元組的集合。 7/18/2022134.1.2 SQL的基本概念1SQL語言的組成(1)數(shù)據(jù)定義語言(DDL):用于實現(xiàn)SQL的數(shù)據(jù)定義功能。(2)數(shù)據(jù)操縱語言(DML):用于實現(xiàn)SQL的數(shù)據(jù)操縱功能。(3)數(shù)據(jù)控制語言(DCL):用于實現(xiàn)SQL的數(shù)據(jù)控制功能。7/18/2022144.1.2 SQL的基本概念2. SQL支持三級模式結(jié)構(gòu)一個SQL數(shù)據(jù)庫的總體邏輯結(jié)構(gòu)是基本表(Table)的集合,對應(yīng)于概念模式SQ

5、L數(shù)據(jù)庫的底層存儲結(jié)構(gòu)采用文件,一個或幾個表對應(yīng)一個存儲文件,以及索引文件。對應(yīng)內(nèi)模式用戶所見的數(shù)據(jù)結(jié)構(gòu)是視圖(View),用戶可直接操作的表,可為視圖或部分基本表。對應(yīng)外模式7/18/2022157/18/202216兩個基本概念:基本表和視圖?;颈恚˙ASE TABLE):是獨立存在的表,不是由其它的表導(dǎo)出的表。一個關(guān)系對應(yīng)一個基本表,一個或多個基本表對應(yīng)一個存儲文件。視圖(VIEW):是一個虛擬的表,是從一個或幾個基本表導(dǎo)出的表。它本身不獨立存在于數(shù)據(jù)庫中,數(shù)據(jù)庫中只存放視圖的定義而不存放視圖對應(yīng)的數(shù)據(jù),這些數(shù)據(jù)仍存放在導(dǎo)出視圖的基本表中。當基本表中的數(shù)據(jù)發(fā)生變化時,從視圖中查詢出來的

6、數(shù)據(jù)也隨之改變。7/18/202217例如:學(xué)生數(shù)據(jù)庫中有學(xué)生基本情況表STUDENT(SNO,SNAME,SSEX,SAGE,SDEPT),此表為基本表,對應(yīng)一個存儲文件??梢栽谄浠A(chǔ)上定義一個男生基本情況表STUDENT_MALE(SNO,SNAME,SAGE,SDEPT),它是從STUDENT中選擇SSEX=男的各個行,然后在SNO,SNAME,SAGE,SDEPT上投影得到的。在數(shù)據(jù)庫中只存有STUDENT_MALE的定義,而STUDENT_MALE的記錄不重復(fù)存儲。在用戶看來,視圖是通過不同路徑去看一個實際表,就象一個窗口一樣,透過視圖可以看到數(shù)據(jù)庫中自己感興趣的內(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語言使用數(shù)據(jù)定義語言(DATA DEFINITION LANGUAGE,簡稱DDL)實現(xiàn)其數(shù)據(jù)定義功能。 SQL的數(shù)據(jù)定義功能包括對數(shù)據(jù)庫、基本表、視圖和索引的定義,即對數(shù)據(jù)庫和表的創(chuàng)建、刪除和修改,以及對視圖和索引的創(chuàng)建和刪除 。7/18/202220SQL的數(shù)據(jù)定義 操作對象操作方式創(chuàng)建刪除修改表Create tableDrop tableAlter table視圖Create viewDro

8、p view索引Create indexDrop index數(shù)據(jù)庫Create databaseDrop databaseAlter database7/18/2022214.2.1 創(chuàng)建與刪除數(shù)據(jù)庫要對數(shù)據(jù)庫模式進行操作,首先要建立相應(yīng)的數(shù)據(jù)庫,并把它作為一個文件存放在磁盤上?,F(xiàn)代的數(shù)據(jù)庫管理系統(tǒng)都提供圖形用戶界面,可以通過點擊菜單完成。7/18/202222使用SQL語句建立數(shù)據(jù)庫的一般格式為:CREATE DATABASE 數(shù)據(jù)庫名參數(shù)我們僅要求掌握參數(shù)省略的情況,即CREATE DATABASE 數(shù)據(jù)庫名 創(chuàng)建數(shù)據(jù)庫7/18/202223刪除數(shù)據(jù)庫 如果所建立的數(shù)據(jù)庫不再需要時,可以對

9、此數(shù)據(jù)庫進行刪除,刪除數(shù)據(jù)庫的一般格式為: DROP DATABASE 數(shù)據(jù)庫名7/18/202224 例4-1 創(chuàng)建一個名稱為“學(xué)生管理”的學(xué)生信息管理數(shù)據(jù)庫 SQL語句為: CREATE DATABASE 學(xué)生管理 7/18/202225 提示: 本章中所舉例子均為基于學(xué)生管理數(shù)據(jù)庫,假設(shè)“學(xué)生管理”為管理學(xué)生日?;顒佑嘘P(guān)信息的數(shù)據(jù)庫 。7/18/2022264.2.2 創(chuàng)建、刪除和修改基本表 基本表是數(shù)據(jù)庫中存儲數(shù)據(jù)的最基本的對象,是構(gòu)成數(shù)據(jù)庫的一個重要組成部分。建立數(shù)據(jù)庫后可以在其中創(chuàng)建基本表。 7/18/2022271. 創(chuàng)建基本表其一般格式為: CREATE TABLE (列級完整

10、性約束條件 ,列級完整性約束條件 ,); 7/18/202228常用數(shù)據(jù)類型數(shù)據(jù)類型說明CHAR(n)長度為n的定長字符串VARCHAR(n)最大長度為n的變長字符串INTEGER全字長整數(shù)SMALLINT半字長整數(shù)NUMERIC(p, d)由p位數(shù)字(不包括符號和小數(shù)點)組成的定點數(shù),小數(shù)點后面有d位數(shù)字REAL浮點數(shù)DOUBLE RECISION雙精度浮點數(shù)FLOAT(n)精度至少為n位數(shù)字的浮點數(shù)DATE日期,形如YYYY-MM-DD(年-月-日)TIME時間,形如HH:MM:SS(時:分:秒)7/18/202229 字符串使用一對單引號 來表示,例如數(shù)據(jù)庫、表等。 不同的關(guān)系數(shù)據(jù)庫系統(tǒng)

11、所支持的數(shù)據(jù)類型不完全相同。提示:7/18/202230幾點說明:列級完整性約束僅作用在該列上;表級完整性約束作用在整個表上;完整性約束主要有五類:主關(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、的確定一行記錄。每個表中主關(guān)鍵字是惟一的,不允許指定主關(guān)鍵字列有NULL屬性。 PRIMARY KEY用于定義表約束時,即將某些列的組合定義為主鍵,其語法格式如下:CONSTRAINT PRIMARY KEY ()7/18/202233例 4-2 在學(xué)生管理數(shù)據(jù)庫中建立院系表D,它有三個屬性:院系編號(Dno)、院系名稱(Dname)、聯(lián)系方式(Dtel),其中院系編號為該表的主鍵,院系名稱不能為空。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í)行該語句后在學(xué)生管理數(shù)據(jù)庫中建立一個院系表D,并且將該表的有關(guān)定義和約束條件存放在數(shù)據(jù)字典中。 7/18/202235外關(guān)鍵字(FOREIGN KEY)約束外關(guān)鍵字約束定義了表之間的關(guān)系。當一個表中的一列或多個列的組合和其它表中的主關(guān)鍵字定義相同時,就可以將這些列或列的組合定義為外關(guān)鍵字。7/18/202236FOREIGN KEY既可用于列約束,也可用于表約束,其語法格式為:CONSTRAINT FOREIGN KEY REFERENCES ()FOREIGN KEY約束7/18/202237惟一性(UNIQUE)約束惟一性約束指定一列或幾列的組

14、合的值具有惟一性,定義了惟一性約束的那些列稱為惟一鍵,系統(tǒng)自動為惟一鍵建立惟一索引,以防止在列中輸入重復(fù)的值。惟一性約束指定的列可以有NULL屬性。由于主關(guān)鍵字值是有惟一性的,因此主關(guān)鍵字列不能再設(shè)定惟一性約束。7/18/202238例4-3在學(xué)生管理數(shù)據(jù)庫中建立學(xué)生表S,它有六個屬性:學(xué)號(Sno)、姓名(Sname)、性別(Ssex)、年齡(Sage)、所在系(Sdept)、身份證號(Sid)。其中學(xué)號為該表的主鍵,所在系是該表的外關(guān)鍵字,學(xué)生身份證號是惟一的。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二者類似,都是通過建立唯一索引來保證基本表在主鍵列取值的唯一性,但它們之間也存在著很大的區(qū)別:在一個基本表中只能定義一個PRIMARY KEY約束,但可定義多個UNIQUE約束;對于指定為PRIMARY KEY的一個列或

16、多個列的組合,其中任何一個列都不能出現(xiàn)空值,而對于UNIQUE所約束的唯一鍵,則允許為空。主關(guān)鍵字約束與唯一性約束區(qū)別7/18/202241不能為同一個列或一組列既定義UNIQUE約束,又定義PRIMARY KEY約束。注意:7/18/202242檢查(CHECK)約束檢查約束對輸入列或整個表中的值設(shè)置檢查條件,以限制輸入值,保證數(shù)據(jù)庫的數(shù)據(jù)完整性。7/18/202243CHECK約束CHECK既可用于列約束,也可用于表約束。其語法格式為:CONSTRAINT CHECK ()7/18/202244例4-4在學(xué)生管理數(shù)據(jù)庫中建立課程表C,它有四個屬性:課程編號(Cno)、課程名稱(Cname)

17、、學(xué)分(Ccredit)、任課教師(Cteacher),其中課程號為該表的主鍵,學(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缺省約束缺省約束通過定義列的缺省值或使用數(shù)據(jù)庫的缺省值對象綁定表的列,來指定列的缺省值,若某列設(shè)置有缺省值,則當該字

18、段未被輸入數(shù)據(jù)時,以該缺省值自動填入該字段。注:此操作在Access中可通過設(shè)置字段屬性完成。7/18/202247例4-5建立學(xué)生選課表SC,它有三個屬性:學(xué)號(Sno)、課程編號(Cno)、成績(Score),其中學(xué)號和課程編號的組合作為主關(guān)鍵字,成績的缺省值為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語句的幾點說明: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 在這個例子中刪除的僅僅是某列的約束條件,如果要刪除基本表中的某列,則其句法如下: ALTER TABLE DROP CASCADE| RESTRICT;7/18/202254CASCADE| RESTRICT為列的刪除方式。CASCADE方式表示在基本表中刪除列時,所有引用該列的視圖或完整性約束均一起自動刪除;RESTRICT方式表示只有當沒有

21、視圖或完整性約束時該列才能被刪除,否則拒絕刪除操作。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ǎo)出的視圖定義仍然保留,但已無法使用。7

22、/18/202258例4-9刪除學(xué)生表S。 DROP TABLE S;7/18/2022594.2.3 創(chuàng)建和刪除索引索引是根據(jù)數(shù)據(jù)庫表中一列或多列的值進行排序的一種結(jié)構(gòu)。索引有如下作用1. 加快查詢速度;2. 保證行的唯一性。7/18/202260索引的分類1. 按照索引記錄的存放位置可分為聚集索引與非聚集索引聚集索引:按照索引的字段排列記錄,并且依照排好的順序?qū)⒂涗洿鎯υ诒碇?。非聚集索引:按照索引的字段排列記錄,但是排列的結(jié)果并不會存儲在表中,而是另外存儲。2. 復(fù)合索引的概念復(fù)合索引是將兩個字段或多個字段組合起來建立的索引,而單獨的字段允許有重復(fù)的值。7/18/2022613. 唯一索引

23、的概念唯一索引表示表中每一個索引值只對應(yīng)唯一的數(shù)據(jù)記錄,這與表的PRIMARY KEY的特性類似,因此唯一性索引常用于PRIMARY KEY的字段上,以區(qū)別每一筆記錄。當表中有被設(shè)置為UNIQUE的字段時,SQL SERVER會自動建立一個非聚集的唯一性索引。而當表中有PRIMARY KEY的字段時,SQL SERVER會在PRIMARY KEY字段建立一個聚集索引。7/18/2022621. 創(chuàng)建索引一般格式為:CREATE UNIQUE CLUSTER INDEX ON ( , );7/18/202263UNIQUE指明索引是否為唯一性索引。如果是唯一性索引,則該索引的每一個索引值不能相同

24、。CLUSTER項表示該索引為聚簇索引。聚簇索引是指索引項的順序與基本表中記錄的物理順序一致的索引。一般在查詢頻率最高的列上建立聚簇索引,以提高查詢效率說明:7/18/202264說明:索引可以建立在一個或多個列上,可選參數(shù)為ASC(升序)或DESC(降序),缺省的情況下,系統(tǒng)默認為升序。在數(shù)據(jù)庫管理員建立索引后,它的使用和維護由數(shù)據(jù)庫系統(tǒng)自動進行,用戶不必也不能干預(yù)。一個基本表可以建立多個索引,以提供多條存取路徑,但是相應(yīng)基本表更新數(shù)據(jù)時會增加系統(tǒng)開銷。7/18/202265例4-10在學(xué)生表S的姓名列Sname上建立索引。 CREATE INDEX index_Sname ON S (Sn

25、ame);7/18/202266在SC表的學(xué)號Sno和課程編號Cno上建立唯一索引,要求學(xué)號為主索引且為升序,課程編號為降序。 CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);例4-117/18/202267注意:1. 改變表中的數(shù)據(jù)(如增加或刪除記錄)時,索引將自動更新。索引建立后,在查詢使用該列時,系統(tǒng)將自動使用索引進行查詢。 2. 索引數(shù)目無限制,但索引越多,更新數(shù)據(jù)的速度越慢。對于僅用于查詢的表可多建索引,對于數(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ù)庫的核心操作就是進行數(shù)據(jù)查詢。數(shù)據(jù)查詢就是根據(jù)用戶的需要,以一種可讀的方式從數(shù)據(jù)庫中提取所需要的數(shù)據(jù)。 7/18/2022714.3.1 SELECT命令的一般格式說明 SELECT ALL|DISTINCT , FROM , WHERE GROUP BY HAVING ORDER BY ASC| DESC ;7/18/202272SELECT子句指明要查詢的項目。ALL| DISTINCT為目標屬性, 使用ALL來顯示表中符合條件的所有行,默認

27、為ALL;使用DISTINCT選項時,刪除重復(fù)的數(shù)據(jù)行。7/18/202273FROM子句指明被查詢的基本表或視圖,它們之間用逗號隔開。WHERE子句指明查詢的條件。WHERE子句可以過濾掉不需要的數(shù)據(jù)行,用來查詢滿足指定條件的元組。7/18/202274GROUP BY子句指明如何將查詢結(jié)果進行分組。使用GROUP BY子句將查詢結(jié)果按某一列或多列值分組,值相等的為一組。如果GROUP子句帶HAVING短語,則只有滿足指定的組才給以輸出。 7/18/202275ORDER BY子句指明查詢結(jié)果如何排序。使用ORDER BY子句對查詢返回的結(jié)果按一列或多列排序。其中ASC表示升序,為默認值,D

28、ESC為降序。7/18/202276SELECT語句的執(zhí)行過程根據(jù)WHERE子句的檢索條件,從FROM子句指定的基本表或視圖中選取滿足條件的元組,再按照SELECT子句中指定的列,投影得到結(jié)果表。如果有GROUP子句,則將查詢結(jié)果按照相同的值進行分組。如果GROUP子句后有HAVING短語,則只輸出滿足HAVING條件的元組。如果有ORDER子句,查詢結(jié)果還要按照的值進行排序。查詢的結(jié)果是仍是一個表。7/18/2022774.3.1 單表查詢單表查詢是相對多表查詢而言的,指從一個數(shù)據(jù)表中查詢數(shù)據(jù)。因為單表查詢不涉及多個基本表的連接查詢和嵌套查詢等復(fù)雜的情況,所以也稱之為簡單查詢。7/18/20

29、2278例4-13 查詢學(xué)生表中所有學(xué)生的學(xué)號、年齡及姓名。解 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é)號。解:SELECT SnoFROM SC;7/18/202281例4-16 查詢所有的系院編號及名稱。解 SELECT Dno,系院名為:,DnameFROM D;7/18/202282例4-17 查詢?nèi)w學(xué)生的學(xué)號及其出生年份和所在系別。解

30、SELECT Sno,2011-Sage AS BirthYear,SdeptFROM S;7/18/202283例4-18 查詢每個系院的編號及其名稱,在每個系院名后都加上“系”字。解 SELECT Dno,Dname+ 系 AS 社團名稱 FROM D;“+”是一個字符運算符,表示字符串連接,該運算可以把兩個字符串連接成一個字符串。7/18/202284查詢表中的若干行(元組)1)消除取值重復(fù)的行在例4-15中,學(xué)生學(xué)號的重復(fù)行應(yīng)該去掉,因此,可以使用下面的語句實現(xiàn):解:SELECT DISTINCT Sno FROM SC;7/18/2022852)查詢滿足條件的元組例4-19查詢所有年

31、齡大于18歲的學(xué)生信息。 解SELECT * FROM SWHERE Sage18;7/18/202286WHERE子句常用的查詢條件運算符 7/18/202287比較運算符 、=、=、=、!、! =、! 比較運算符主要用來在WHERE子句中比較兩個值的大小。7/18/202288例4-20查詢學(xué)生表中所有男同學(xué)的信息。解 SELECT * FROM SWHERE Ssex=男;7/18/202289范圍運算符BETWEEN AND、NOT BETWEEN AND 范圍運算符用來判斷表達式的值是否在(不在)指定的范圍內(nèi)。 7/18/202290例4-21查詢考試成績在75到90之間的學(xué)生學(xué)號及

32、課程編號。解 SELECT Sno,Cno,ScoreFROM SCWHERE Score BETWEEN 75 AND 90;7/18/202291列表運算符IN (項1,項2) 、NOT IN (項1,項2) 用于判斷表達式是否為列表中的指定項。7/18/202292例4-22查詢選修課程A01或B02的學(xué)生學(xué)號以及成績。解 SELECT Sno,Score,CnoFROM SCWHERE Cno IN (A01,B02);7/18/202293模式匹配符(了解)LIKE、NOT LIKE 常用于模糊查找,判斷列值是否與指定的字符串格式相匹配。7/18/202294可使用以下通配字符: 百

33、分號*:可匹配任意類型和長度的字符。 下劃線_:匹配單個任意字符,它常用來限制表達式的字符長度。如果要表示中文字符,就要使用_ _,因為一個漢字需要占兩個字符的位置。7/18/202295方括號:指定一個字符、字符串或范圍,要求所匹配對象為它們中的任一個。:其取值也和 相同,但它要求所匹配對象為指定字符以外的任一個字符。 例如:限制以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é)生姓名是兩個字的學(xué)生的學(xué)號、姓名及年齡。SELECT Sno,Sname,SageFROM SWHERE Sname LIKE _ _ _ _;7/18/202298通配符%或_ 如果所查詢的字符或字符串本身帶有通配符%或_,則要使用轉(zhuǎn)義符ESCAPE對通配符進行轉(zhuǎn)義。 7/18/202299例4.25.列出課程名稱中帶有_的課程信息。解Select *From CWhere Cname LIKE %_% ESCAPE;7/18/2022100空值判斷符IS NULL、NOT IS NULL可以用來判斷某個列值是否為空。例4

35、-26 查詢年齡值為空的學(xué)生信息。解 Select * From S WHERE Sage IS NULL;7/18/2022101邏輯運算符此類運算符的優(yōu)先級為:NOT、AND、OR;用戶可以使用括號改變它們的優(yōu)先級;邏輯運算符可以用來連接多個查詢條件。7/18/2022102例4-27查詢所在系為003的年齡小于20歲的女同學(xué)的信息。解 SELECT * FROM S WHERE Sdept=003 AND Sage=2;7/18/20221125.使用ORDER BY子句對查詢結(jié)果排序使用ORDER BY子句對查詢返回的結(jié)果按一列或多列排序。在該子句中的ASC表示升序,為默認值,DESC

36、為降序。 7/18/2022113例4-34將所有學(xué)生信息按學(xué)號降序排列。解 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ù)庫使用中,很多情況下數(shù)據(jù)的查詢要跨兩個或多個表進行,這種查詢就稱為多表查詢??梢酝ㄟ^連接運算符實現(xiàn)多表查詢。連接是關(guān)系數(shù)據(jù)庫模型的主要特點,也是它區(qū)別于其它類型數(shù)據(jù)庫管理系統(tǒng)的一個標志。7/18/20221164.3.2 連接查詢

37、當檢索數(shù)據(jù)時,通過連接操作查詢出存放在多個表中的不同實體的信息。連接查詢可分為: 自連接查詢、內(nèi)部連接查詢、外部連接查詢和復(fù)合條件連接查詢。7/18/20221171自連接查詢連接不僅可以在表之間進行,也可以使一個表同其自身進行連接,這種連接稱為自身連接(self join),相應(yīng)的查詢稱為自連接查詢。在自連接查詢中,由于同一個基本表名在查詢語句中出現(xiàn)多次,為了區(qū)別表的每次出現(xiàn),需要為表定義一個別名。7/18/2022118例4-36查詢同一個系里年齡相同的學(xué)生學(xué)號、姓名、年齡和所在系信息。解 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)使用比較運算符進行表間某(些)列數(shù)據(jù)的比較操作,并列出這些表中與連接條件相匹配的數(shù)據(jù)行,如果數(shù)據(jù)無法滿足連接條件則將其丟棄。 內(nèi)連接查詢操作返回查詢結(jié)果集合中的僅是符合查詢條件(WHERE搜索條件或HAVING 條件)和連接條件的行。7/18/2022120例4-37查詢每個學(xué)生和他(她)所選修課程的詳細情況。解 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é)號低于選課表中學(xué)號的所有學(xué)生信息和選課信息的組合。解 SELECT S.*, SC.Sno, Cno,ScoreFROM S,SCWHERE S.Sno, =, =, !=)將父查詢和子查詢連接起來。7/18/2022132例4-42查詢與學(xué)號為03050211的學(xué)生在同一個系的學(xué)生的學(xué)號、姓名、性別及所在系。解 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修改的比較運算符的子查詢?nèi)绻硬樵兊姆祷刂挡恢挂粋€,而是一個集合時,則不能直接使用比較運算符,可以在比較運算符和子查詢之間插入ANY或ALL。其具體含義詳見下例。7/18/2022135例4-44查詢其它系中比003系所有學(xué)生年齡都小的學(xué)

41、生學(xué)號、姓名、年齡以及所在系。解 SELECT Sno,Sname,Sage,SdeptFROM SWHERE SageALL(SELECT SageFROM SWHERE Sdept=003)AND Sdept003;7/18/20221363. 使用謂詞IN的子查詢在嵌套查詢中,子查詢的結(jié)果在很多時候不僅是一個單值,而往往是一個集合,這時就要用到謂詞IN。在嵌套查詢中IN運算符也是最常用到的。7/18/2022137例4-45查詢選修了課程編號為B03的學(xué)生信息。解 SELECT * FROM S WHERE Sno IN(SELECT Sno FROM SC WHERE Cno=B03)

42、;7/18/2022138例4-46查詢選修了“大學(xué)語文”課程的學(xué)生的姓名、年齡和所在系。解 SELECT Sname,Sage,SdeptFROM SWHERE Sno IN(SELECT Sno FROM SC WHERE Cno = (SELECT Cno FROM C WHERE Cname=大學(xué)語文);7/18/20221394.使用謂詞EXISTS的子查詢EXISTS是謂詞,EXISTS或NOT EXISTS是用來檢查在子查詢中是否有結(jié)果返回,即存在元組或不存在元組。EXISTS代表存在量詞。帶有EXISTS的子查詢不返回任何數(shù)據(jù),只產(chǎn)生邏輯真值“true”或邏輯假值“false”

43、。7/18/2022140例4-47查詢所有選修了課程編號為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é)果進行比較以確定查詢結(jié)果集合。7/18/2022143相關(guān)子查詢的執(zhí)行順序是:首先選取父查詢表中的第一行記錄,內(nèi)部的子查詢利用此行中相關(guān)的屬性值進行查詢,然后父查詢根據(jù)子查詢返回的結(jié)果判斷此行是否滿足查詢條件。如果滿足條件,則把該行放入父查詢的查詢結(jié)果集合中。重復(fù)執(zhí)行這一過程,直到處理完父查詢表中的每一行數(shù)據(jù)。由此可以看出,相關(guān)子查詢的執(zhí)行次數(shù)是由父查詢表的行數(shù)決定的。7/18/20221444.3.4 組合查詢當兩個或多個查詢塊的結(jié)果為多個元組(即元組的集合)時,可以對這兩個或多個結(jié)果集進行集合運算,這種查詢稱之為組合查詢。進行集合運算的操作主要包括并(UNION)、交(INTERS

45、ECT)和差(MINUS)。7/18/2022145并(UNION)運算符可以將兩個或兩個以上的SELECT語句的查詢結(jié)果集合并成一個結(jié)果集顯示,即執(zhí)行聯(lián)合查詢。并操作會將查詢結(jié)果合并而且會去掉重復(fù)元組,如果要保留重復(fù)元組,則必須使用UNION ALL。7/18/2022146交操作是把同時出現(xiàn)在查詢結(jié)果中的元組取出。差操作是把出現(xiàn)在第一個查詢結(jié)果中但不出現(xiàn)在第二個查詢結(jié)果中的元組取出。在實際運用中很少用到交操作和差操作,標準SQL中沒有直接提供這兩種操作,可以用其它方法來實現(xiàn)。7/18/2022147例4-48查詢選修了課程編號為A02或選修了課程編號為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ù)庫的表中添加記錄;DELETE:從數(shù)據(jù)庫的表中刪除記錄;UPDATE:修改數(shù)據(jù)庫的表中已存在的記錄。7/18/20221494.4.1 插入數(shù)據(jù) 當創(chuàng)建新表時,新表不包含任何數(shù)據(jù)。要將新的行輸入表中,使用 INSERT 語句。此語句根據(jù)插入數(shù)據(jù)方式不同相應(yīng)地也有兩種不同格式: 插入元組值 插入子查詢的結(jié)果(了解)7/18/2022150插入元組值 插入數(shù)據(jù)為元組值的時候,使用 VALUES 子句來指定一行或多行

47、的列值。一般格式如下:INSERTINTO ( , ) VALUES (,);7/18/2022151在此語句中,是用來指定用來來插入新元組的表的名稱。常量1、常量2對應(yīng)為列名1、列名2的值。在INTO子句中沒有給出的列,系統(tǒng)將默認為空值。如果INTO子句中沒有給出任何列,則新插入的元組在每個列上都必須有值。 7/18/2022152例4-49課程表中新增加一門課,其課程編號為C05,課程名為WEB程序設(shè)計,學(xué)分為2,任課教師盧偉。請將此記錄添加到課程表C中。解 此題其實就是在課程表中添加一條課程記錄:(Cno(課程編號):C05,Cname(課程名稱):WEB程序設(shè)計,Ccredit(學(xué)分)

48、:2,Cteacher(任課教師):盧偉)使用INSERT語句將它加入到課程表中即可。解INSERTINTO CVALUES (C05,WEB程序設(shè)計,2,盧偉); 7/18/2022153例4-50學(xué)號為07070103的學(xué)生又選修了編號為A02的課程。解 INSERTINTO SC(Sno,Cno)VALUES (07070103,A02);7/18/2022154插入子查詢的結(jié)果指定全查詢而非指定 VALUES 來標識包含在其他表或視圖中的行的列。全查詢是 INSERT 或 CREATE VIEW 語句中所使用的選擇語句、或者是跟在謂詞后面的選擇語句。括在括號中的全查詢一般稱為子查詢。插

49、入的一般格式為:INSERT ( , ) 子查詢;7/18/2022155例4-51將建筑工程系學(xué)生的所有信息存入一個新表建筑工程系中。 見教材7/18/2022156.4. 刪除數(shù)據(jù) SQL中使用 DELETE 語句,基于在 WHERE 子句中指定的搜索條件從表中刪除數(shù)據(jù)行。其一般格式如下: DELETE FROM WHERE;7/18/2022157WHERE 子句是可選的,它指定要刪除的行。如果省略 WHERE 子句,則數(shù)據(jù)庫管理程序刪除表或視圖中的所有行。7/18/2022158例4-52刪除學(xué)號為03060105的學(xué)生的記錄。解 DELETEFROM SWHERE Sno=03060105;7/18/2022159.4. 修改數(shù)據(jù) SQL中使用 UPDATE 語句來更改表中的數(shù)據(jù)。使用此語句,可以更改滿足 WHERE 子句搜索條件的每行中的一列或多列的值。7/18/2022160一般格式如下:UPDATE SET = , = WHERE ;7/18/2022161用來指定要修改的表的名稱,修改該表中滿足WHERE子句條件的那些元組的列值。SET 子句指

溫馨提示

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

評論

0/150

提交評論