結(jié)構(gòu)化查詢語言SQL課件_第1頁
結(jié)構(gòu)化查詢語言SQL課件_第2頁
結(jié)構(gòu)化查詢語言SQL課件_第3頁
結(jié)構(gòu)化查詢語言SQL課件_第4頁
結(jié)構(gòu)化查詢語言SQL課件_第5頁
已閱讀5頁,還剩113頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、結(jié)構(gòu)化查詢語言SQL課件結(jié)構(gòu)化查詢語言SQL課件主要內(nèi)容SQL概述 SQL的數(shù)據(jù)定義SQL的數(shù)據(jù)查詢 數(shù)據(jù)更新 嵌入式SQL Transact SQL語言概述 主要內(nèi)容SQL概述 重點(diǎn)(1)使用CREATE語句和DROP語句創(chuàng)建或撤消數(shù)據(jù)庫、基本表、視圖。(2)使用SELECT語句表達(dá)式查詢(聯(lián)結(jié)、嵌套、存在量詞方式書寫查詢語句)。(3)使用INSERT、DELETE、UPDATE語句更新操作。(4)正確敘述SQL語句(定義、查詢和更新)。(5)正確理解嵌入式SQL語句所表示的意義。難點(diǎn)(1)對(duì)SELECT查詢語句的理解。(2)對(duì)視圖更新操作的限制。(3)涉及游標(biāo)的SQL DML的使用方式。本

2、章重點(diǎn)與難點(diǎn)重點(diǎn)本章重點(diǎn)與難點(diǎn)本章概述結(jié)構(gòu)化查詢語言SQL(Structured Query Language)是關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言,對(duì)關(guān)系模型的發(fā)展和商用DBMS的研制起著重要的作用。SQL語言是介乎于關(guān)系代數(shù)和元組演算之間的一種語言。本章詳細(xì)介紹SQL的核心部分內(nèi)容:數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)更新和嵌入式SQL。 本章概述結(jié)構(gòu)化查詢語言SQL(Structured Quer4.1 SQL概述 9/11/202254.1 SQL概述 9/10/20227主要內(nèi)容SQL的產(chǎn)生與發(fā)展SQL的組成及特點(diǎn)主要內(nèi)容SQL的產(chǎn)生與發(fā)展SQL的產(chǎn)生與發(fā)展 1970年,美國IBM研究中心的E.F.Codd連

3、續(xù)發(fā)表多篇論文,提出關(guān)系模型。1972年,IBM公司開始研制實(shí)驗(yàn)型關(guān)系數(shù)據(jù)庫管理系統(tǒng)SYSTEM R,配制的查詢語言稱為SQUARE (Specifying Queries As Relational Expression )語言,在語言中使用了較多的數(shù)學(xué)符號(hào)。1974年,Boyce和Chamberlin把SQUARE修改為SEQUEL (Structured English QueryLanguage )語言。后來SEQUEL簡(jiǎn)稱為SQL (Structured Query Language ),即“結(jié)構(gòu)式查詢語言”,SQL的發(fā)音仍為“sequel”。現(xiàn)在SQL已經(jīng)成為一個(gè)標(biāo)準(zhǔn) 。SQL有兩

4、個(gè)標(biāo)準(zhǔn):ANSI SQL和1992年通過的修改版本SQL-92(簡(jiǎn)稱SQL2)。還有一個(gè)新的標(biāo)準(zhǔn)SQL3,它擴(kuò)充了SQL2,引入了遞歸、觸發(fā)器和對(duì)象等概念和機(jī)制。SQL的產(chǎn)生與發(fā)展 1970年,美國IBM研究中心的E.F.SQL的組成及特點(diǎn) SQL語言從功能上可以分為四部分:數(shù)據(jù)查(Data Query)、數(shù)據(jù)操縱(Data Manipulation)、數(shù)據(jù)定義(Data Definition)和數(shù)據(jù)控制(Data Control)。核心SQL主要有四個(gè)部分:(1) 數(shù)據(jù)定義語言,即SQL DDL,用于定義SQL模式、基本表、視圖、索引等結(jié)構(gòu)。(2) 數(shù)據(jù)操縱語言,即SQL DML。數(shù)據(jù)操縱分

5、成數(shù)據(jù)查詢和數(shù)據(jù)更新兩類。其中數(shù)據(jù)更新又分成插入、刪除和修改三種操作。(3) 嵌入式SQL語言的使用規(guī)定。這一部分內(nèi)容涉及到SQL語句嵌入在宿主語言程序中的規(guī)則。(4) 數(shù)據(jù)控制語言,即SQL DCL,這一部分包括對(duì)基本表和視圖的授權(quán)、完整性規(guī)則的描述、事務(wù)控制等內(nèi)容。SQL的組成及特點(diǎn) SQL語言從功能上可以分為四部分:數(shù)據(jù)SQL的核心動(dòng)詞 SQL有兩種使用方式:一是聯(lián)機(jī)交互使用,另一種是嵌入到某種高級(jí)語言程序設(shè)計(jì)語言中去使用。SQL是一種第四代語言(4GL),用戶只需提出“干什么”,無需具體指明“怎么干”,像存取路徑選擇和具體處理操作等,均有系統(tǒng)自動(dòng)完成。功 能動(dòng) 詞數(shù)據(jù)庫查詢SELECT

6、數(shù)據(jù)定義CREATE,DROP數(shù)據(jù)操縱INSERT,UPDATE,DELECT數(shù)據(jù)控制GRANT,REVOKESQL的核心動(dòng)詞 SQL有兩種使用方式:一是聯(lián)機(jī)交互使用,另數(shù)據(jù)庫的創(chuàng)建與撤銷定義、修改與刪除基本表建立與刪除索引創(chuàng)建與刪除視圖4.2 SQL的數(shù)據(jù)定義數(shù)據(jù)庫的創(chuàng)建與撤銷4.2 SQL的數(shù)據(jù)定義SQL的數(shù)據(jù)定義操作對(duì)象操 作 方 式創(chuàng) 建刪 除修 改數(shù)據(jù)庫CREATE DATABASEDROP DATABASE表CREATE TABLEDROP TABLEALTER TABLE索 引CREATE INDEXDROP INDEX視 圖CREATE VIEWDROP VIEWSQL的數(shù)據(jù)定

7、義功能包括數(shù)據(jù)庫定義、表定義、視圖和索引的定義。 SQL的數(shù)據(jù)定義操作對(duì)象操 作 方 式創(chuàng) 建刪 除修 改數(shù)據(jù)SQL的數(shù)據(jù)定義(2)例4.1 定義一個(gè)教務(wù)管理數(shù)據(jù)庫JWGL,它包含3個(gè)表: 學(xué)生表:S(SNO,SNAME,SEX,AGE,SDEPT) 課程表:C(CNO,CNAME,CPNO,CCREDIT) 學(xué)生選課表:SC(SNO,CNO,GRADE) SQL的數(shù)據(jù)定義(2)例4.1 定義一個(gè)教務(wù)管理數(shù)據(jù)庫JWG學(xué)生表實(shí)例與選課表實(shí)例學(xué)號(hào)SNO課程號(hào)CNO成績(jī)GRADE200915121200915121200915121200915122200915122123239285889080學(xué)

8、號(hào)SNO姓名SNAME性別SEX年齡AGE所在系SDEPT200915121200915122200915123200915125李小勇劉 晨王洪敏張 力MFFM20191819CSCSMAIS學(xué)生表實(shí)例選課表實(shí)例學(xué)生表實(shí)例與選課表實(shí)例學(xué)號(hào)SNO課程號(hào)CNO成績(jī)GRADE2課程表實(shí)例課程號(hào)CNO課程名CNAME先修課CPNO學(xué)分CCREDIT1234567數(shù)據(jù)庫數(shù)學(xué)信息系統(tǒng)操作系統(tǒng)數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)處理C語言516764243424課程表實(shí)例課程表實(shí)例課程號(hào)CNO課程名CNAME先修課CPNO學(xué)分CC數(shù)據(jù)庫的創(chuàng)建對(duì)數(shù)據(jù)庫的創(chuàng)建可用CREATE語句實(shí)現(xiàn),句法如下: CREATE DATABASE AU

9、THORIZATION 其中AUTHORIZATION 是指該用戶獲得授予創(chuàng)建和使用數(shù)據(jù)庫的權(quán)限。 例如,下面語句定義了教務(wù)管理數(shù)據(jù)庫的模式: CREATE DATABASE JWGL AUTHORIZATION張銘 創(chuàng)建的數(shù)據(jù)庫名為JWGL,擁有者為張銘。數(shù)據(jù)庫的創(chuàng)建對(duì)數(shù)據(jù)庫的創(chuàng)建可用CREATE語句實(shí)現(xiàn),句法如下數(shù)據(jù)庫的撤銷使用DROP語句撤消數(shù)據(jù)庫。DROP語句的句法如下:DROP DATABASE CASCADE | RESTRICT撤消的方式有以下兩種:CASCADE(連鎖式)方式:執(zhí)行DROP語句時(shí),把數(shù)據(jù)庫及其下屬的基本表、視圖、索引等所有元素全部撤消。 RESTRICT(約束式

10、)方式:執(zhí)行DROP語句時(shí),只有當(dāng)數(shù)據(jù)庫中沒有任何下屬元素時(shí),才能撤消數(shù)據(jù)庫,否則拒絕執(zhí)行DROP語句。 例如,要撤消數(shù)據(jù)庫JWGL及其下屬所有的元素,可用下列語句實(shí)現(xiàn): DROP DATABASE JWGL CASCADE 數(shù)據(jù)庫的撤銷使用DROP語句撤消數(shù)據(jù)庫。DROP語句的句法基本表的定義、修改與刪除數(shù)據(jù)類型 一個(gè)屬性選用哪種數(shù)據(jù)類型要根據(jù)實(shí)際情況來決定,一般要從兩個(gè)方面來考慮,一是取值范圍,二是要做哪些運(yùn)算。基本表的定義、修改與刪除數(shù)據(jù)類型 數(shù)據(jù)類型數(shù)據(jù)類型含 義CHAR(n)VARCHAR(n)INTSMALLINTNUMERIC(p,d)REALDOUBLE PRECISIONFL

11、OAT(n)DATETIME度為n的定長(zhǎng)字符串 最大長(zhǎng)度為n的變長(zhǎng)字符串長(zhǎng)整數(shù)(也可以寫作INTEGER)短整數(shù)定點(diǎn)數(shù),由P位數(shù)字(不包括符號(hào)、小數(shù)點(diǎn))組成,小數(shù)后面有d位數(shù)字取決于機(jī)器精度的浮點(diǎn)數(shù)取決于機(jī)器精度的雙精度浮點(diǎn)數(shù)浮點(diǎn)數(shù),精度至少為n位數(shù)字日期,包含年、月、日,格式為YYYY-MM-DD 時(shí)間,包含一日的時(shí)、分、秒,格式為HH:MM:SS不同的RDBMS中支持的數(shù)據(jù)類型不完全相同 數(shù)據(jù)類型數(shù)據(jù)類型含 義CHAR(n)度為n的定長(zhǎng)字符定義基本表定義基本表,就是創(chuàng)建基本表的結(jié)構(gòu)。其一般格式為: CREATE TABLE ( 列級(jí)完整性約束條件 , 列級(jí)完整性約束條件 ,); 建表的同時(shí)

12、通常還可以定義與該表有關(guān)的完整性約束條件,這些完整性約束條件被存入系統(tǒng)的數(shù)據(jù)字典中,當(dāng)用戶操作表中數(shù)據(jù)時(shí)由RDBMS自動(dòng)檢查該操作是否違背這些完整性約束條件。定義基本表定義基本表,就是創(chuàng)建基本表的結(jié)構(gòu)。其一般格式為: CREATE TABLE S (SNO CHAR(9) PRIMARY KEY, /* 列級(jí)完整性約束條件,SNO是主碼 */ SNAME CHAR(20) UNIQUE, /* SNAME取唯一值 */ SEX CHAR(1), AGE SMALLINT, SDEPT CHAR(20) ); 系統(tǒng)執(zhí)行上面的CREATE TABLE語句后,就在數(shù)據(jù)庫中建立一個(gè)新的空的“學(xué)生”表S

13、,并將有關(guān)“學(xué)生”表的定義及有關(guān)約束條件存放在數(shù)據(jù)字典中。例:建立學(xué)生表CREATE TABLE S 例:建立學(xué)生表例:建立學(xué)生選課表CREATE TABLE SC (SNO CHAR(9), CNO CHAR(4), GRADE SMALLINT, PRIMARY KEY(SNO,CNO), /* 主碼由兩個(gè)屬性構(gòu)成,必須作為表級(jí)完整性進(jìn)行定義 */ FOREIGN KEY(SNO) REFERENCES S(SNO), /* 表級(jí)完整性約束條件,SNO是外碼,被參照表是S */ FOREIGN KEY(CNO) REFERENCES C(CNO) /* 表級(jí)完整性約束條件,CNO是外碼,被

14、參照表是C */ ); 例:建立學(xué)生選課表CREATE TABLE SC 修改基本表SQL語言用ALTER TABLE語句修改基本結(jié)構(gòu)表,格式為: ALTER TABLE ADD 完整性約束DROP ALTER COLUMN ; 其中是要修改的基本表。ADD子句用于增加新列和新的完整性約束條件;DROP子句用于刪除指定的完整性約束條件;ALTER COLUMN子句用于修改原有的列定義。包括修改列名和數(shù)據(jù)類型。 例如,向S表增加“入學(xué)時(shí)間”列,其數(shù)據(jù)類型為日期型。 ALTER TABLE S ADD S_ENTRANCE DATE; 不論基本表中原來是否已有數(shù)據(jù),新增加的列一律為空值。修改基本表

15、SQL語言用ALTER TABLE語句修改基本結(jié)構(gòu)刪除基本表用DROP TABLE語句刪除基本表。格式為: DROP TABLE RESTRICT | CASCADE; 若選擇RESTRICT:則該表的刪除是有限制條件的。欲刪除的基本表不能被其他表的約束所引用(如CHECK,F(xiàn)OREIGN KEY等約束),不能有視圖,不能有觸發(fā)器(trigger),不能有存儲(chǔ)過程或函數(shù)等。如果存在這些依賴該表的對(duì)象,則此表不能被刪除。 若選擇CASCADE:則該表的刪除沒有限制條件。在刪除基本表的同時(shí),相關(guān)的依賴對(duì)象,例如視圖,都將被一起刪除。 缺省情況是RESTRICT。 例4.8 刪除S表。 DROP T

16、ABLE S CASCADE; 刪除基本表用DROP TABLE語句刪除基本表。格式為: 建立索引建立索引使用CREATE INDEX語句,格式為: CREATE UNIQUECLUSTER INDEX ON (,); 其中,是要建索引的基本表的名字。索引可以建立在該表的一列或多列上,各列名之間用逗號(hào)分隔。每個(gè)后面還可以用指定索引值的排列次序,可選ASC(升序)或DESC(降序),缺省值為ASC。 UNIQUE表明此索引的每一個(gè)索引值只對(duì)應(yīng)唯一的數(shù)據(jù)記錄。 CLUSTER表示要建立的索引是聚簇索引。所謂聚簇索引是指索引項(xiàng)的順序與表中記錄的物理順序一致的索引組織。例: CREATE CLUSTE

17、R INDEX STUSNAME ON S(SNAME); 將會(huì)在S表的SNAME(姓名)列上建立一個(gè)聚簇索引,而且S表中的記錄將按照SNAME值的升序存放。 建立索引建立索引使用CREATE INDEX語句,格式為: 刪除索引索引一經(jīng)建立,就由系統(tǒng)使用和維護(hù)它,不需用戶干預(yù)。建立索引是為了減少查詢操作的時(shí)間,但如果數(shù)據(jù)增刪改頻繁,系統(tǒng)會(huì)花費(fèi)許多時(shí)間來維護(hù)索引,從而降低了查詢效率。這時(shí),可以刪除一些不必要的索引。 刪除索引使用DROP INDEX語句,其一般格式為 DROP INDEX ; 例: 刪除S表的STUSNAME索引。 DROP INDEX STUSNAME; 刪除索引時(shí),系統(tǒng)會(huì)同時(shí)

18、從數(shù)據(jù)字典中刪去有關(guān)該索引的描述。刪除索引索引一經(jīng)建立,就由系統(tǒng)使用和維護(hù)它,不需用戶干預(yù)。建視圖視圖是從一個(gè)或幾個(gè)基本表(或視圖)導(dǎo)出的表。它與基本表不同,是一個(gè)虛表。數(shù)據(jù)庫中只存放視圖的定義,而不存放視圖對(duì)應(yīng)的數(shù)據(jù),這些數(shù)據(jù)仍存放在原來的基本表中。 視圖視圖是從一個(gè)或幾個(gè)基本表(或視圖)導(dǎo)出的表。它與基本表不建立視圖用CREATE VIEW命令建立視圖,格式為:CREATE VIEW (,)AS WITH CHECK OPTION; 其中,子查詢可以是任意復(fù)雜的SELECT語句,但通常不允許含有ORDER BY子句和DISTINCT短語。 WITH CHECK OPTION表示對(duì)視圖進(jìn)行U

19、PDATE,INSERT和DELETE操作時(shí)要保證更新、插入或刪除的行滿足視圖定義中的謂詞條件(即子查詢中的條件表達(dá)式)。建立視圖用CREATE VIEW命令建立視圖,格式為:組成視圖的屬性列名或者全部省略或者全部指定,如果省略了視圖的各個(gè)屬性列名,則隱含該視圖由子查詢中SELECT子句目標(biāo)列中的諸字段組成。但在下列三種情況下必須明確指定組成視圖的所有列名:某個(gè)目標(biāo)列不是單純的屬性名,而是聚集函數(shù)或列表達(dá)式;多表連接時(shí)選出了幾個(gè)同名列作為視圖的字段;需要在視圖中為某個(gè)列啟用新的名字。例: 建立信息系學(xué)生的視圖,并要求進(jìn)行修改和插入操作時(shí)仍需保證該視圖只有信息系的學(xué)生。CREATE VIEW I

20、S_S1 AS SELECT SNO,SNAME,AGE FROM S WHERE SDEPT=IS WITH CHECK OPTION; 加上了WITH CHECK OPTION子句,以后對(duì)該視圖進(jìn)行插入、修改和刪除操作時(shí),RDBMS會(huì)自動(dòng)加上SDEPT=IS的條件。 視圖中的字段組成視圖的屬性列名或者全部省略或者全部指定,如果省略了視圖的視圖若一個(gè)視圖是從單個(gè)基本表導(dǎo)出的,并且只是去掉了基本表的某些行和某些列,但保留了主碼,我們稱這類視圖為行列子集視圖。視圖不僅可以建立在單個(gè)基本表上,也可以建立在多個(gè)基本表上。例:建立信息系選修了l號(hào)課程的學(xué)生的視圖。CREATEVIEWIS_S2(SNO

21、,SNAME,GRADE)ASSELECTS.SNO,SNAME,GRADEFROMS,SCWHERESDEPT=ISANDS.SNO=SC.SNOANDSC.CNO=1;由于視圖IS_S2的屬性列中包含了S表與SC表的同名列SNO,所以必須在視圖名后面明確說明視圖的各個(gè)屬性列名。視圖不僅可以建立在一個(gè)或多個(gè)基本表上,也可以建立在一個(gè)或多個(gè)已定義好的視圖上,或建立在基本表與視圖上。視圖若一個(gè)視圖是從單個(gè)基本表導(dǎo)出的,并且只是去掉了基本表的某該語句的一般格式為: DROP VIEW CASCADE; 視圖刪除后,視圖的定義將從數(shù)據(jù)字典中被刪除。如果該視圖上還導(dǎo)出了其他視圖,則使用CASCADE級(jí)

22、聯(lián)刪除語句,就可以把該視圖和由它導(dǎo)出的所有視圖一起刪除。 基本表刪除后,由該基本表導(dǎo)出的所有視圖(定義)沒有被刪除,但均已無法使用了。刪除這些視圖(定義)需要使用DROP VIEW語句。 例:刪除視圖BT_S: DROP VIEW BT_S; 刪除視圖IS_S1: DROP VIEW IS_S1; 刪除視圖該語句的一般格式為: 刪除視圖4.3 SQL的數(shù)據(jù)查詢9/11/2022314.3 SQL的數(shù)據(jù)查詢9/10/202233主要內(nèi)容SELECT語句格式單表查詢聚集函數(shù)數(shù)據(jù)分組多表查詢集合操作主要內(nèi)容SELECT語句格式 SELECT語句格式SELECTFROMWHERE句型在關(guān)系代數(shù)中最常用

23、的式子是下列表達(dá)式: A1,An(F(R1Rm) 這里R1、Rm為關(guān)系,F(xiàn)是公式,A1、An為屬性。針對(duì)上述表達(dá)式,SQL為此設(shè)計(jì)了SELECTFROMWHERE句型:SELECT A1,AnFROM R1,RmWHERE F 這個(gè)句型是從關(guān)系代數(shù)表達(dá)式演變來的,但WHERE子句中的條件表達(dá)式F要比關(guān)系代數(shù)中公式更靈活。 SELECT語句格式SELECTFROMWHERE句型SELECT語句格式SELECT語句完整的句法如下: SELECT 目標(biāo)表的列名或列表達(dá)式序列 FROM 基本表名和(或)視圖序列 WHERE 行條件表達(dá)式 GROUP BY 列名序列 HAVING 組條件表達(dá)式 ORDE

24、R BY 列名 ASC|DESC , 主語句SELECT-FROM-WHERE的含義是: 根據(jù)WHERE子句的條件表達(dá)式,從FROM子句指定的基本表或視圖中找出滿足條件的元組,再按SELECT子句中的目標(biāo)列表達(dá)式,選出元組中的屬性值形成結(jié)果表。 SELECT語句格式SELECT語句完整的句法如下: 整個(gè)語句的執(zhí)行過程如下:(1) 讀取FROM子句中基本表、視圖的數(shù)據(jù),執(zhí)行笛卡爾積操作。(2) 選取滿足WHERE子句中給出的條件表達(dá)式的元組。(3) 按GROUP子句中指定列的值分組,同時(shí)提取滿足HAVING子句中組條件表達(dá)式的那些組。(4) 按SELECT子句中給出的列名或列表達(dá)式求值輸出。(5

25、) ORDER子句對(duì)輸出的目標(biāo)表進(jìn)行排序,按附加說明ASC升序排列,或按DESC降序排列。SELECT語句格式整個(gè)語句的執(zhí)行過程如下:SELECT語句格式單表查詢 查詢指定列 在很多情況下,用戶只對(duì)表中的一部分屬性列感興趣,這時(shí)可以通過在SELECT子句的中指定要查詢的屬性列。 例:查詢?nèi)w學(xué)生的學(xué)號(hào)與姓名。 SELECT SNO,SNAME FROM S; 該語句的執(zhí)行過程可以是這樣的:從S表中取出一個(gè)元組,再取出該元組在屬性SNO和SNAME上的值,形成一個(gè)新的元組作為輸出。對(duì)S表中的所有元組做相同的處理,最后形成一個(gè)結(jié)果關(guān)系作為輸出。單表查詢 查詢指定列 查詢?nèi)苛袑⒈碇械乃袑傩粤卸歼x

26、出來,可以有兩種方法。一種方法就是在SELECT關(guān)鍵字后面列出所有列名;另一種方法是如果列的顯示順序與其在基表中的順序相同,也可以簡(jiǎn)單地將指定為“*”。 例:查詢?nèi)w學(xué)生的詳細(xì)記錄。 SELECT * FROM S; 等價(jià)于: SELECT SNO,SNAME,SEX,AGE,SDEPT FROM S; 查詢?nèi)苛袑⒈碇械乃袑傩粤卸歼x出來,可以有兩種方法。一種方選擇表中的若干元組 消除取值重復(fù)的行 兩個(gè)本來并不完全相同的元組,投影到指定的某些列上后,可能變成相同的行了,可以用DISTINCT取消它們。 例:查詢選修了課程的學(xué)生學(xué)號(hào)。 SELECT SNO FROM SC; 該查詢結(jié)果里包含了

27、許多重復(fù)的行。如果想去掉結(jié)果表中的重復(fù)行,必須指定DISTINCT關(guān)鍵詞: SELECT DISTINCT SNO FROM SC; 選擇表中的若干元組 消除取值重復(fù)的行 查詢滿足條件的元組 查詢滿足指定條件的元組可以通過WHERE子句實(shí)現(xiàn)。例:查詢計(jì)算機(jī)科學(xué)系全體學(xué)生的名單。 SELECT SNAME FROM S WHERE SDEPT=CS;查 詢 條 件謂 詞比較確定范圍確定集合字符匹配空 值多重條件(邏輯運(yùn)算)=,=,=,!=,!,!,NOT+上述運(yùn)算符BETWEEN AND,NOT BETWEEN ANDIN,NOT INLIKE,NOT LIKE IS NULL,IS NOT N

28、ULL AND,OR,NOT 查詢滿足條件的元組 查詢滿足指定條件的元組可以通過WHE范圍查詢謂詞BETWEENAND和NOT BETWEENAND可以用來查找屬性值在(或不在)指定范圍內(nèi)的元組,其中BETWEEN后是范圍的下限(即低值),AND后是范圍的上限(即高值)。例:查詢年齡在2023歲(包括20歲和23歲)之間的學(xué)生的姓名、系別和年齡。 SELECT SNAME,SDEPT,AGE FROM S WHERE AGE BETWEEN 20 AND 23; 與BETWEENAND相對(duì)的謂詞是NOT BETWEENAND。例:查詢年齡不在2023歲之間的學(xué)生姓名、系別和年齡。 SELECT

29、 SNAME,SDEPT,AGE FROM SWHERE AGE NOT BETWEEN 20 AND 23; 范圍查詢謂詞BETWEENAND和NOT BETWEEN確定集合謂詞IN可以用來查找屬性值屬于指定集合的元組。例:查詢計(jì)算機(jī)科學(xué)系(CS)、數(shù)學(xué)系(MA)和信息系(IS)學(xué)生的姓名和性別。 SELECT SNAME,SEX FROM S WHERE SDEPT IN(CS,MA,IS);與IN相對(duì)的謂詞是NOT IN,用于查找屬性值不屬于指定集合的元組。例:查詢既不是計(jì)算機(jī)科學(xué)系、數(shù)學(xué)系,也不是信息系的學(xué)生的姓名和性別。 SELECT SNAME,SEX FROM S WHERE S

30、DEPT NOT IN(CS,MA,IS); 確定集合謂詞IN可以用來查找屬性值屬于指定集合的元組。字符匹配謂詞LIKE可以用來進(jìn)行字符串的匹配。其一般語法格式如下:NOT LIKE ESCAPE其含義是查找指定的屬性列值與相匹配的元組。可以是一個(gè)完整的字符串,也可以含有通配符%和_。%(百分號(hào))代表任意長(zhǎng)度(長(zhǎng)度可以為0)的字符串。例如a%b表示以a開頭,以b結(jié)尾的任意長(zhǎng)度的字符串。如acb,addgb,ab等都滿足該匹配串。_(下劃線)代表任意單個(gè)字符。例如a_b表示以a開頭,以b結(jié)尾的長(zhǎng)度為3的任意字符串。如acb,afb等都滿足該匹配串。字符匹配謂詞LIKE可以用來進(jìn)行字符串的匹配。其

31、一般語法格式例:查詢學(xué)號(hào)為200915121的學(xué)生的詳細(xì)情況。 SELECT * FROM S WHERE SNO LIKE 200915121; 等價(jià)于: SELECT * FROM S WHERE SNO=200915121;如果LIKE后面的匹配串中不含通配符,則可以用=(等于)運(yùn)算符取代LIKE謂詞,用!=或(不等于)運(yùn)算符取代NOT LIKE謂詞。例: 查詢所有姓劉的學(xué)生的姓名、學(xué)號(hào)和性別。 SELECT SNAME,SNO,SEX FROM S WHERE SNAME LIKE 劉%; 單表查詢舉例 例:查詢學(xué)號(hào)為200915121的學(xué)生的詳細(xì)情況。單表查詢舉 涉及空值的查詢例例:

32、某些學(xué)生選修課程后沒有參加考試,所以有選課記錄,但沒有考試成績(jī)。查詢?nèi)鄙俪煽?jī)的學(xué)生的學(xué)號(hào)和相應(yīng)的課程號(hào)。 SELECT SNO,CNO FROM SC WHERE GRADE IS NULL; /* 分?jǐn)?shù)GRADE是空值 */ 多重條件查詢可用邏輯運(yùn)算符AND和OR來聯(lián)結(jié)多個(gè)查詢條件。AND的優(yōu)先級(jí)高于OR,但可以用括號(hào)改變優(yōu)先級(jí)。例:查詢計(jì)算機(jī)科學(xué)系年齡在20歲以下的學(xué)生姓名。 SELECT SNAME FROM S WHERE SDEPT=CS AND AGE20; 單表查詢舉例 涉及空值的查詢例單表查詢舉例 用戶可以用ORDER BY子句對(duì)查詢結(jié)果按照一個(gè)或多個(gè)屬性列的升序(ASC)或降

33、序(DESC)排列,缺省值為升序。例:查詢選修了3號(hào)課程的學(xué)生的學(xué)號(hào)及其成績(jī),查詢結(jié)果按分?jǐn)?shù)的降序排列。 SELECT SNO,GRADE FROM SC WHERE CNO=3 ORDER BY GRADE DESC;對(duì)于空值,若按升序排列,含空值的元組將在最后顯示。若按降序排列,空值的元組將在最前面顯示。ORDER BY子句用戶可以用ORDER BY子句對(duì)查詢結(jié)果按照一個(gè)或多個(gè)屬性列 聚合函數(shù)是涉及整個(gè)關(guān)系的另一類運(yùn)算操作。通過聚合函數(shù),可以把某一列中的值形成單個(gè)值。SQL不僅允許聚合屬性上的值,而且可以按照某個(gè)準(zhǔn)則將關(guān)系中的元組分組。COUNT(*) 計(jì)算元組的個(gè)數(shù)。COUNT(列名)

34、對(duì)一列中的值計(jì)算個(gè)數(shù)。SUM(列名) 求某一列值的總和(此列的值必須是數(shù)值型)。AVG(列名) 求某一列值的平均值(此列的值必須是數(shù)值型)。MAX(列名) 求某一列值的最大值。MIN(列名) 求某一列值的最小值。 如果指定在列名前面指明DISTINCT短語,則表示在計(jì)算時(shí)要取消指定列中的重復(fù)值。如果不指定DISTINCT短語或指定ALL短語(ALL為缺省值),則表示不取消重復(fù)值。 聚集函數(shù) (1) 聚合函數(shù)是涉及整個(gè)關(guān)系的另一類運(yùn)算操作。通過聚合函數(shù),例:查詢選修了課程的學(xué)生人數(shù)。 SELECT COUNT(DISTINCT SNO) FROM SC;學(xué)生每選修一門課,在SC中都有一條相應(yīng)的記

35、錄。一個(gè)學(xué)生要選修多門課程,為避免重復(fù)計(jì)算學(xué)生人數(shù),必須在COUNT函數(shù)中用DISTINCT短語。例: 計(jì)算選修l號(hào)課程的學(xué)生平均成績(jī)。 SELECT AVG(GRADE) FROM SC WHERE CNO=1;例:查詢選修l號(hào)課程的學(xué)生最高分?jǐn)?shù)。 SELECT MAX(GRADE) FROM SC WHERE CNO=1; 聚集函數(shù) (2) 例:查詢選修了課程的學(xué)生人數(shù)。 聚集函數(shù) (2) 對(duì)查詢結(jié)果分組的目的是為了細(xì)化聚集函數(shù)的作用對(duì)象。如果未對(duì)查詢結(jié)果分組,聚集函數(shù)將作用于整個(gè)查詢結(jié)果。在實(shí)際應(yīng)用中,經(jīng)常需要將查詢結(jié)果進(jìn)行分組,然后再對(duì)每個(gè)分組進(jìn)行統(tǒng)計(jì)。GROUP BY子句將查詢結(jié)果按

36、某一列或多列的值分組,值相等的為一組,分組后聚集函數(shù)將作用于每一個(gè)組,即每一組都有一個(gè)函數(shù)值。 例: 求各個(gè)課程號(hào)及相應(yīng)的選課人數(shù)。 SELECT CNO,COUNT(SNO) FROM SC GROUP BY CNO;該語句對(duì)查詢結(jié)果按CNO的值分組,所有具有相同CNO值的元組為一組,然后對(duì)每一組作用聚集函數(shù)COUNT計(jì)算,以求得該組的學(xué)生人數(shù)。如果分組后還要求按一定的條件對(duì)這些組進(jìn)行篩選,最終只輸出滿足指定條件的組,則可以使用HAVING短語指定篩選條件。 數(shù)據(jù)分組對(duì)查詢結(jié)果分組的目的是為了細(xì)化聚集函數(shù)的作用對(duì)象。如果未對(duì)查在多表查詢中,如果要引用不同關(guān)系中的同名屬性,則需要在屬性名前加關(guān)

37、系名,即用“關(guān)系名.屬性名”的形式表示,以便區(qū)分。連接查詢 等值與非等值連接查詢 連接查詢的WHERE子句中用來連接兩個(gè)表的條件稱為連接條件或連接謂詞,其一般格式為: . .其中比較運(yùn)算符主要有:=、=、=、!=(或)等。 此外連接謂詞還可以使用下面形式: . BETWEEN . AND . 多表查詢 (1) 在多表查詢中,如果要引用不同關(guān)系中的同名屬性,則需要在屬性名 例:查詢每個(gè)學(xué)生及其選修課程的情況。 學(xué)生情況存放在S表中,學(xué)生選課情況存放在SC表中,所以本查詢實(shí)際上涉及S與SC兩個(gè)表。這兩個(gè)表之間的聯(lián)系是通過公共屬性SNO實(shí)現(xiàn)的。 SELECT S.*,SC.* FROM S,SC W

38、HERE S.SNO=SC.SNO; /* 將S與SC中同一學(xué)生的元組連接起來 */ 執(zhí)行步驟:首先在表S中找到第一個(gè)元組,然后從頭開始掃描SC表,逐一查找與S第一個(gè)元組的SNO相等的SC元組,找到后就將S中的第一個(gè)元組與該元組拼接起來,形成結(jié)果表中一個(gè)元組。SC全部查找完后,再找S中第二個(gè)元組,然后再從頭開始掃描SC,逐一查找滿足連接條件的元組,找到后就將S中的第二個(gè)元組與該元組拼接起來,再形成結(jié)果表中一個(gè)元組。重復(fù)上述操作,直到S中的全部元組都處理完畢為止。這就是循環(huán)嵌套算法的基本思想 。多表查詢 (2) 例:查詢每個(gè)學(xué)生及其選修課程的情況。多表查詢 (2) (2) 自身連接連接操作不僅可

39、以在兩個(gè)表之間進(jìn)行,也可以是一個(gè)表與其自己進(jìn)行連接,稱為表的自身連接。例:查詢每一門課的間接先修課(即先修課的先修課)。在C表中,只有每門課的直接先修課信息,而沒有先修課的先修課。要得到這個(gè)信息,必須先對(duì)一門課找到其先修課,再按此先修課的課程號(hào),查找它的先修課程。這就將C表與其自身連接。為此,要為C表取兩個(gè)別名,一個(gè)是FIRST,另一個(gè)是SECOND。完成該查詢的SQL語句為 SELECT FIRST.CNO,SECOND.CPNO FROM C FIRST,C SECOND WHERE FIRST.CPNO=SECOND.CNO; (2) 自身連接連接操作不僅可以在兩個(gè)表之間進(jìn)行,也可以是一

40、有時(shí)想以S表為主體列出每個(gè)學(xué)生的基本情況及其選課情況。若某個(gè)學(xué)生沒有選課,仍把舍棄的表S元組保存在結(jié)果關(guān)系中,而在SC表的屬性上填空值(NULL),這時(shí)就需要使用外連接。例4.56 查詢每個(gè)學(xué)生及其選修課程的情況。 : SELECT S.SNO,SNAME,SEX,AGE,SDEPT,CNO,GRAGE FROM S LEFT OUT JOIN SC ON(S.SNO=SC.SNO); /* 也可以使用USING來去掉結(jié)果中的重復(fù)值: FROM S LEFT OUT JOIN SC USING(SNO); */ (3) 外連接有時(shí)想以S表為主體列出每個(gè)學(xué)生的基本情況及其選課情況。若某個(gè)(4)

41、復(fù)合條件連接WHERE子句中可以有多個(gè)連接條件,稱為復(fù)合條件連接。例: 查詢選修2號(hào)課程且成績(jī)?cè)?0分以上的所有學(xué)生的學(xué)號(hào)和姓名。 SELECT S.SNO,SNAME FROM S,SC WHERE S.SNO=SC.SNO AND SC.CNO=2 AND SC.GRADE90; 該查詢的一種優(yōu)化(高效)的執(zhí)行過程是先從SC中挑選出CNO=2并且GRADE90的元組形成一個(gè)中間關(guān)系,再和S中滿足連接條件的元組進(jìn)行連接得到最終的結(jié)果關(guān)系。 (4) 復(fù)合條件連接WHERE子句中可以有多個(gè)連接條件,稱為嵌套查詢 確定“劉晨”所在系名 SELECT SDEPT FROM S WHERE SNAME

42、=劉晨;結(jié)果為:CS 查找所有在CS系學(xué)習(xí)的學(xué)生。 SELECT SNO,SNAME,SDEPT FROM S WHERE SDEPT=CS; 在SQL語言中,一個(gè)SELECTFROMWHERE語句稱為一個(gè)查詢塊。將一個(gè)查詢塊嵌套在另一個(gè)查詢塊的WHERE子句或HAVING短語的條件中的查詢稱為嵌套查詢(nested query)。 帶有IN謂詞的子查詢 例:查詢與“劉晨”在同一個(gè)系學(xué)習(xí)的學(xué)生。先分步來完成此查詢,然后再構(gòu)造嵌套查詢。嵌套查詢 確定“劉晨”所在系名 查找所有在CS系學(xué)將第一步查詢嵌人到第二步查詢的條件中,構(gòu)造嵌套查詢?nèi)缦拢?SELECT SNO,SNAME,SDEPT FROM

43、 S WHERE SDEPT IN (SELECT SDEPT FROM S WHERE SNAME=劉晨 ); 本例中,子查詢的查詢條件不依賴于父查詢,稱為不相關(guān)子查詢。一種求解方法是由里向外處理,即先執(zhí)行子查詢,子查詢的結(jié)果用于建立其父查詢的查找條件。 嵌套查詢將第一步查詢嵌人到第二步查詢的條件中,構(gòu)造嵌套查詢?nèi)缦拢呵短桌? 查詢選修了課程名為“信息系統(tǒng)”的學(xué)生學(xué)號(hào)和姓名。 本查詢涉及學(xué)號(hào)、姓名和課程名3個(gè)屬性。學(xué)號(hào)和姓名存放在S表中,課程名存放在C表中,但S與C兩個(gè)表之間沒有直接聯(lián)系,必須通過SC表建立它們二者之間的聯(lián)系。所以本查詢實(shí)際上涉及3個(gè)關(guān)系。 SELECT SNO,SNAME

44、/* 外層在S關(guān)系中取出SNO和SNAME */ FROM SWHERE SNO IN (SELECT SNO /* 在SC關(guān)系中找出選修了3號(hào)課程的學(xué)生學(xué)號(hào) */ FROM SC WHERE CNO IN (SELECT CNO /* 在C關(guān)系中找出“信息系統(tǒng)”的課 FROM C 程號(hào),結(jié)果為3號(hào) */ WHERE CNAME=信息系統(tǒng) ) ); 嵌套查詢例: 查詢選修了課程名為“信息系統(tǒng)”的學(xué)生學(xué)號(hào)和姓名。 本查詢同樣可以用連接查詢實(shí)現(xiàn): SELECT S.SNO,SNAME FROM S,SC,C WHERE S.SNO=SC.SNO AND SC.CNO=C.CNO AND C.CNA

45、ME=信息系統(tǒng); 說明: 有些嵌套查詢可以用連接運(yùn)算替代,有些是不能替代的。如果子查詢的查詢條件依賴于父查詢,這類子查詢稱為相關(guān)子查詢(Correlated Subquery)。 例: 找出每個(gè)學(xué)生超過他選修課程平均成績(jī)的課程號(hào)。 SELECT SNO,CNO FROM SC X WHERE GRADE=(SELECT AVG(GRADE) /* 某學(xué)生的平均成績(jī) */ FROM SC Y WHERE Y.SNO=X.SNO); 嵌套查詢本查詢同樣可以用連接查詢實(shí)現(xiàn):嵌套查詢例:查詢其他系中比計(jì)算機(jī)科學(xué)系某一學(xué)生年齡小的學(xué)生姓名和年齡。 SELECT SNAME,AGE FROM S WHER

46、E AGE ANY(SELECT AGE FROM S WHERE SDEPT=CS) AND SdeptCS; 嵌套查詢注意這是父查詢塊中的條件 RDBMS執(zhí)行此查詢時(shí),首先處理子查詢,找出CS系中所有學(xué)生的年齡,構(gòu)成一個(gè)集合(20,19)。然后處理父查詢,找所有不是CS系且年齡小于20或l9的學(xué)生。 例:查詢其他系中比計(jì)算機(jī)科學(xué)系某一學(xué)生年齡小的學(xué)生姓名和年齡 子查詢的結(jié)果是一個(gè)關(guān)系,可用于這個(gè)關(guān)系的SQL運(yùn)算符有:IN,ALL,ANY。多表查詢 子查詢的結(jié)果是一個(gè)關(guān)系,可用于這個(gè)關(guān)系的SQL運(yùn)算符有:I例 對(duì)基本表S、SC、C的數(shù)據(jù)進(jìn)行檢索。 (1) 檢索至少有一門成績(jī)超過學(xué)生S4一門成

47、績(jī)的學(xué)生學(xué)號(hào)。 SELECT S# FROM SC WHERE GRADESOME(SELECT GRADE FROM SC WHERE S#=S4)多表查詢例 對(duì)基本表S、SC、C的數(shù)據(jù)進(jìn)行檢索。多表查詢 (2) 檢索平均成績(jī)最高的學(xué)生學(xué)號(hào)。 SELECT S# FROM SC GROP BY S# HAVING AVG(GRADE)=ALL(SELECT AVG(GRADE) FROM SC GROUP BY S#); 為什么要這個(gè)語句?例:使用運(yùn)算符IN,求選修了C4課程的學(xué)生的學(xué)號(hào)和姓名。 SELECT S#,SNAME FROM S WHERE S# IN (SELECT S# FR

48、OM SC WHERE C# IN(SELECT C# FROM C WHERE C#=C4) 執(zhí)行子查詢嵌套時(shí)由內(nèi)層向外層逐層處理,外層利用內(nèi)層的結(jié)果。多表查詢 (2) 檢索平均成績(jī)最高的學(xué)生學(xué)號(hào)。為什么要這個(gè)語句?例:多表查詢一些帶EXISTS或NOT EXISTS謂詞的子查詢不能被其他形式的子查詢等價(jià)替換,但所有帶IN謂詞、比較運(yùn)算符、ANY和ALL謂詞的子查詢都能用帶EXISTS謂詞的子查詢等價(jià)替換。 例:查詢與“劉晨”在同一個(gè)系學(xué)習(xí)的學(xué)生。 SELECT SNO,SNAME,SDEPT FROM S S1 WHERE EXISTS (SELECT * FROM S S2 WHERE

49、S2.SDEPT=S1.SDEPT AND S2.SNAME=劉晨); 多表查詢一些帶EXISTS或NOT EXISTS謂詞的子查詢例: 查詢選修了全部課程的學(xué)生姓名。 SQL中沒有全稱量詞(FOR ALL)??蓪㈩}目的意思轉(zhuǎn)換成等價(jià)的形式:查詢這樣的學(xué)生,沒有一門課程是他不選修的。其SQL語句為: SELECT SNAME FROM S WHERE NOT EXISTS (SELECT * FROM C WHERE NOT EXlSTS (SELECT * FROM SC WHERE SNO=S.SNO AND CNO=C.CNO); 從而用EXIST/NOT EXIST來實(shí)現(xiàn)帶全稱量詞的查

50、詢。 多表查詢例: 查詢選修了全部課程的學(xué)生姓名。 多表查詢例: 查詢至少選修了學(xué)生200915122選修的全部課程的學(xué)生號(hào)碼。 本查詢可以用邏輯蘊(yùn)涵來表達(dá):查詢學(xué)號(hào)為x的學(xué)生,對(duì)所有的課程y,只要200915122學(xué)生選修了課程y,則x也選修了y。 也可以將語義表達(dá)為:不存在這樣的課程y,學(xué)生200915122選修了y,而學(xué)生x沒有選,用SQL語言表示如下: SELECT DISTINCT SNO FROM SC SCX WHERE NOT EXISTS (SELECT * FROM SC SCY WHERE SCY.SNO=200915122 AND NOT EXISTS (SELECT

51、* FROM SC SCZ WHERE SCZ.SNO=SCX.SNO AND SCZ.CNO=SCY.CNO); 多表查詢例: 查詢至少選修了學(xué)生200915122選修的全部課程的學(xué)SELECT語句的查詢結(jié)果是元組的集合,所以多個(gè)SELECT語句的結(jié)果可進(jìn)行集合操作。 例: 查詢計(jì)算機(jī)科學(xué)系的學(xué)生及年齡不大于19歲的學(xué)生。 SELECT * FROM S WHERE SDEPT=CS UNION SELECT * FROM S WHERE AGE=19; 本查詢實(shí)際上是求計(jì)算機(jī)科學(xué)系的所有學(xué)生與年齡不大于19歲的學(xué)生的并集。使UNION將多個(gè)查詢結(jié)果合并起來時(shí),系統(tǒng)會(huì)自動(dòng)去掉重復(fù)元組。如果要

52、保留重復(fù)元組則需要換為UNION ALL操作符。 集合操作 (1) SELECT語句的查詢結(jié)果是元組的集合,所以多個(gè)SELECT例: 查詢既選修了1號(hào)課程又選修了2號(hào)課程的全體學(xué)生。就是查詢選修1號(hào)課程的學(xué)生集合與選修2號(hào)課程的學(xué)生集合的交集。 SELECT SNO FROM SC WHERE CNO=l INTERSECT SELECT SNO FROM SC WHERE CNO=2; 本例也可以表示為 SELECT SNO FROM SC WHERE CNO=1 AND SNO IN (SELECT SNO FROM SC WHERE CNO=2); 集合操作 (2) 例: 查詢既選修了1

53、號(hào)課程又選修了2號(hào)課程的全體學(xué)生。就是4.4數(shù)據(jù)更新9/11/2022674.4數(shù)據(jù)更新9/10/202269主要內(nèi)容數(shù)據(jù)插入數(shù)據(jù)刪除數(shù)據(jù)修改對(duì)視圖的更新操作主要內(nèi)容數(shù)據(jù)插入插入元組 插入元組的INSERT語句的格式為 INSERT INTO (,(屬性列2) VALUES( ,);其功能是將新元組插入指定表中,其中新元組的屬性列1的值為常量1,屬性列2的值為常量2,。INTO子句中沒有出現(xiàn)的屬性列,新元組在這些列上將取空值。但必須注意的是,在表定義時(shí)說明了NOT NULL的屬性列不能取空值,否則會(huì)出錯(cuò)。如果INTO子句中沒有指明任何屬性列名,則新插入的元組必須在每個(gè)屬性列上均有值。數(shù)據(jù)插入插

54、入元組 數(shù)據(jù)插入例:將一個(gè)新學(xué)生元組(學(xué)號(hào):200915128;姓名:陳冬;性別:M;所在系:IS;年齡:l8)插入到S表中。 INSERT INTO S(SNO,SNAME,SEX,SDEPT,AGE) VALUES(200915128,陳冬,M,IS,l8);在INTO子句中指出了表名S,指出了新增加的元組在哪些屬性上要賦值,屬性的順序可以與CREATE TABLE中的順序不一樣,VALUES子句對(duì)新元組的各屬性賦值,字符串常數(shù)要用單引號(hào)(英文符號(hào))括起來。例: 將學(xué)生張成民的信息插入到S表中。 INSERT INTO S VALUES(200915126,張成民,M,18,CS); 數(shù)據(jù)

55、插入例:將一個(gè)新學(xué)生元組(學(xué)號(hào):200915128;姓名:陳冬;例: 插入一條選課記錄(200915128,1)。 INSERT INTO SC(SNO,CNO) VALUES(200915128,1); RDBMS將在新插入記錄的GRADE列上自動(dòng)地賦空值。 或者: INSERTINTO SC VALUES(200915128,1,NULL); 因?yàn)闆]有指出SC的屬性名,在GRADE列上要明確給出空值。 數(shù)據(jù)插入例: 插入一條選課記錄(200915128,1)。 插入子查詢結(jié)果 子查詢不僅可以嵌套在SELECT語句中,用以構(gòu)造父查詢的條件,也可以嵌套在INSERT語句中,用以生成要插入的批量

56、數(shù)據(jù)。 插入子查詢結(jié)果的INSERT語句的格式為 lNSERT INTO ( ,) 子查詢;例: 對(duì)每一個(gè)系,求學(xué)生的平均年齡,并把結(jié)果存入數(shù)據(jù)庫。首先在數(shù)據(jù)庫中建立一個(gè)新表,其中一列存放系名,另一列存放相應(yīng)的學(xué)生平均年齡。 CREATE TABLE DEPT_AGE (SDEPT CHAR(15) AVG_AGE SMALLINT ); 數(shù)據(jù)插入插入子查詢結(jié)果 數(shù)據(jù)插入然后對(duì)S表按系分組求平均年齡,再把系名和平均年齡存入新表中。 INSERT INTO DEPT_AGE(SDEPT,AVG_AGE) SELECT SDEPT,AVG(AGE) FROM SGROUP BY SDEPT; 數(shù)據(jù)

57、插入然后對(duì)S表按系分組求平均年齡,再把系名和平均年齡存入新表中。 SQL的刪除操作是指從基本表中刪除元組,其句法如下:DELETE FROM 基本表名WHERE 條件表達(dá)式 其語義是從基本表中刪除滿足條件表達(dá)式的元組。刪除語句實(shí)際上是“SELECT * FROM基本表名WHERE條件表達(dá)式”和DELETE操作的結(jié)合,每找到一個(gè)元組,就把它刪去。應(yīng)該注意,DELETE語句只能從一個(gè)基本表中刪除元組。WHERE子句中條件可以嵌套,也可以是來自幾個(gè)基本表的復(fù)合條件。三種刪除方式刪除某一個(gè)元組的值刪除多個(gè)元組的值帶子查詢的刪除語句數(shù)據(jù)刪除 SQL的刪除操作是指從基本表中刪除元組,其句法如下:三例: 刪

58、除學(xué)號(hào)為200915128的學(xué)生記錄。 DELETE FROM S WHERE SNO=200915128; 刪除某一個(gè)元組的值 例: 刪除所有的學(xué)生選課記錄。 DELETE FROM SC; 這條DELETE語句將使SC成為空表,它刪 除了SC的所有元組。 刪除多元組的值例: 刪除計(jì)算機(jī)科學(xué)系所有學(xué)生的選課記錄。 DELETE FROM SC WHERE CS= (SELECT SDEPT FROM S WHERE S.SNO=SC.SNO); 帶子查詢的刪除語句數(shù)據(jù)刪除例: 刪除學(xué)號(hào)為200915128的學(xué)生記錄。 刪除修改操作又稱為更新操作,其語句的一般格式為 UPDATE SET =

59、,= WHERE ;其功能是修改指定表中滿足WHERE子句條件的元組。其中SET子句給出的值用于取代相應(yīng)的屬性列值。如果省略WHERE子句,則表示要修改表中的所有元組。 修改某一個(gè)元組的值; 修改多個(gè)元組的值; 帶子查詢的修改語句。 數(shù)據(jù)修改修改操作又稱為更新操作,其語句的一般格式為 數(shù)據(jù)修改例: 將學(xué)生200915121的年齡改為22歲。 UPDATE S SET AGE=22 WHERE SNO=200915121; 例: 將所有學(xué)生的年齡增加l歲。 UPDATE S SET AGE=AGE+1; 例:將計(jì)算機(jī)科學(xué)系全體學(xué)生的成績(jī)置零。 UPDATE SC SET GRADE=0 WHER

60、E CS= (SELETE SDEPT FROM S WHERE S.SNO=SC.SNO); 修改一個(gè)元組的值修改多個(gè)元組的值帶子查詢的修改語句數(shù)據(jù)修改例: 將學(xué)生200915121的年齡改為22歲。 修改視圖定義后,就可以像對(duì)待基本表一樣對(duì)視圖進(jìn)行查詢(SELECT)操作。但對(duì)視圖中的元組進(jìn)行更新操作就不一樣了。這是由于視圖是不實(shí)際存儲(chǔ)數(shù)據(jù)的虛表,對(duì)視圖的更新最終要轉(zhuǎn)換為對(duì)基本表的更新。對(duì)于視圖元組的更新操作(INSERT、DELETE、UPDATA),有以下三條規(guī)則: 如果一個(gè)視圖是從多個(gè)基本表使用聯(lián)接操作導(dǎo)出的,那么不允許對(duì)這個(gè)視圖執(zhí)行更新操作。 如果在導(dǎo)出視圖的過程中,使用了分組和聚

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論