软件技术基础数据库技术课件

PPT
  • 阅读 52 次
  • 下载 0 次
  • 页数 82 页
  • 大小 526.117 KB
  • 2022-12-05 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
软件技术基础数据库技术课件
可在后台配置第一页与第二页中间广告代码
软件技术基础数据库技术课件
可在后台配置第二页与第三页中间广告代码
软件技术基础数据库技术课件
可在后台配置第三页与第四页中间广告代码
软件技术基础数据库技术课件
软件技术基础数据库技术课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 82
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】软件技术基础数据库技术课件.ppt,共(82)页,526.117 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-92398.html

以下为本文档部分文字说明:

Spring,2010.zhaoHaixia.1第三章关系数据库语言SQL(续)概述SQL的数据定义SQL的数据操纵SQL的视图定义SQL的数据控制嵌入式SQLSpring,2010.zhaoHaixia.2联接查询(1of8)联接查

询:涉及至少两个表的查询。SQL中没有专门的JOIN命令,而是通过SELECT语句中的WHERE子句来达到联接运算的目的,因此更加灵活、简便。Spring,2010.zhaoHaixia.3联接查询(2of8)联接条件的一般格式为

:[〈表名1〉.]〈列名1〉〈比较运算符〉[〈表名2〉.]〈列名2〉其中:比较运算符主要有:=、>、<、>=、<=和!=;联接谓词中的列名称为联接字段。联接条件中,联接字段类型必须是可比的,但联接字段不一定是同名的。Spring,2010.zhaoHaixia.4例1:(简单的联接查询)求选修C2

课程的学生学号、姓名和成绩。SELECTStudent.Sno,Sname,GradeFROMStudent,SCWHEREStudent.Sno=SC.SnoANDSC.Cno=´C2´;联接条件或称联接谓词联接字段表名前缀(字段名唯一时可省略)E

xample--联接查询(3of8)Spring,2010.zhaoHaixia.5例2:(多表联接)求学生学号、姓名、选修课程名、成绩。Example--联接查询(4of8)SC:SnoCnoGradeStudent:SnoSnameSsexSdeptSageCourse:

CnoCnameCpnoCcreditC1G1C2HC12C3IC13C4JC22C5KC42S1C1AS1C2AS1C3AS1C5BS2C1BS2C2CS2C4CS3C2BS3C3CS3C4BS4C3BS4C5DS5C2CS5C3BS5C

5BS6C4AS6C5AS1A1CS20S2B1CS21S3C0MA19S4D0CI19S5E1MA20S6F0CS22Spring,2010.zhaoHaixia.6SELECTStudent.Sno,Sname,Cname,GradeFROMStudent,Course,SCWHERE

Student.Sno=SC.SnoANDSC.Cno=Course.Cno;例2续:(多表联接)求学生学号、姓名、选修课程名、成绩。Example--联接查询(5of8)Spring,2010.zhaoHaixi

a.7C:CnoCnameCpnoCcreditC1G1C2HC12C3IC13C4JC22C5KC42Example--联接查询(6of8)例3:(单表或自身联接)求每一门课的间接先行课。SELECTFIRST.Cno,SECO

ND.CpnoFROMCourseFIRST,CourseSECONDWHEREFIRST.Cpno=SECOND.Cno;SQL语句为:直观的查找过程C:CnoCnameCpnoCcreditC1G1C2H

C12C3IC13C4JC22C5KC42FIRSTSECOND查询结果为:CnoCpnoC4C1C5C2别名引入Spring,2010.zhaoHaixia.8Example--联接查询(7of8)例4:(外部连接)查询每个学生及其选修课程的情况包括

没有选修课程的学生SELECTStudent.Sno,Sname,Ssex,Sage,Sdept,Cno,GradeFROMStudent,SCWHEREStudent.Sno=SC.Sno(*);左外部连接:外连接符(*)出现在连接条件的左边右外

部连接:外连接符(*)出现在连接条件的右边外部连接中不匹配的分量用NULL表示Spring,2010.zhaoHaixia.9S1A1CS20S2B1CS21S3C0MA19Student:SnoSnameSsexSdeptSageS1C1AS1C2AS2C1BSC:SnoCnoGrade

右外连接结果S1A1CS20C1AS1A1CS20C2AS2B1CS21C1BS3C0MA19Student.SnoSnameSsexSdeptSageCnoGradeExample--联接查询(8of8)Spring,2010.zhaoHaix

ia.10嵌套查询(子查询)概述带有IN谓词的子查询带有比较运算符的子查询带有ANY或ALL谓词的子查询带有EXISTS谓词的子查询Spring,2010.zhaoHaixia.11嵌套查询(子查询)嵌套查询(子查询)嵌套查询由内向外处

理SQL允许多层嵌套嵌套查询中最常用的谓词是IN嵌套查询层次分明、容易理解SELECTSno,SnameFROMStudentWHERESnoIN(SELECTSnoFROMSCWHERECnoIN(SELECTCnoFROMCourseWHERECname

=´J´));将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询子查询父查询限制:子查询不能使用ORDERBY子句Spring,2010.zhaoHaixia.12

嵌套查询的分类不相关子查询:子查询的查询条件不依赖于父查询由里向外逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。相关子查询:子查询的查询条件依赖于父查询首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若

WHERE子句返回值为真,则取此元组放入结果表;然后再取外层表的下一个元组;重复这一过程,直至外层表全部检查完为止。Spring,2010.zhaoHaixia.13例1:查询与A在同一个系学习的学生SELECTS1.*FROMStudentS1WHERES1.S

deptIN(SELECTSdeptFROMStudentS2WHERES2.Sname=´A´);带IN谓词的子查询(1of5)SELECT*FROMStudentWHERESdeptIN(SELECTSdeptFROMStudentWHER

ESname=´A´);分析:可以用联接实现SELECTS1.*FROMStudentS1,StudentS2,WHERES1.Sdept=S2.SdeptANDS2.Sname=´A´;但最后结果只包含Student中的字段,应

考虑更为有效直观的方法:确定A同学所在系名找在该系学习的学生backSpring,2010.zhaoHaixia.14例2:嵌套查询:求选修了课程名为´J´的学生学号和姓名。在Course中找课程´J´的编号在SC中找选修该课的学生学号在Student中找选修该课的学生姓

名带IN谓词的子查询(2of5)分析:可以用联接来实现,但最后结果只包含Student中的字段,应考虑更有效、直观的方法:Spring,2010.zhaoHaixia.15带IN谓词的子查询(3of5)S1C1AS1C2AS1C3AS1C5BS2C1BS

2C2CS2C4CS3C2BS3C3CS3C4BS4C3BS4C5DS5C2CS5C3BS5C5BS6C4AS6C5ASC:SnoCnoGradeCourse:CnoCnameCpnoCcreditS1A1CS20S2B1CS21S

3C0MA19S4D0CI19S5E1MA20S6F0CS22C1G1C2HC12C3IC13C4JC23C5KC42Student:SnoSnameSsexSdeptSageSpring,2010.zh

aoHaixia.16在Course中找课程´J´的编号在SC中找选修该课的学生学号在Student中找选修该课的学生学号和姓名SELECTCnoFROMCourseWHERECname=´J´;SELECTSnoFROMSCWHERECnoIN(´

C4´);SELECTSno,SnameFROMStudentWHERESnoIN(´S2´,´S3´,´S6´);带IN谓词的子查询(4of5)最后的查询语句:SELECTSno,SnameFROMStudentWHERESnoIN(SELECTSnoFROMSCWHERECnoIN(SELEC

TCnoFROMCourseWHERECname=´J´));SELECTSno,SnameFROMStudentWHERESnoIN(SELECTSnoFROMSCWHERECnoIN(SELECTCnoFROMCourse

WHERECname=´J´));Spring,2010.zhaoHaixia.17带IN谓词的子查询(5of5)用连接查询实现本例:SELECTSno,SnameFROMStudent,SC,Course

WHEREStudent.Sno=SC.SnoANDSC.Cno=Course.CnoANDCourse.Cname=‘J’;例1、2是相关子查询还是不相关子查询?Spring,2010.zhaoHaix

ia.18带有比较运算符的子查询(1of2)当能确切知道内层查询返回单值时,可用比较运算符(>,<,=,>=,<=,!=或<>)与ANY或ALL谓词配合使用Spring,2010.zhaoHaixia.19带有比较运算符的子查询(2of2)又看例1:查询与

A在同一个系学习的学生SELECT*FROMStudentWHERESdeptIN(SELECTSdeptFROMStudentWHERESname=´A´);SELECT*FROMStudentWHERESdept=(SELECTSdeptFROMStudent

WHERESname=´A´);SELECT*FROMStudentWHERE(SELECTSdeptFROMStudentWHERESname=´A´)=Sdept;子查询应跟在比较符之后Spring,20

10.zhaoHaixia.20带有ANY或ALL谓词的子查询(1of5)谓词语义ANY:某一个值ALL:所有值使用ANY或ALL谓词时必须同时使用比较运算符ANYALL><=>=<=!=或<>Spring,2010.zhaoHaixia.21带有ANY或ALL谓词的子查询(2of5

)例1:查询其他系中比IS系某一学生年龄小的学生姓名和年龄SELECTSname,SageFROMStudentWHERESage<ANY(SELECTSageFROMStudentWHERESdept=‘IS’)ANDSD<>’IS’;其他方法?Spring,2010.zhaoHai

xia.22带有ANY或ALL谓词的子查询(3of5)例1’:查询其他系中比IS系某一学生年龄小的学生姓名和年龄用集函数:SELECTSname,SageFROMStudentWHERESage<(SELECTMAX(Sage)FROMStudentWHERESdept=‘IS’)ANDS

dept<>’IS’;效率更高Spring,2010.zhaoHaixia.23带有ANY或ALL谓词的子查询(4of5)例2:查询其他系中比IS系所有学生年龄都小的学生姓名和年龄SELECTSname,SageFROMStudentWHERESage<ALL(SELECTSageF

ROMStudentWHERESdept=‘IS’)ANDSD<>’IS’;SELECTSname,SageFROMStudentWHERESage<(SELECTMIN(Sage)FROMStudent

WHERESdept=‘IS’)ANDSdept<>’IS’;Spring,2010.zhaoHaixia.24带有ANY或ALL谓词的子查询(5of5)=<>或!=<<=>>=ANYIN--<MAX<=MAX>MIN>=MINALL--NOT

IN<MIN<=MIN>MAX>=MAXANY,ALL与集函数及IN谓词的对应关系Spring,2010.zhaoHaixia.25带有EXISTS谓词的子查询(1of15)EXISTS谓词与NOT

EXISTS谓词不同形式的查询间的替换用EXISTS/NOTEXISTS实现全称量词用EXISTS/NOTEXISTS实现逻辑蕴函Spring,2010.zhaoHaixia.26带有EXISTS谓词的子查询(2of15)EXISTS谓词存在量

词带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”若内层查询结果非空,则返回真值若内层查询结果为空,则返回假值Spring,2010.zhaoHaixia.

27带有EXISTS谓词的子查询(3of15)例1:查询所有选修了1号课程的学生姓名SELECTSnameFROMStudentWHEREEXISTS(SELECT*FROMSCWHERESno=Student.SnoANDCno=‘1’);若内层查询结

果非空,则为真否则为假相当于一个变量,根据它的值处理内层查询Student中有多少个学号,内层查询就进行多少次属于相关子查询:查询条件依赖于外层查询中某个值Spring,2010.zhaoHaixia.28带有EXISTS谓词的子查询(4of15)例1:查询所有选修了1号课程的学生姓名S

ELECTSnameFROMStudentWHEREEXISTS(SELECT*FROMSCWHERESno=Student.SnoANDCno=‘1’);由EXISTS引出的子查询,其目标列表达式通常都用*,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意

义其他方法?用联结、相关、不相关子查询实现Spring,2010.zhaoHaixia.29带有EXISTS谓词的子查询(5of15)例2:查询没有选修1号课程的学生姓名SELECTSnameFROMStudentWHERENOTEXISTS(SELECT

*FROMSCWHERESno=Student.SnoANDCno=´1´);若内层查询结果空,则为真否则为假此例用连接运算难于实现SELECTSnameFROMStudent,SCWHEREStudent.Sno=SC.SnoANDCno<>’1’;Spr

ing,2010.zhaoHaixia.30带有EXISTS谓词的子查询(6of15)不同形式的查询间的替换一些带EXISTS或NOTEXISTS谓词的子查询不能被其他形式的子查询等价替换所有带IN谓词、比较运算符、AN

Y和ALL谓词的子查询都能用带EXISTS谓词的子查询等价替换。Spring,2010.zhaoHaixia.31带有EXISTS谓词的子查询(7of15)例:再看“查询与A在同一个系学习的学生”SELECT*FROMStudentS1WHEREEXISTSSE

LECT*FROMStudentS2WHERES2.Sdept=S1.SdeptANDS2.Sname='A';backSpring,2010.zhaoHaixia.32带有EXISTS谓词的子查询(8of15)用E

XISTS/NOTEXISTS实现全称量词(难点)SQL语言中没有全称量词(Forall)可以把带有全称量词的谓词转换为等价的带有存在量词的谓词:带全称量词的谓词带存在量词的谓词(x)P(x)

(x(P(x))≡Spring,2010.zhaoHaixia.33带有EXISTS谓词的子查询(9of15)例:查询选修了全部课程的学生姓名带全称量词的谓词带存在量词的谓词(x)P(x)(x(P(x))≡本例变为:选这样的学生姓名,没有一门课程是

他不选修的Spring,2010.zhaoHaixia.34选这样的学生姓名,没有一门课程是他不选修的分析:任给一学号Sno,若不存在他不选修的课,则显示他的姓名(Cno(学号为Sno的学生没修课程Cno))

(Cno(在SC中不存在选课单(Sno,Cno,…)))例:查询选修了全部课程的学生姓名带有EXISTS谓词的子查询(10of15)Spring,2010.zhaoHaixia.35SELECTSnameFROMStudentWHERENOTEXIS

TS(SELECT*FROMCourseWHERENOTEXISTS(SELECT*FROMSCWHERESno=Student.SnoANDCno=Course.Cno));带有EXISTS谓词的子查询(11of15)Spring,2010.zhaoHaixia.36带有EXISTS谓词的子查询

(12of15)用EXISTS/NOTEXISTS实现逻辑蕴函(难点)SQL语言中没有蕴函(Implication)逻辑运算可以利用谓词演算将逻辑蕴函谓词等价转换为:pq≡p∨qSpring,2010.zhaoHaixia.3

7带有EXISTS谓词的子查询(13of15)例、查询至少选修了学生95002选修的全部课程的学生号码分析:用逻辑蕴函表达:查询学号为x的学生,对所有的课程y,只要95002学生选修了课程y,则x也选修了y。形式化表示:用P表示谓词“学生95002选修了课程y”用q表示谓词“学生x选修了课

程y”则上述查询为:(y)pqSpring,2010.zhaoHaixia.38带有EXISTS谓词的子查询(14of15)等价变换:(y)pq≡(y((pq))≡(y((p∨q)≡y(p∧q

)变换后语义:不存在这样的课程y,学生95002选修了y,而学生x没有选。Spring,2010.zhaoHaixia.39带有EXISTS谓词的子查询(15of15)SELECTDISTINCTSnoFROMSCSCXWH

ERENOTEXISTS(SELECT*FROMSCSCYWHERESCY.Sno='95002'ANDNOTEXISTS(SELECT*FROMSCSCZWHERESCZ.Sno=SCX.SnoANDSCZ.Cno=SCY.Cno));不存在这样

的课程y,学生95002选修了y,而学生x没有选。PqSpring,2010.zhaoHaixia.40集合查询(1of6)包括:并操作UNION、交操作INTERSECT、差操作MINUS要求:各数据项数目必须相同,对应项的数据类型也必须相同。标准SQL中无交操作INTERSEC

T、差操作MINUS,但可以用其它方法来实现。Spring,2010.zhaoHaixia.41例(并操作):查询计算机科学系(CS)的学生及年龄不大于19岁的学生。SELECT*FROMStudentWHERESdept=´CS´UNIONSELECT*FROMStudentWHERESag

e<=19;SELECTDISTINCT*FROMStudentWHERE(Sdept=´CS´)OR(Sage<=19);集合查询(2of6)Spring,2010.zhaoHaixia.42集合查询(3of6)例(交操作):查询

计算机科学系(CS)且年龄不大于19岁的学生。SELECT*FROMStudentWHERE(Sdept=´CS´)AND(Sage<=19);SELECT*FROMStudentWHERE(Sdept=´CS´)ANDSnoIN(SELECTSnoFROMStudentWHERE(Sag

e<=19));Spring,2010.zhaoHaixia.43例(差操作):查询计算机科学系(CS)的学生与年龄不大于19岁的学生的差集。SELECT*FROMStudentWHERE(Sdept=´C

S´)AND(NOT(Sage<=19));SELECT*FROMStudentWHERE(Sdept=´CS´)ANDSnoNOTIN(SELECTSnoFROMStudentWHERE(Sage<=19));集合查询(4of6)Spring,2010.zhaoHaix

ia.44集合查询(5of6)对集合操作结果的排序ORDERBY子句只能用于对最终查询结果排序,不能对中间结果排序任何情况下,ORDERBY子句只能出现在最后对集合操作结果排序时,ORDERBY子句中用数字指定排序属性Spring,2010.zhaoHaixia.45集合查询(6of6

)SELECT*FROMStudentWHERESdept='CS'ORDERBYSnoUNIONSELECT*FROMStudentWHERESage<=19ORDERBYSno;SELECT*FROMStudentWHERESdept='CS'UNIONSELECT*FROMStud

entWHERESage<=19ORDERBY1;√Spring,2010.zhaoHaixia.46SELECT语句的一般格式前已介绍,请大家再自学一遍Spring,2010.zhaoHaixia.473.3.2SQL的数据更新--INSERT语句(1of5)插入INSER

T(1)把一个记录插入到表中INSERTINTO表名[(字段名[,字段名]…]VALUES(常量[,常量]…];(2)把子查询的结果插入到表中INSERTINTO表名[(字段名[,字段名]…]子查询;Spring

,2010.zhaoHaixia.48INSERTINTOStudent(Sno,Sname,Ssex,Sdept,Sage)VALUES(´S9´,´X´,´1´,´CS´,19);INSERTINTOStudent(Sno,Sname,Ssex,Sage,Sd

ept)VALUES(´S9´,´X´,´1´,19,´CS´);INSERTINTOSVALUES(´S9´,´X´,´1´,´CS´,19);例1:将学号为S9,姓名为X,性别为1,所在系为´CS´,年龄为19的学生记录插入到学生表中。Example(INSERT语句)(2of5)Spring

,2010.zhaoHaixia.49Example(INSERT语句)(3of5)例2:插入一条选课记录(‘S2','1')INSERTINTOSC(Sno,Cno)VALUES('S2','1');新插入的记录在Grade列上

取空值Spring,2010.zhaoHaixia.50INSERTINTOS_GRADE(Sno,AVG_GRADE)SELECTSno,AVG(Grade)FROMSCWHERESnoIN(SELECTSnoFR

OMStudentWHERESEX=´1´)GROUPBYSnoHAVINGAVG(GRADE)>80;例3:在关系SC中,把平均成绩大于80分的男学生(Ssex=1)的学号和平均成绩存入到另一个关系S_GRADE(Sno,AVG

_GRADE)中。Example(INSERT语句)(4of5)Spring,2010.zhaoHaixia.51Example(INSERT语句)(5of5)DBMS在执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则实体完整性参照完整性用户定义的完整性对于有NOTN

ULL约束的属性列是否提供了非空值对于有UNIQUE约束的属性列是否提供了非重复值对于有值域约束的属性列所提供的属性值是否在值域范围内Spring,2010.zhaoHaixia.523.3.2SQL的数据更新--Update语句(1of6)修改UpdateUPDATE<表名>SET<

列名>=<表达式>[,<列名>=<表达式>]…[WHERE<条件>];Spring,2010.zhaoHaixia.53Example(Update语句)(2of6)例1:把学生S1的成绩置0。UPDATESCSETGrade=0WHERESno=´S1´;UPDATEStudentSETSa

ge=Sage+1;例2:把所有学生的年龄增加1岁。Spring,2010.zhaoHaixia.54例3:把计算机科学系全体学生的成绩置零。Example(Update语句)(3of6)嵌套子查询UPDATESCSETGrade=0WHERE´C

S´=(SELECTSdeptFROMStudentWHEREStudent.Sno=SC.Sno);Spring,2010.zhaoHaixia.55例4:把课程名为M的成绩提高5%。Example(Update语句)(4of6)UPDATESCSETGrade=Grade*1

.05WHERECnoIN(SELECTCnoFROMCourseWHERECname=´M´);Spring,2010.zhaoHaixia.56例5:当C4课程的成绩低于该门课程的平均成绩时提高5%。Example(U

pdate语句)(5of6)UPDATESCSETGrade=Grade*1.05WHERECno=´C4´ANDGrade<(SELECTAVG(Grade)FROMSCWHERECno=´C4´);Spring,2010.zhaoHaixia.57Example(Update语句)(6o

f6)DBMS在执行修改语句时会检查修改操作是否破坏表上已定义的完整性规则实体完整性主码不允许修改用户定义的完整性NOTNULL约束UNIQUE约束值域约束Spring,2010.zhaoHaixia.583.3.2SQ

L的数据更新--DELETE语句(1of3)删除DELETEDELETEFROM表名[WHERE条件];无条件时,删除全部记录,但表的结构还在,相当于一个空表Spring,2010.zhaoHaixia.59例1:删除学号为

S1的学生。DELETEFROMStudentWHERESno=´S1´;例2:把数学系全体学生的选课记录删除。DELETEFROMSCWHERE´MA´=(SELECTSdeptFROMStudentWHEREStudent.Sno=SC.Sno);Exa

mple(DELETE语句)(2of3)Spring,2010.zhaoHaixia.60Example(DELETE语句)(3of3)DBMS在执行删除语句时会检查所删元组是否破坏表上已定义的完整性规则参照完整性不允许删除级

联删除Spring,2010.zhaoHaixia.61更新操作与数据库的一致性DBMS在执行插入、删除、更新语句时必须保证数据库一致性必须有事务的概念和原子性完整性检查和保证Spring,2010.zhaoHaixia.62关系数

据库语言SQL(续)概述SQL的数据定义SQL的数据操纵SQL的视图定义SQL的数据控制嵌入式SQLSpring,2010.zhaoHaixia.633.4SQL的视图定义视图是从一个或几个基本表(或视图)导出的

表。用户外模式是由若干基本表和/或若干视图构成的。视图是一个虚表,只存储视图的定义,数据存在所基于的基本表中。视图定义后就可象基本表一样来使用。可创建、删除视图可用来定义新的视图可在视图上查询(SELECT)可更新(INSERT,DELETE,UPDATE

)视图,但受限制Spring,2010.zhaoHaixia.641.建立视图基本格式CREATEVIEW视图名[(字段名[,字段名]…)]AS子查询[WITHCHECKOPTION]功能:在数据字典中存

储视图的定义(但并不执行子查询),此后视图名就可作为一个表来使用。限制表中特定列和行的使用隐藏复杂查询的细节将更新、插入和修改值限制到某个范围定义视图(1of11)对视图UPDATE、INSERT和DELETE时,记录

要满足子查询中的条件视图中包含的字段Spring,2010.zhaoHaixia.65例1:建立计算机系的学生视图。说明:若SELECT语句中有集函数、或字段表达式、或多表联接有同名字段时,则视图中

必须指定字段名;视图中字段名可以和基本表中的字段名不同;一般不允许有ORDERBY子句和DISTINCT短语。定义视图(2of11)CREATEVIEWCS_SASSELECTSno,Sname,SageFROMStudentWHER

ESdept=´CS´Spring,2010.zhaoHaixia.66定义视图(3of11)2.删除视图DROPVIEW视图名例:DROPVIEWCS_SSpring,2010.zhaoHaixia.6

7例2:建立信息系学生的视图。并要求进行修改和插入操作时仍保证该视图只有信息系的学生。注意:1、DBMS执行CREATEVIEW的结果只把对视图的定义存入数据字典;并不执行其中的查询语句。2、只有对视图进行查询时,才把视图的定义从数据字典中取出,转换成查询语句,进行

查询。单表行列子集视图定义视图(4of11)CREATEVIEWIS_SASSELECTSno,Sname,SageFROMStudentWHERESdept=´IS´(Sno,Sname,Sage)WITHCHECKOPTION;Spring,2010.z

haoHaixia.68例2(续):对IS_S视图的更新操作修改操作:DBMS自动加上Sdept='IS'的条件删除操作:DBMS自动加上Sdept='IS'的条件插入操作:DBMS自动检查Sdept属性值是否为'IS'如果不是,则拒绝该插入操作如果没有提

供Sdept属性值,则自动定义Sdept为'IS'定义视图(5of11)Spring,2010.zhaoHaixia.69例3:建立信息系选修了C1课程的学生的视图。多表视图定义视图(6of11)CREATEVIEWIS_S1ASSELECTStu

dent.Sno,Sname,GradeFROMStudent,SCWHERESdept=´IS´ANDStudent.Sno=SC.SnoANDSC.Cno=´C1´;(Sno,Sname,Grade)Spring,2010.zhaoHaixia.70CREA

TEVIEWIS_S2ASSELECTSno,Sname,GradeFROMIS_S1WHEREGrade=´A´;例4:建立信息系选修了C1课程且成绩为´A´的学生的视图。定义视图(7of11)建立在视图上的视图Spring,2010.zhaoHaixia.71例5:定义一个反映学生

出生年份的视图带表达式的视图定义视图(8of11)CREATEVIEWBT_S(Sno,Sname,Sbirth)ASSELECTSno,Sname,2006-SageFROMStudent;Spring,2010.z

haoHaixia.72例6:建立学生学号及平均成绩的视图。分组视图定义视图(9of11)CREATEVIEWS_G(Sno,Gavg)ASSELECTSno,AVG(Grade)FROMSCGROUPBYSnoSpri

ng,2010.zhaoHaixia.73定义视图(10of11)例7:将Student表中所有女生记录定义为一个视图CREATEVIEWF_S1(stdnum,name,sex,age,dept)ASSELECT*FRO

MStudentWHERESsex='女';缺点:修改基表Student的结构后,Student表与F_S1视图的映象关系被破坏,导致该视图不能正确工作。以SELECT*方式创建的视图可扩充性差,应尽可能避免Spring,2010.zhaoHaixia.74定义视图(11of11)为基

表Student增加属性列不会破坏Student表与F_S2视图的映象关系CREATEVIEWF_S(stdnum,name,sex,age,dept)ASSELECTSno,Sname,Ssex,Sage,SdeptFROMStudentWHERESsex='女';例7(续)S

pring,2010.zhaoHaixia.75查询视图(1of4)执行过程:首先进行有效性检查(视图、基本表是否存在等);从数据字典中取出视图的定义;把对视图的查询修改为对基本表的查询;在基本表上执行修改后的查询。这一转换过程称为视图消解。Spring,2010.zhaoHaixi

a.76SELECTSno,SageFROMWHERESage<20;例1:在信息系学生视图中找出年龄小于20岁的学生。SELECTSno,SageFROMIS_SWHERESage<20;修改为StudentSdept=´IS´视图中的子查询SELECTS

no,Sname,SageFROMStudentWHERESdept=´IS´AND查询视图(2of4)CREATEVIEWCS_SASSELECTSno,Sname,SageFROMStudentWHERESdept=´C

S´Spring,2010.zhaoHaixia.77查询视图(3of4)例2:查询信息系选修了C1课程的学生SELECTSno,SnameFROMIS_S,SCWHEREIS_S.Sno=SC.SnoANDSC.C

no=‘C1';有些情况下,视图消解法不能生成正确查询。采用视图消解法的DBMS会限制这类查询,见下面例3。Spring,2010.zhaoHaixia.78查询视图(4of4)例3:在S_G视图中查询平均成绩在90分以上的学生学号和平均成绩。CREATEVIEWS_G(Sno,Ga

vg)ASSELECTSno,AVG(Grade)FROMSCGROUPBYSnoSELECT*FROMS_GWHEREGavg>=90;SELECTSno,AVG(Grade)FROMSCWHEREAVG(Grade)>=90

GROUPBYSno;SELECTSno,AVG(Grade)FROMSCGROUPBYSnoHAVINGAVG(Grade)>=90;√Spring,2010.zhaoHaixia.79更新视图(1of3)更新操作包括INSERT,DELETE,UPDATE执行方式:将对

视图的更新语句转化为对相应的基本表的更新语句,然后执行。注意:不是所有的对视图的更新语句都可转化为正确的更新语句。例如:UPDATES_GSETGAVG=´B´WHERESno=´S1´;不能有意义地转化Spring,2010.zhaoHaixia.80INSERTINTOStuden

t(Sno,Sname,Sdept,Sage)VALUES(´S12´,´YanXi´,´IS´,19)例1:INSERTINTOIS_SVALUES(´S12´,´YanXi´,19)视图中的子查询SELECTSno,Sna

me,SageFROMStudentWHERESdept=´IS´更新视图(2of3)1、执行方式Spring,2010.zhaoHaixia.81更新视图(3of3)2、注意事项有些视图是可更新的,有些视图是不可更新的。但现在还无判别方法。肯定可以更新的视图是行列子集视图,且各个

系统对视图的更新还有进一步的规定。例如,DB2中规定了七条视图更新的原则:书P127~128Spring,2010.zhaoHaixia.82视图的作用视图能够简化用户的操作视图使用户能以多种角度看待同一数据视图对重构数据库提供了一定程度的逻辑独立性视图能够对机密数据提供安全保护

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?