數(shù)據(jù)庫(kù)第三章_第1頁(yè)
數(shù)據(jù)庫(kù)第三章_第2頁(yè)
數(shù)據(jù)庫(kù)第三章_第3頁(yè)
數(shù)據(jù)庫(kù)第三章_第4頁(yè)
數(shù)據(jù)庫(kù)第三章_第5頁(yè)
已閱讀5頁(yè),還剩181頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

SQL概述數(shù)據(jù)定義查詢(xún)更新視圖數(shù)據(jù)控制關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL第3章1

SQL語(yǔ)言的特點(diǎn)掌握SQL語(yǔ)言的關(guān)系表定義及更新操作掌握SQL語(yǔ)言強(qiáng)大的查詢(xún)功能掌握SQL語(yǔ)言的關(guān)系表更新操作第3章重點(diǎn)用SQL語(yǔ)言正確完成復(fù)雜查詢(xún)第3章難點(diǎn)2●

SQL的發(fā)展及現(xiàn)狀

1974年,由Boyce和Chamberlin提出。1975-1979,IBM公司SanJoseResearchLab研制了關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)原型SystemR并實(shí)現(xiàn)了這種語(yǔ)言。1986年美國(guó)國(guó)家標(biāo)準(zhǔn)局(ANSI)的數(shù)據(jù)庫(kù)委員會(huì)X3H2批準(zhǔn)SQL作為關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言的美國(guó)標(biāo)準(zhǔn)(SQL-86)。ANSI不斷修改和完善SQL標(biāo)準(zhǔn),公布了SQL-89、SQL-92(SQL2)、SQL-99(SQL3)大部分DBMS產(chǎn)品都支持SQL,成為操作數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言33.1SQL概述3.1.1SQL的特點(diǎn)SQL是一種介于關(guān)系代數(shù)和關(guān)系演算之間的結(jié)構(gòu)化查詢(xún)語(yǔ)言。綜合統(tǒng)一

集DDL、DML、DCL的功能于一體,可以獨(dú)立完成數(shù)據(jù)庫(kù)生命周期中的全部活動(dòng)。

高度非過(guò)程化

無(wú)需了解存取路徑,存取路徑的選擇以及SQL語(yǔ)句的操作過(guò)程由系統(tǒng)自動(dòng)完成。

面向集合的操作方式

操作對(duì)象、查找結(jié)果、插入、刪除、更新操作的對(duì)象可以是元組集合。以同一種語(yǔ)法結(jié)構(gòu)提供兩種使用方式

可獨(dú)立的用于聯(lián)機(jī)交互的使用方式,用戶(hù)可在終端鍵入SQL命令對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作;SQL語(yǔ)句可嵌入到高級(jí)語(yǔ)言程序中,供程序員設(shè)計(jì)程序時(shí)使用。

語(yǔ)言簡(jiǎn)單,易學(xué)易用

核心功能只有9個(gè)動(dòng)詞。4數(shù)據(jù)查詢(xún)(DataQuery)SQL語(yǔ)言

數(shù)據(jù)操縱(DataManipulation)數(shù)據(jù)定義(DataDefinition)數(shù)據(jù)控制(DataControl)SQL功能數(shù)據(jù)查詢(xún)數(shù)據(jù)定義數(shù)據(jù)操縱數(shù)據(jù)控制動(dòng)詞SELECTCREATE,DROP,ALTERINSERT,UPDATE,DELETEGRANT,REVOKE表3.1SQL語(yǔ)言的動(dòng)詞5SQL用戶(hù)基本表1視圖1視圖2基本表2基本表3基本表4存儲(chǔ)文件1存儲(chǔ)文件2外模式模式內(nèi)模式圖3.1SQL對(duì)關(guān)系數(shù)據(jù)庫(kù)模型的支持3.1.2SQL語(yǔ)言的基本概念6基本概念:用戶(hù)可以用SQL語(yǔ)言對(duì)視圖(View)和基本表(BaseTable)進(jìn)行查詢(xún)等操作,在用戶(hù)觀點(diǎn)里,視圖和表一樣,都是關(guān)系。

視圖是從一個(gè)或多個(gè)基本表中導(dǎo)出的表,本身不存儲(chǔ)在數(shù)據(jù)庫(kù)中,只有其定義,可以將其理解為一個(gè)虛表。

基本表是本身獨(dú)立存在的表,每個(gè)基本表對(duì)應(yīng)一個(gè)存儲(chǔ)文件,一個(gè)表可以帶若干索引,存儲(chǔ)文件及索引組成了關(guān)系數(shù)據(jù)庫(kù)的內(nèi)模式。7SQL

Server數(shù)據(jù)庫(kù)創(chuàng)建方法83.2數(shù)據(jù)定義操作對(duì)象表視圖索引操作方式創(chuàng)建CREATETABLE刪除DROPTABLE修改ALTERTABLECREATEINDEXDROPINDEXCREATEVIEWDROPVIEW表3.2SQL的數(shù)據(jù)定義語(yǔ)句視圖是基于基本表的虛表,索引是依附于基本表的,因此,SQL通常不提供修改視圖定義和索引定義的操作。(刪除后重建;Oracle允許直接修改視圖定義)操作對(duì)象表視圖索引操作方式創(chuàng)建CREATETABLE刪除DROPTABLE修改ALTERTABLECREATEINDEXDROPINDEXCREATEVIEWDROPVIEW表3.2SQL的數(shù)據(jù)定義語(yǔ)句93.2.1定義、刪除與修改基本表定義基本表格式:CREATETABLE<表名>

(<列名><數(shù)據(jù)類(lèi)型>[列級(jí)完整性約束條件] [,<列名><數(shù)據(jù)類(lèi)型>[列級(jí)完整性約束條件]]……

[,<表級(jí)完整性約束條件>]);建立一個(gè)新表,表中無(wú)記錄10

CREATETABLE

Student

(

Sno

CHAR(5)NOTNULL

UNIQUE,/*列級(jí)完整性約束條件*/

Sname

CHAR(20)UNIQUE,

Ssex

CHAR(1),

Sage

INT,

Sdept

CHAR(15));例1:建立學(xué)生表Student,它由學(xué)號(hào)Sno、姓名Sname、性別Ssex、年齡Sage、所在系Sdept五個(gè)屬性構(gòu)成。其中學(xué)號(hào)不能為空,值是唯一的,并且姓名取值也唯一。11

CREATETABLES (S#CHAR(6)NOTNULL,/*學(xué)號(hào)*/

SNAMECHAR(8)NOTNULL,/*姓名*/

SAGESMALLINT,/*年齡*/

SDCHAR(10),/*系名*/

SEXCHAR(2)DEFAULT

'男'

CHECK((SEX='男')OR(SEX='女')),/*性別*/

PRIMARYKEY(S#));例2:建立學(xué)生S、課程C、選課SC三個(gè)表S表:12

CREATETABLEC (C#CHAR(6)NOTNULL,/*課程號(hào)*/

CNAMECHAR(30)NOTNULL,/*課程名*/

TNAMECHAR(8),/*教師姓名*/

PC#CHAR(6),/*先行課*/

PRIMARYKEY(C#));例2:建立學(xué)生S、課程C、選課SC三個(gè)表C表:13CREATETABLESC(S#CHAR(6)NOTNULL,/*學(xué)號(hào)*/

C#CHAR(6)NOTNULL,/*課程號(hào)*/

GRSMALLINT,/*成績(jī)*/PRIMARYKEY(S#,C#),FOREIGNKEY(S#)REFERENCESS(S#),FOREIGNKEY(C#)REFERENCESC(C#),CHECK((GRISNULL) OR(GRBETWEENOAND100)));例2:建立學(xué)生S、課程C、選課SC三個(gè)表SC表:14例3:設(shè)關(guān)系S_G(S#,AVG_G),把平均成績(jī)大于80的男生的學(xué)號(hào)及平均成績(jī)存入S_G中。CREATETABLES_G(S#CHAR(6)NOTNULL,

AVG_GSMALLINTDEFAULTNULL)AS(SELECTS#,AVG(ALLGRADE)FROMSCWHERES#IN

(SELECTS#FROMSWHERESEX=‘男’)

GROUPBYS#

HAVING

AVG(ALLGRADE)>80)15修改基本表改變表名增加列改變列的數(shù)據(jù)類(lèi)型刪除列的約束刪除列改變列名基本表的修改操作:16格式:ALTERTABLE<表名>

[ADD

<新列名><數(shù)據(jù)類(lèi)型>[完整性約束]][ADD

完整性約束][DROP<列名>

][DROP<完整性約束名>] [ALTERCOLUMN<列名><數(shù)據(jù)類(lèi)型>] [RENAME<舊表名>TO<新表名>];

增加新列增加新的完整性約束條件刪除指定列刪除指定的完整性約束條件修改列的定義(列名和數(shù)據(jù)類(lèi)型)改變表名17例4:在Student表中增加“入學(xué)時(shí)間”列,數(shù)據(jù)類(lèi)型為日期型。

ALTERTABLE

Student

ADD

Scome

DATETIME;例5:把年齡的數(shù)據(jù)類(lèi)型改為半字長(zhǎng)整數(shù).ALTERTABLEStudentALTERCOLUMNSageSMALLINT;例6:刪除學(xué)生姓名必須取唯一值的約束。

ALTERTABLEStudentDROPCONSTRAINTNAME;18刪除基本表格式:DROPTABLE<表名>;刪除一個(gè)表,及與該表相關(guān)的索引、視圖、碼和外部碼。例7:刪除Student表。

DROPTABLEStudent;193.2.2建立與刪除索引建立索引是加快查詢(xún)速度的有效手段,一個(gè)基本表上可建立一個(gè)或多個(gè)索引,以提供多種存取路徑,加快查找速度。建立與刪除索引由DBA或表的屬主負(fù)責(zé)完成,用戶(hù)不必也不能選擇索引。20建立索引格式:CREATE[UNIQUE][CLUSTER]INDEX<索引名>

ON<表名>(<列名>[<次序>],[,<列名>[<次序>]]…);

UNIQUE

表示索引值唯一。

CLUSTER

表示索引是聚簇索引,指索引項(xiàng)的順序與表中記錄的物理順序一致。索引一旦建立,交由系統(tǒng)使用和維護(hù)。對(duì)指定的表的列建立索引。21例8:為學(xué)生-課程數(shù)據(jù)庫(kù)中的S,C,SC三個(gè)表建立索引。其中S表按學(xué)號(hào)升序建唯一索引,C表按課程號(hào)升序建唯一索引,SC表按學(xué)號(hào)升序和課程號(hào)降序建唯一索引。CREATEUNIQUEINDEXSIDXONS(S#);CREATEUNIQUEINDEXCIDXONC(C#);CREATEUNIQUEINDEXSCIDXONS(S#ASC,C#DESC);22例9:為學(xué)生Student表建立聚簇索引(按學(xué)生姓名升序建索引)。CREATECLUSTERINDEXSNAMEIDXONStudent(Sname);一個(gè)基本表最多只能建立一個(gè)聚簇索引。建立索引后,更新索引列數(shù)據(jù)時(shí),往往導(dǎo)致表中記錄的物理順序的變更,代價(jià)較大,因此對(duì)于經(jīng)常更新的列不宜建立聚簇索引。23刪除索引格式:

DROPINDEX<表名.索引名>;例10:刪除Student表的SNAMEIDX索引。

DROPINDEX

Student.SNAMEIDX

;243.3查詢(xún)

基本結(jié)構(gòu)

SelectA1,A2,...,An

FromR1,R2,...,Rm

WherePSelectWhereFrom

πA1,A2,...,An(σp(R1×R2×...×Rm))數(shù)據(jù)查詢(xún)是數(shù)據(jù)庫(kù)應(yīng)用的核心功能。25格式

SELECT[ALL|DISTINCT]<目標(biāo)列表達(dá)式>[,<目標(biāo)列表達(dá)式>]……

FROM<表名或視圖名>[,<表名或視圖名>]…[WHERE<條件表達(dá)式>][GROUPBY<列名1>[HAVING<條件表達(dá)式>]][ORDERBY<列名2>[ASC|DESC]];26SELECT…FROM常用語(yǔ)句執(zhí)行過(guò)程

SELECT…⑤

投影

FROM…①TABLE→內(nèi)存

WHERE…②

選取元組

GROUP…③

分組

HAVING…④

選擇分組

[{UNION|…}⑥

查徇結(jié)果的集合運(yùn)算

SELECT…]①~⑤

ORDERBY……⑦

排序輸出273.3.1單表查詢(xún)

選擇表中的若干列

選擇表中的若干元組

對(duì)查詢(xún)結(jié)果排序

使用集函數(shù)

對(duì)查詢(xún)結(jié)果分組281.查詢(xún)指定列例1.查詢(xún)?nèi)w學(xué)生的學(xué)號(hào)及姓名。學(xué)生表:Student(Sno,Sname,Ssex,Sage,Sdept)查詢(xún)各列的先后順序可以與表中的順序不一致。例2.查詢(xún)?nèi)w學(xué)生的姓名、學(xué)號(hào)、所在系。SELECTSno,SnameFROMStudent;SELECTSname,Sno,Sdept FROMStudent;29302.查詢(xún)?nèi)苛袑W(xué)生表:Student(Sno,Sname,Ssex,Sage,Sdept)例3.查詢(xún)?nèi)w學(xué)生的全部信息。SELECTSno,Sname,Ssex,Sage,Sdept FROMStudent;

等價(jià)于SELECT*FROMStudent;31323.查詢(xún)經(jīng)過(guò)計(jì)算的值學(xué)生表:Student(Sno,Sname,Ssex,Sage,Sdept)例4.查詢(xún)?nèi)w學(xué)生的姓名及其出生年份。SELECTSname,2006-Sage FROMStudent;33例5.查詢(xún)?nèi)w學(xué)生的姓名、出生年份和所有系,要求用小寫(xiě)字母表示所有系名。SELECTSname,'YearofBirth:',2006-Sage,LOWER(Sdept)FROMStudent;SELECTSnameNAME,'YearofBirth:'

BIRTH,2006-Sage

BIRTHDAY,LOWER(Sdept)DEPARTMENT

FROMStudent;34351.消除取值重復(fù)的行例6.查詢(xún)選修了課程的學(xué)生學(xué)號(hào)。學(xué)生課程表:SC(Sno,Cno,Grade)消除重復(fù)的行SELECTSnoFROMSC;SELECTDISTINCTSno FROMSC;36372.查詢(xún)滿(mǎn)足條件的元組Where子句——運(yùn)算符比較:<、<=、>、>=、=、<>、!=、!>、!<not+上述比較運(yùn)算符確定范圍:BetweenAandB、NotBetweenAandB確定集合:IN、NOTIN字符匹配:LIKE、NOTLIKE空值:ISNULL、ISNOTNULL多重條件:AND、OR38例7.查詢(xún)計(jì)算機(jī)系全體學(xué)生的名單。(1)比較大小SELECTSnameFROMStudentWHERESdept='CS';3940例8.查詢(xún)所有年齡在20歲以下的學(xué)生姓名及其年齡。SELECTSname,Sage FROMStudentWHERESage<

20;SELECTSname,Sage FROMStudentWHERENOTSage>=

20;或4142例9.查詢(xún)考試成績(jī)有不及格的學(xué)生的學(xué)號(hào)。SELECTDISTINCTSno FROMSCWHEREGrade<60;4344例10.查詢(xún)年齡在20~23歲(包括20歲和23歲)之間的學(xué)生的姓名、系別和年齡。(2)確定范圍SELECTSname,Sdept,SageFROMStudentWHERESageBETWEEN20AND23;SELECTSname,Sdept,SageFROMStudentWHERESage>=20ANDSage<=

23;4546SELECTSname,Sdept,SageFROMStudentWHERESageNOTBETWEEN20AND23;例11.查詢(xún)年齡不在20~23歲之間的學(xué)生姓名、系別和年齡。SELECTSname,Sdept,SageFROMStudentWHERESage<20ORSage>

23;4748例12.查詢(xún)信息系(IS)、數(shù)學(xué)系(MA)和計(jì)算機(jī)科學(xué)系(CS)學(xué)生的姓名和性別。(3)確定集合SELECTSname,SsexFROMStudentWHERESdeptIN('IS','MA','CS');SELECTSname,SsexFROMStudentWHERESdept=

'IS'

ORSdept=

'MA'ORSdept=

'CS';4950例13.查詢(xún)既不是信息系(IS)、數(shù)學(xué)系(MA)也不是計(jì)算機(jī)科學(xué)系(CS)學(xué)生的姓名和性別。SELECTSname,SsexFROMStudentWHERESdeptNOTIN('IS','MA','CS');SELECTSname,SsexFROMStudentWHERESdept!=

'IS'ANDSdept!=

'MA'

ANDSdept!=

'CS';5152(4)字符匹配Where子句——Like格式:[NOT]LIKE

'<匹配串>'[ESCAPE'<換碼字符>']%:表示任意長(zhǎng)度(長(zhǎng)度≥0)的字符串。_:表示單個(gè)的任意字符ESCAPE'\':表示\為換碼字符,匹配串中緊跟在\后面的字符‘%’或‘_’,被定義為普通字符(不作通配符用)53例14.查詢(xún)學(xué)號(hào)為95001的學(xué)生的詳細(xì)情況。如果LIKE后面的匹配串中不含通配符,則可以用=運(yùn)算符取代LIKE謂詞;用!=或<>取代NOTLIKE謂詞。SELECT*FROMStudentWHERESnoLIKE

'95001';SELECT*FROMStudentWHERESno=

'95001';等價(jià)于5455例15.查詢(xún)所有姓王的學(xué)生的姓名、學(xué)號(hào)和性別。SELECTSname,Sno,SsexFROMStudentWHERESnameLIKE

'王%';5657例16.查詢(xún)姓李,且姓名為兩個(gè)漢字的學(xué)生姓名。SELECTSnameFROMStudentWHERESnameLIKE'李_'

;5859例17.查詢(xún)名字中第二個(gè)字為“晨”字的學(xué)生姓名和學(xué)號(hào)。SELECTSname,SnoFROMStudentWHERESnameLIKE

'_晨%

'

;6061例18.查詢(xún)所有不姓劉的學(xué)生姓名。SELECTSnameFROMStudentWHERESnameNOTLIKE

'劉%

'

;6263例19.查詢(xún)DB_Design課程的課程號(hào)和學(xué)分。SELECTCno,CcreditFROMCourseWHERECnameLIKE'DB\_Design'

ESCAPE

'\'

;64例20.查詢(xún)以“DB_”開(kāi)頭,且倒數(shù)第三個(gè)字符為i的課程的詳細(xì)情況。SELECT*FROMCourseWHERECnameLIKE

'DB\_%i__'

ESCAPE'\';65(5)涉及空值的查詢(xún)例21.某些學(xué)生選修課后沒(méi)有參加考試,所以有選課錄,但沒(méi)有成績(jī)。查詢(xún)?nèi)鄙俪煽?jī)的學(xué)生的學(xué)號(hào)和相應(yīng)課程號(hào)。SELECTSno,CnoFROMSCWHEREGradeISNULL;6667例22.查詢(xún)所有有成績(jī)的學(xué)生學(xué)號(hào)和課程號(hào)。SELECTSno,CnoFROMSCWHEREGradeISNOTNULL;6869(6)多重條件查詢(xún)例23.查詢(xún)計(jì)算機(jī)系年齡在20歲以下的學(xué)生姓名。SELECTSnameFROMStudentWHERESdept='CS'

ANDSage<20;7071例24.查詢(xún)信息系(IS)、數(shù)學(xué)系(MA)和計(jì)算機(jī)科學(xué)系(CS)的男學(xué)生的姓名和年齡。邏輯運(yùn)算符AND的優(yōu)先級(jí)比OR高,可通過(guò)括號(hào)改變優(yōu)先級(jí)。SELECTSname,SageFROMStudentWHERE(Sdept='IS'

ORSdept='MA'

OR

Sdept='CS')ANDSsex='男';72733.對(duì)查詢(xún)結(jié)果的排序例25.查詢(xún)選修了3號(hào)課程的學(xué)生的學(xué)號(hào)及其成績(jī),查詢(xún)結(jié)果按分?jǐn)?shù)的降序排列。SELECTSno,GradeFROMSCWHERECno='3'

ORDERBYGradeDESC;7475例26.查詢(xún)?nèi)w學(xué)生情況,查詢(xún)結(jié)果按所在系的系號(hào)升序排列,同在一個(gè)系的按年齡降序排列。SELECT*FROMStudent

ORDERBYSdeptASC,SageDESC;SELECT*FROMStudent

ORDERBYSdept,SageDESC;76774.使用集函數(shù)主要有:

COUNT([DISTINCT|ALL]*)統(tǒng)計(jì)元組個(gè)數(shù)

COUNT([DISTINCT|ALL]<列名>)統(tǒng)計(jì)一列中值的個(gè)數(shù)

SUM([DISTINCT|ALL]<列名>)

計(jì)算一列值的總和(此列必須是數(shù)值型)

AVG([DISTINCT|ALL]<列名>)計(jì)算一列值的平均值(此列必須是數(shù)值型)

MAX([DISTINCT|ALL]<列名>)求一列值中的最大值

MIN([DISTINCT|ALL]<列名>)求一列值中的最小值78例27.查詢(xún)學(xué)生總?cè)藬?shù)。SELECTCOUNT

(*)FROMStudent;例28.查詢(xún)選修了課程的學(xué)生人數(shù)。SELECTCOUNT

(DISTINCTSno)FROMSC;79例29.計(jì)算2號(hào)課程的學(xué)生平均成績(jī)。SELECTAVG(Grade)FROMSCWHERECno='2';例30.查詢(xún)選修2號(hào)課程的學(xué)生最高成績(jī)。SELECTMAX(Grade)FROMSCWHERECno='2';80815.對(duì)查詢(xún)結(jié)果分組例31.求各個(gè)課程號(hào)及相應(yīng)的選課人數(shù)。SELECTCno,COUNT(Sno)FROMSCGROUPBYCno;82例32.查詢(xún)選修了3門(mén)以上課程的學(xué)生學(xué)號(hào)。SELECTSnoFROMSCGROUPBYSnoHAVING

COUNT(*)>=3;HAVING用于分組后按一定條件對(duì)這些分組進(jìn)行篩選。

WHERE子句作用于基本表或視圖,從中選擇滿(mǎn)足條件的元組

HAVING短句作用于組,從中選擇滿(mǎn)足條件的組8384SQL

Server數(shù)據(jù)庫(kù)查詢(xún)演示853.3.2連接查詢(xún)

等值與非等值連接查詢(xún)

自身連接

外連接

復(fù)合條件連接861.等值與非等值連接查詢(xún)連接條件一:

[<表名1>.]<列名1><比較運(yùn)算符>[<表名2>.]<列名2>連接條件二:

[<表名1>.]<列名1>BETWEEN[<表名2>.]<列名2>AND[<表名2>.]<列名3>

比較運(yùn)算符主要有:=、>、<、>=、<=、!=。連接查詢(xún)中用來(lái)連接兩個(gè)表的條件稱(chēng)為連接條件或連接謂詞。連接謂詞中的列名稱(chēng)為連接字段,其各字段應(yīng)是可比的。87例33.查詢(xún)每個(gè)學(xué)生及其選修課程的情況。

等值連接SELECTStudent.*,SC.*FROMStudent,SCWHEREStudent.Sno=

SC.Sno;自然連接:在等值連接中把目標(biāo)列中重復(fù)的屬性列去掉。SELECTStudent.Sno,Sname,Ssex,Sage,Sdept,Cno,GradeFROMStudent,SCWHEREStudent.Sno=

SC.Sno;88892.自身連接例34.查詢(xún)每門(mén)課的間接先修課。一個(gè)表與其自身進(jìn)行連接SELECTFIRST.Cno,SECOND.CpnoFROMCourseFIRST,CourseSECONDWHEREFIRST.Cpno=

SECOND.Cno;90913.外連接在連接條件的某側(cè)加上(*)或(+),表示該側(cè)所對(duì)應(yīng)的表中可形成一個(gè)各數(shù)據(jù)項(xiàng)均為空值的萬(wàn)能替代行,用來(lái)與另一側(cè)對(duì)應(yīng)的表中所有不滿(mǎn)足條件的元組進(jìn)行連接。外連接符(*)或(+)出現(xiàn)在左側(cè)稱(chēng)為右外連接、出現(xiàn)在右側(cè)稱(chēng)為左連接、兩側(cè)都出現(xiàn)的稱(chēng)為全外連接。92例35.查詢(xún)每個(gè)學(xué)生及其選修課的情況。SELECTStudent.Sno,Sname,Ssex,Sage,Sdept,Cno,GradeFROMSCRIGHTJOINStudentONStudent.Sno=SC.Sno;93944.復(fù)合條件連接例36.查詢(xún)選修了2號(hào)課程且成績(jī)?cè)?0分以上的所有學(xué)生。WHERE子句中有多個(gè)連接條件SELECTStudent.Sno,SnameFROMStudent,SCWHEREStudent.Sno=SC.SnoANDSC.Cno='2'

ANDSC.Grade>=90;95例37.查詢(xún)每個(gè)學(xué)生的學(xué)號(hào)、姓名、選修課程名及成績(jī)。多表連接SELECTStudent.Sno,Sname,Cname,GradeFROMStudent,SC,CourseWHEREStudent.Sno=SC.SnoANDSC.Cno=Course.Cno;96973.3.3嵌套查詢(xún)?cè)赟QL語(yǔ)言中,一個(gè)SELECT-FROM-WHERE語(yǔ)句稱(chēng)為一個(gè)查詢(xún)塊。一個(gè)查詢(xún)塊嵌套在另一個(gè)查詢(xún)塊的WHERE子句或HAVING短語(yǔ)的條件中的查詢(xún)稱(chēng)為嵌套查詢(xún)。例如:SELECTSnameFROMStudentWHERESnoINSELECTSnoFROMSCWHERECno='2';外層查詢(xún)內(nèi)層查詢(xún)不能使用ORDERBY子句98

帶有IN謂詞的子查詢(xún)

帶有比較運(yùn)算符的子查詢(xún)

帶有ANY或ALL謂詞的子查詢(xún)

帶有EXISTS謂詞的子查詢(xún)3.3.3嵌套查詢(xún)99例38.查詢(xún)與“劉晨”在同一個(gè)系學(xué)習(xí)的學(xué)生。

SELECTSno,Sname,Sdept FROMStudentWHERESdeptIN(SELECTSdeptFROMStudentWHERESname='劉晨');(1)首先在Student關(guān)系中找出劉晨所在的系,結(jié)果為'IS'。(2)其次在Student關(guān)系中找出'IS'系的學(xué)生1.帶有IN謂詞的子查詢(xún)或SELECTS1.Sno,S1.Sname,S1.SdeptFROMStudentS1,StudentS2WHERES1.Sdept=S2.SdeptANDS2.Sname='劉晨';100101例39.查詢(xún)選修了課程名為“信息系統(tǒng)”的學(xué)生學(xué)號(hào)和姓名。

SELECTSno,Sname FROMStudentWHERESnoIN(SELECTSnoFROMSCWHERECnoIN(SELECTCnoFROMCourseWHERECname='信息系統(tǒng)'));(1)首先在Course關(guān)系中找出“信息系統(tǒng)的課程號(hào)”,結(jié)果為3。(2)其次在SC關(guān)系中找出選修3號(hào)課程的學(xué)生(3)最后在Student關(guān)系中取出學(xué)號(hào)和姓名?;騍ELECTSno,SnameFROMStudent,SC,CourseWHEREStudent.Sno=SC.SnoANDSC.Cno=Course.CnoANDCourse.Cname='信息系統(tǒng)'

;1021032.帶有比較運(yùn)算符的子查詢(xún)例40.查詢(xún)與“劉晨”在同一個(gè)系學(xué)習(xí)的學(xué)生。內(nèi)存查詢(xún)返回的是單值時(shí),可以用比較運(yùn)算符;子查詢(xún)要跟在比較符之后。SELECTSno,Sname,SdeptFROMStudentWHERESdept=(SELECTSdeptFROMStudentWHERESname='劉晨');1041053.帶有ANY或ALL謂詞的子查詢(xún)子查詢(xún)返回單值時(shí)可以用比較運(yùn)算符,而使用ANY或ALL謂詞時(shí)必須同時(shí)使用比較運(yùn)算符。其語(yǔ)義為:>(>=、=)ANY

大于(大于等于、等于)子查詢(xún)結(jié)果中的某個(gè)值>(>=、=)ALL

大于(大于等于、等于)子查詢(xún)結(jié)果中的所有值<(<=)ANY

小于(小于等于)子查詢(xún)結(jié)果中的某個(gè)值<(<=)ALL

小于(小于等于)子查詢(xún)結(jié)果中的所有值!=(或<>)ANY

不等于子查詢(xún)結(jié)果中的某個(gè)值!=(或<>)ALL

不等于子查詢(xún)結(jié)果中的任何一個(gè)值106例41.查詢(xún)其他系中比信息系某一學(xué)生年齡小的學(xué)生姓名和年齡。

SELECTSname,Sage FROMStudentWHERESage<ANY(SELECTSageFROMStudentWHERESdept='IS')ANDSdept<>'IS';或

SELECTSname,Sage FROMStudentWHERESage<(SELECTMAX(Sage)FROMStudentWHERESdept='IS')ANDSdept<>'IS';107108例42.查詢(xún)其他系中比信息系所有學(xué)生年齡小的學(xué)生姓名和年齡。

SELECTSname,Sage FROMStudentWHERESage<ALL(SELECTSageFROMStudentWHERESdept='IS')ANDSdept<>'IS';或

SELECTSname,SageFROMStudentWHERESage<(SELECTMIN(Sage)FROMStudentWHERESdept='IS')ANDSdept<>'IS';109=<>或!=<<=>>=ANYIN__<MAX<=MAX>MIN>=MINALL__NOTIN<MIX<=MIN>MAX>MAX表3-4ANY,ALL謂詞與集函數(shù)及IN謂詞的等價(jià)轉(zhuǎn)換關(guān)系集函數(shù)實(shí)現(xiàn)子查詢(xún)比直接用ANY或ALL查詢(xún)效率更高。1104.帶有EXISTS謂詞的子查詢(xún)不相關(guān)子查詢(xún):子查詢(xún)的查詢(xún)條件不依賴(lài)于父查詢(xún)的子查詢(xún)。相關(guān)子查詢(xún)(CorrelatedSubquery):子查詢(xún)的查詢(xún)條件依賴(lài)于外層父查詢(xún)的某個(gè)屬性值的子查詢(xún)。帶EXISTS的子查詢(xún)就是相關(guān)子查詢(xún)

EXISTS表示存在量詞帶有EXISTS的子查詢(xún)不返回任何記錄的數(shù)據(jù),只返回邏輯值

'True'

或'False'111例43-1.查詢(xún)所有選修了1號(hào)課程的學(xué)生姓名。

SELECTSnameFROMStudentWHERESnoIN(SELECTSNOFROMSCWHERESC.Cno='1');不相關(guān)子查詢(xún)112例43-2.查詢(xún)所有選修了1號(hào)課程的學(xué)生姓名。

SELECTSname FROMStudentWHEREEXISTS(SELECT*FROMSCWHERESno=Student.SnoANDCno='1');執(zhí)行過(guò)程:

先在外層查詢(xún)中取Student表的第一個(gè)元組,用該元組的相關(guān)的屬性值(在內(nèi)層WHERE子句中給定的)處理內(nèi)層查詢(xún),若外層的WHERE子句返回'TRUE'值,則此元組送入結(jié)果的表中。然后再取下一個(gè)元組;重復(fù)上述過(guò)程直到外層表的元組全部遍歷一次為止。相關(guān)子查詢(xún)113114說(shuō)明:不關(guān)心子查詢(xún)的具體內(nèi)容,因此用SELECT*

Exists+子查詢(xún)用來(lái)判斷該子查詢(xún)是否返回元組當(dāng)子查詢(xún)的結(jié)果集非空時(shí),Exists

為'True'當(dāng)子查詢(xún)的結(jié)果集為空時(shí),Exists

為'False'

NOTEXISTS

:若子查詢(xún)結(jié)果為空,返回'TRUE'值,否則返回'FALSE'115例44.查詢(xún)沒(méi)有選修1號(hào)課程的學(xué)生姓名。

SELECTSname FROMStudentWHERENOTEXISTS(SELECT*FROMSCWHERESno=Student.SnoANDCno='1');或

SELECTSnameFROMStudentWHERESnoNOTIN(SELECTSNOFROMSCWHERESC.Cno='1');不相關(guān)子查詢(xún)相關(guān)子查詢(xún)116117例45.查詢(xún)與劉晨在同一個(gè)系學(xué)習(xí)的學(xué)生。

SELECTSno,Sname,Sdept FROMStudentS1WHEREEXISTS(SELECT*FROMStudentS2WHERES1.Sdept=S2.SdeptANDS2.Sname='劉晨');或

SELECTSno,Sname,Sdept FROMStudentWHERESdeptIN(SELECTSdeptFROMStudentWHERESname='劉晨');118119SQL無(wú)全稱(chēng)量詞,但可以把全稱(chēng)量詞轉(zhuǎn)化為等價(jià)的存在量詞形式。例46:“查詢(xún)選修全部課程的學(xué)生姓名”(?x)P≡!(?x(!P))原命題等價(jià)于:“查詢(xún)這樣的學(xué)生a,不存在某個(gè)課程x,這名學(xué)生沒(méi)有選修”

120例46.查詢(xún)選修了全部課程的學(xué)生姓名。

SELECTSname FROMStudentWHERENOTEXISTS(SELECT*FROMCourseWHERENOTEXISTS

(SELECT*FROMSCWHERESno=Student.SnoANDCno=Course.Cno));這門(mén)課他沒(méi)選這樣的課是不存在的121122例47.查詢(xún)至少選修了學(xué)生95002選修的全部課程的學(xué)生號(hào)。SELECTDISTINCTSnoFROMSCSCXWHERENOTEXISTS

(SELECT*FROMSCSCY

WHERESCY.Sno='95002' ANDNOTEXISTS

(SELECT* FROMSCSCZ WHERESCZ.Sno=SCX.Sno ANDSCZ.Cno=SCY.Cno)); 1233.3.4集合查詢(xún)例48.查詢(xún)計(jì)算機(jī)系的學(xué)生或者年齡不大于19歲的學(xué)生。SELECT*FROMStudentWHERESdept='CS'UNIONSELECT*FROMStudentWHERESage<=19124125例49.查詢(xún)選修了課程1或選修課程2的學(xué)生。SELECTSnoFROMSCWHERECno='1'UNIONSELECTSnoFROMSCWHERECno='2';126127例50.查詢(xún)計(jì)算機(jī)系的學(xué)生與年齡不大于19歲的學(xué)生的交集。SELECT*FROMStudentWHERESdept='CS'ANDSage<=19;例51.查詢(xún)選修了課程1的學(xué)生集合與選修課程2的學(xué)生集合的交集。SELECTSnoFROMSCWHERECno='1'ANDSnoIN(SELECTSnoFROMSCWHERECno='2');128例52.查詢(xún)計(jì)算機(jī)系的學(xué)生與年齡不大于19歲的學(xué)生的差集。SELECT*FROMStudentWHERESdept='CS'ANDSage>19;例53.查詢(xún)選修課程1但沒(méi)有選修課程2的學(xué)生。SELECTSnoFROMSCWHERECno='1'ANDSnoNOTIN(SELECTSnoFROMSCWHERECno='2');1293.3.5SELECT語(yǔ)句的一般格式SELECT[ALL|DISTINCT]<目標(biāo)列表達(dá)式>[別名][,<目標(biāo)列表達(dá)式>[別名]]……FROM<表名或視圖名>[別名][,<表名或視圖名>[別名]]……[WHERE<條件表達(dá)式>][GROUPBY<列名1>[HAVING<條件表達(dá)式>]][ORDERBY<列名2>[ASC|DESC]];1303.4數(shù)據(jù)更新

插入操作

INSERT

修改操作

UPDATE

刪除操作

DELETE1313.4.1插入數(shù)據(jù)1.插入單個(gè)元組格式:INSERTINTO<表名>[(<列名1>[,<列名2>]…)]

VALUES(<常量1>[,<常量2>]…);插入一已知元組的全部列的常量

插入一已知元組的部分列的常量表定義時(shí)說(shuō)明了NOTNULL的屬性列不能取空值如果INTO子句沒(méi)有指明任何列名,則新插入的記錄必須在每個(gè)屬性列上均有值。132插入一已知元組的全部列常量

INSERTINTOStudent

VALUES('95005','陳冬','男',18,'CS');例1:將一個(gè)新生記錄插入學(xué)生表。

INSERTINTOSC(Sno,Cno)

VALUES('95005','1');插入一已知元組的部分列常量例2:新增一條選課記錄1331342.插入子查詢(xún)結(jié)果格式:INSERTINTO<表名>[(<列名1>[,<列名2>]…)]

子查詢(xún);CREATETABLEDeptage(SdeptCHAR(15)AvgageSMALLINT);INSERTINTODeptage(Sdept,Avgage)SELECTSdept,AVG(Sage)

FROMStudentGROUPBYSdept;例3:對(duì)每個(gè)系,求學(xué)生的平均年齡,并把結(jié)果存入數(shù)據(jù)庫(kù)。1351363.4.2修改數(shù)據(jù)格式:

UPDATE<表名>

SET<列名>=<表達(dá)式>[,<列名>=<表達(dá)式>

]…[WHERE<條件>];1371.修改某一個(gè)元組的值UPDATEStudentSETSage=22WHERESno='95001';例4:將學(xué)生95001的年齡改為22。2.修改多個(gè)元組的值UPDATEStudentSETSage=Sage+1;例5:將所有學(xué)生的年齡都增加1。1381393.帶子查詢(xún)的修改語(yǔ)句UPDATESCSETGrade=0WHERESnoIN

(SELECTSno

FROMStudent

WHERESdept='CS');例6:將計(jì)算機(jī)科學(xué)系學(xué)生的成績(jī)都置零。1401413.4.3刪除數(shù)據(jù)格式:DELETEFROM<表名>

[WHERE<條件>];只能對(duì)整個(gè)元組操作,不能只刪除某些屬性上的值。只能對(duì)一個(gè)關(guān)系起作用,若要從多個(gè)關(guān)系中刪除元組,則必須對(duì)每個(gè)關(guān)系分別執(zhí)行刪除命令。

從關(guān)系R中刪除滿(mǎn)足P的元組,只是刪除數(shù)據(jù),而不是定義。1421.刪除某一個(gè)元組的值DELETE

FROMStudentWHERESno='95005';例7:刪除學(xué)號(hào)為95005的學(xué)生記錄。2.刪除多個(gè)元組的值DELETE

FROMSC;例8:刪除所有的學(xué)生選課記錄。1433.帶子查詢(xún)的刪除語(yǔ)句DELETE

FROMSCWHERESnoIN

(SELECTSno

FROMStudent

WHERESdept='CS');例9:刪除計(jì)算機(jī)科學(xué)系所有學(xué)生的選課記錄。1444.更新操作與數(shù)據(jù)庫(kù)的一致性首先DELETE

FROMSCWHERESno='95005';其次DELETE

FROMStudentWHERESno='95005';例10:刪除學(xué)號(hào)為95005的學(xué)生記錄。事務(wù)(Transaction):保證語(yǔ)句要么都做,要么都不做,以保證關(guān)系的完整性。刪除表中元組的策略:(1)自動(dòng)刪除參照表中相應(yīng)的元組;(2)檢查參照表中是否存在相應(yīng)的元組,如果存在相應(yīng)的元組,如果存在,則操作失敗。1453.5視圖視圖是從一個(gè)或幾個(gè)表(或視圖)導(dǎo)出的表。視圖是一個(gè)虛表數(shù)據(jù)庫(kù)中只存放視圖的定義視圖對(duì)應(yīng)的數(shù)據(jù)仍存放在原來(lái)的表中隨著表中數(shù)據(jù)的變化,視圖的數(shù)據(jù)隨之改變。對(duì)視圖的查詢(xún)與基本表一樣對(duì)視圖的更新將受到一定的限制1463.5視圖

定義視圖

查詢(xún)視圖

更新視圖

視圖的作用147視圖概念視圖是一個(gè)虛表數(shù)據(jù)庫(kù)中只存放視圖的定義視圖對(duì)應(yīng)的數(shù)據(jù)仍存放在原來(lái)的表中隨著表中數(shù)據(jù)的變化,視圖的數(shù)據(jù)隨之改變。對(duì)視圖的查詢(xún)與基本表一樣對(duì)視圖的更新將受到一定的限制基本表1基本表2視圖視圖概念示意圖3.5.1定義視圖148建立視圖格式:CREATEVIEW<視圖名>[(<列名>[,<列名>]…)]

AS

子查詢(xún)[WITHCHECKOPTION];下述必須指定全部列名:某個(gè)目標(biāo)列是集函數(shù)或表達(dá)式多表連接時(shí),目標(biāo)列中出現(xiàn)同名列需在視圖中為某列用新的名字在定義視圖時(shí)要么指定全部視圖列,要么全部省略不寫(xiě);如果省略了視圖的屬性列名,則視圖的列名與子查詢(xún)列名相同。子查詢(xún)中通常不包含ORDERBY和DISTINCT子句。

WITHCHECKOPTION:對(duì)視圖進(jìn)行UPDATE、INSERT、DELETE操作時(shí)要保證更新、插入或刪除的行滿(mǎn)足視圖定義中的謂詞條件。149

行列子集視圖:從單個(gè)基本表導(dǎo)出,保留基本表的碼,但去掉其它的某些列和部分行的視圖。

表達(dá)式視圖:帶虛擬列(經(jīng)過(guò)各種計(jì)算派生出的數(shù)據(jù)所設(shè)置的派生屬性列)的視圖。

分組視圖:子查詢(xún)目標(biāo)表帶有組函數(shù)或子查詢(xún)帶有GROUPBY子句的視圖。視圖分類(lèi)

150例1:建立信息系學(xué)生視圖

CREATEVIEWIS_Student

AS

SELECTSno,Sname,Ssex,Sage FROMStudent WHERESdept='IS';(行列子集視圖)建立視圖的結(jié)果是把視圖定義存入數(shù)據(jù)字典,并不執(zhí)行SELECT語(yǔ)句;只在對(duì)視圖查詢(xún)時(shí),才按其定義從基本表中將數(shù)據(jù)查出。151例2:建立計(jì)算機(jī)系學(xué)生視圖,并要求進(jìn)行修改和插入操作時(shí)仍需保證該視圖只有計(jì)算機(jī)系的學(xué)生。

CREATEVIEWCS_Student

AS

SELECTSno,Sname,Ssex,Sage FROMStudent WHERESdept='CS'

WITHCHECKOPTION;由于加上了WITHCHECKOPTION子句,以后對(duì)該視圖進(jìn)行插入、修改、刪除操作時(shí),DBMS會(huì)自動(dòng)加上Sdept=‘CS’的條件。152例3:建立信息系選修了1號(hào)課程的學(xué)生的視圖。

CREATEVIEWIS_S1(Sno,Sname,Grade)

AS

SELECTStudent.Sno,Sname,Grade FROMStudent,SC WHERESdept='IS'ANDSC.Cno='1'

ANDStudent.Sno=SC.Sno;建立在多個(gè)基本表上153例4:建立信息系選修了1號(hào)課程且成績(jī)?cè)?0分以上的學(xué)生的視圖。

CREATEVIEWIS_S2

AS

SELECTSno,Sname,Grade FROMIS_S1 WHEREGrade>=90;建立在已定義的視圖上154例5:定義一個(gè)反映學(xué)生出生年份的視圖。

CREATEVIEWBT_S(Sno,Sname,Sbirth)

AS

SELECTSno,Sname,2006-Sage FROMStudent;

(表達(dá)式視圖)虛擬列155例6:將學(xué)生的學(xué)號(hào)及他的平均成績(jī)定義為一個(gè)視圖。

CREATEVIEWS_G(Sno,Gavg)

AS

SELECTSno,AVG(Grade) FROMSC

GROUPBYSno;

(分組視圖)156例7:將Student表中所有女生記錄定義為一個(gè)視圖。CREATEVIEWF_Student(stdnum,name,sex,age,dept)

AS

SELECT* FROMStudent

WHERESsex='女';如果修改了基本表Student的結(jié)構(gòu),則視圖與基本表之間的映象關(guān)系被破壞,視圖就不能正確工作。為避免出現(xiàn)該類(lèi)問(wèn)題,最好在修改基本表之后刪除有該基本表導(dǎo)出的視圖,然后重建(同名)視圖。157刪除視圖格式:DROPVIEW<視圖名>;例8:刪除視圖IS_S1。DROPVIEWIS_S2;

(IS_S2由IS_S1導(dǎo)出)

DROPVIEWIS_S1;1583.5.2查詢(xún)視圖視圖消解(ViewResolution)在對(duì)視圖查詢(xún)時(shí),DBMS將進(jìn)行有效性檢查(表及視圖)。若存在,則從數(shù)據(jù)字典中取出視圖定義,并把定義中的子查詢(xún)與用戶(hù)查詢(xún)結(jié)合起來(lái)轉(zhuǎn)換為等價(jià)的對(duì)基本表的查詢(xún),然后再執(zhí)行。159例1:在信息系學(xué)生的視圖中查找年齡小于20的學(xué)生。

SELECTSno,Sname FROMIS_Student WHERESage<20;視圖消解

SELECTSno,Sname FROMStudent WHERESage<20ANDSdept='IS';160例2:查詢(xún)信息系選修了1號(hào)課程的學(xué)生。

SELECTSno,Sname FROMIS_Student,SC WHERESC.Sno=IS_Student.Sno

ANDSC.Cno='1';視圖消解

SELECTStudent.Sno,Sname FROMStudent,SC WHERESC.Cno='1'ANDSdept='IS'

Student.Sno=SC.Sno;161例3:在S_G視圖中查詢(xún)平均成績(jī)?cè)?0分以上的學(xué)生學(xué)號(hào)和平均成績(jī)。SELECT*FROMS_GWHEREGavg>=90;(系統(tǒng)轉(zhuǎn)換后)

SELECTSno,AVG(Grade)FROMSCWHEREAVG(Grade)>=90GROUPBYSno;SELECTSno,AVG(Grade)FROMSCGROUPBYSno;162例3:在S_G視圖中查詢(xún)平均成績(jī)?cè)?0分以上的學(xué)生學(xué)號(hào)和平均成績(jī)。SELECT*FROMS_GWHEREGavg>=90;(系統(tǒng)轉(zhuǎn)換后)SELECTSno,AVG(Grade)FROMSCGROUPBYSnoHAVINGAVG(Grade)>=90;1633.5.3更新視圖更新視圖即通過(guò)視圖插入(INSERT)、刪除(DELETE)和修改(UPDATE)數(shù)據(jù),實(shí)質(zhì)上轉(zhuǎn)換為對(duì)基本表的更新。為了防止用戶(hù)對(duì)超出視圖范圍的基本表的數(shù)據(jù)進(jìn)行操作,在定義視圖時(shí),應(yīng)加上WITHCHECKOPTION子句,則在視圖上更新數(shù)據(jù)時(shí),DBMS將檢查視圖定義中的條件,不滿(mǎn)足將拒絕執(zhí)行。164例1:將信息系學(xué)生視圖IS_Student中學(xué)號(hào)為95002的學(xué)生的姓名改為“劉辰”。UPDATEIS_StudentSETSname='劉辰'WHERESno='95002';

(系統(tǒng)轉(zhuǎn)換后)UPDATEStudentSETSname='劉辰'WHERESno='95002'ANDSdept='IS';165例2:向信息系學(xué)生視圖IS_Student中插入一名新生,學(xué)號(hào)為95006,姓名為趙新,年齡為20歲的學(xué)生。INSERTINTOIS_StudentVALUES('95006','趙新',20);

(系統(tǒng)轉(zhuǎn)換后)INSERTINTOStudent(Sno,Sname,Sage,Sdept)VALUES('95006','趙新',20,'IS');166例3:刪除信息系學(xué)生視圖IS_Student中學(xué)號(hào)為95006的記錄。DELETEFROMIS_StudentWHERESno='95006';

(系統(tǒng)轉(zhuǎn)換后)DELETEFROMStudentWHERESno='95006'ANDSdept='IS';167一般情況下,行列子集視圖是可更新的。不可更新的視圖(各系統(tǒng)不太一致)由多個(gè)表導(dǎo)出的視圖,不可更新視圖的列來(lái)自表達(dá)式或常數(shù),不可插入、修改、可刪除視圖列是來(lái)自集函數(shù),不可更新視圖定義中含有GROUPBY子句,不可更新視圖定義中含有DISTINCT短語(yǔ),不可更新視圖定義中內(nèi)層嵌套的表與導(dǎo)出該視圖表相同,不可更新在不允許更新的視圖上定義的視圖,不可更新168例:將SC中成績(jī)?cè)谄骄煽?jī)之上的元組定義成一個(gè)視圖GOOD_SC。

CREATEVIEWGOOD_SCASSELECTSno,Cno,GradeFROMSCWHEREGrade>(SELECTAVG(Grade)FROMSC);1693.5.4視圖的作用視圖能夠簡(jiǎn)化用戶(hù)的操作

使數(shù)據(jù)庫(kù)看起來(lái)結(jié)構(gòu)簡(jiǎn)單、清晰、可簡(jiǎn)化用戶(hù)的數(shù)據(jù)查詢(xún)操作視圖使用戶(hù)能以多種角度看待同一數(shù)據(jù)

使不同的用戶(hù)以不同的方式看待同一數(shù)據(jù)視圖對(duì)重構(gòu)數(shù)據(jù)庫(kù)提供了一定程度的邏輯獨(dú)立性視圖能夠?qū)C(jī)密數(shù)據(jù)提供安全保護(hù)

對(duì)不同的用戶(hù)定義不同的視圖,使機(jī)密數(shù)據(jù)不出現(xiàn)在不應(yīng)看到這些數(shù)據(jù)的用戶(hù)的視圖上。1703.6數(shù)據(jù)控制數(shù)據(jù)控制功能數(shù)據(jù)庫(kù)恢復(fù)、并發(fā)控制數(shù)據(jù)庫(kù)的安全性控制數(shù)據(jù)庫(kù)的完整性控制定義碼、取值唯一的列、不為空值的列、外碼及其他一些約束條件。支持事物、提交、回滾等。某用戶(hù)對(duì)某類(lèi)數(shù)據(jù)具有何種操作權(quán)力。把

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論