数据库原理课件03SQL复习

上传人:pu****.1 文档编号:569512038 上传时间:2024-07-30 格式:PPT 页数:80 大小:798KB
返回 下载 相关 举报
数据库原理课件03SQL复习_第1页
第1页 / 共80页
数据库原理课件03SQL复习_第2页
第2页 / 共80页
数据库原理课件03SQL复习_第3页
第3页 / 共80页
数据库原理课件03SQL复习_第4页
第4页 / 共80页
数据库原理课件03SQL复习_第5页
第5页 / 共80页
点击查看更多>>
资源描述

《数据库原理课件03SQL复习》由会员分享,可在线阅读,更多相关《数据库原理课件03SQL复习(80页珍藏版)》请在金锄头文库上搜索。

1、数据库系统概论数据库系统概论An Introduction to Database System第三章第三章 关系数据库标准语言关系数据库标准语言SQLSQL第三章第三章关系数据库标准语言关系数据库标准语言SQL3.1SQL概述概述3.2学生学生课程数据库课程数据库3.3数据定义数据定义3.4数据查询数据查询3.5数据更新数据更新3.6视图视图3.7小结小结3.1.1SQL的产生与发展的产生与发展3.1SQL概述概述3.1.2SQL的特点的特点1、综合统一:、综合统一:SQL集集数据定义语言数据定义语言DDL、数据操纵数据操纵DML、数据控制语言数据控制语言DCL的功能于一体。的功能于一体。2

2、、高度非过程化:只要提出、高度非过程化:只要提出“做什么做什么”,而无须指明,而无须指明“怎么做怎么做”。3、面向集合的操作方式:采用集合操作方式,操作、面向集合的操作方式:采用集合操作方式,操作对象和结果都是元组的集合。对象和结果都是元组的集合。4、以同一种语法结构提供两种使用方法:既是独立的、以同一种语法结构提供两种使用方法:既是独立的语言,又是嵌入式语言。语言,又是嵌入式语言。3.1.2SQL的特点的特点(续)(续)5 5、语言简洁,易学易用:类似于英语的自然语言简洁、语言简洁,易学易用:类似于英语的自然语言简洁易用。核心功能只用易用。核心功能只用9 9个动词。个动词。3.1.3SQL的

3、基本概念的基本概念nSQL语言支持关系数据库三级模式结构,外模式语言支持关系数据库三级模式结构,外模式对应于视图和部分基本表,模式对应于基本表,对应于视图和部分基本表,模式对应于基本表,内模式对应于存储文件。内模式对应于存储文件。3.2学生学生课程数据库课程数据库本章用到了三个表:本章用到了三个表:学生表:学生表:Student(Sno,Sname,Ssex,Sdept)课程表:课程表:Course(Cno,Cname,Cpno,Ccredit)学生选课表:学生选课表:SC(Sno,Cno,Grade)返回3.3数数据据定定义义 3.3.1模式的定义与删除模式的定义与删除n定义模式实际上定义了

4、一个定义模式实际上定义了一个命名空间命名空间nCREATESCHEMAAUTHORIZATION|3.3.2基本表的定义、删除与修改基本表的定义、删除与修改1.定义基本表定义基本表CREATETABLE(,););学生选课表SC例例7:建立一个:建立一个“学生选课学生选课”表表SCCREATE TABLE SC (Sno CHAR(9), Cno CHAR(4), Grade SMALLINT, PRIMARY KEY (Sno,Cno), /* 主码由两个属性构成,必须作为表级完整性进行定义主码由两个属性构成,必须作为表级完整性进行定义*/ FOREIGN KEY (Sno) REFEREN

5、CES Student(Sno), /* 表级完整性约束条件,表级完整性约束条件,Sno是外码,被参照表是是外码,被参照表是Student */ FOREIGN KEY (Cno) REFERENCES Course(Cno) /* 表级完整性约束条件,表级完整性约束条件, Cno是外码,被参照表是是外码,被参照表是Course*/); 定义基本表(续)定义基本表(续)n常用完整性约束常用完整性约束主码约束主码约束:PRIMARYKEY唯一性约束唯一性约束:UNIQUE非空值约束:非空值约束:NOTNULL参照完整性约束:参照完整性约束:FOREIGNKEY()()REFERENCES2.修改

6、基本表修改基本表ALTERTABLEADD完整性约束完整性约束DROPDROPCOLUMNALTERCOLUMN;3.删除基本表删除基本表 DROPTABLERESTRICT|CASCADE;3.4数据查询数据查询 3.4.1概述概述3.4.2单表查询单表查询3.4.3连接查询连接查询3.4.4嵌套查询嵌套查询3.4.5集合查询集合查询3.4.6SELECT语句的一般格式语句的一般格式 返回3.4.2单表查询单表查询 n查询仅涉及一个表,是一种最简单的查询操作查询仅涉及一个表,是一种最简单的查询操作一、选择表中的若干列一、选择表中的若干列二、选择表中的若干元组二、选择表中的若干元组三、三、OR

7、DERBY子句子句四、聚集函数四、聚集函数五、五、GROUPBY子句子句 返回一、选择表中的若干列一、选择表中的若干列n查询指定列查询指定列例例1查询全体学生的学号与姓名。查询全体学生的学号与姓名。SELECTSno,SnameFROMStudent; 例例5.1 5.1 使用列使用列别名别名改变查询结果的列标题改变查询结果的列标题SELECTSnameNAME,YearofBirth:BIRTH,2000-SageBIRTHDAY,LOWER(Sdept)DEPARTMENTFROMStudent;返回输出结果:输出结果:NAMEBIRTHBIRTHDAYDEPARTMENT-李勇李勇Yea

8、rofBirth:1976cs刘晨刘晨YearofBirth:1977is王名王名YearofBirth:1978ma张立张立YearofBirth:1977is二、选择表中的若干元组二、选择表中的若干元组 1.消除取值重复的行消除取值重复的行例例6查询选修了课程的学生学号。查询选修了课程的学生学号。(1)SELECTSnoFROMSC或或SELECTALLSnoFROMSC结果:结果:Sno-9500195001950019500295002(2)SELECTDISTINCTSnoFROMSC;结果:结果:Sno-95001950022.查询满足条件的元组查询满足条件的元组WHERE子句常用

9、的查询条件子句常用的查询条件查询条件查询条件谓词谓词比较比较=,=,=,!,!,NOT+上述比较运上述比较运算符算符确定范围确定范围BETWEENAND,NOTBETWEENAND确定集合确定集合IN,NOTIN字符匹配字符匹配LIKE,NOTLIKE空值空值ISNULL,ISNOTNULL多重条件(逻辑运算)多重条件(逻辑运算) AND,OR,NOT(1)比较大小比较大小例例8查询所有年龄在查询所有年龄在20岁以下的学生姓名及其年龄。岁以下的学生姓名及其年龄。SELECTSname,SageFROMStudentWHERESage=20; (2)确定范围确定范围例例10查询年龄在查询年龄在2

10、023岁(包括岁(包括20岁和岁和23岁)之间岁)之间的学生的姓名、系别和年龄。的学生的姓名、系别和年龄。SELECTSname,Sdept,SageFROMStudentWHERESageBETWEEN20AND23; (3)确定集合确定集合n使用谓词使用谓词IN,NOTINn:用逗号分隔的一组取值:用逗号分隔的一组取值例例12查询信息系(查询信息系(IS)、数学系()、数学系(MA)和计算机科)和计算机科学系(学系(CS)学生的姓名和性别。)学生的姓名和性别。SELECTSname,SsexFROMStudentWHERESdeptIN(IS,MA,CS);(4)字符串匹配字符串匹配nNO

11、TLIKEESCAPEn:指定的匹配模板:指定的匹配模板n匹配模板:固定字符串或含通配符的字符串匹配模板:固定字符串或含通配符的字符串n当当匹匹配配模模板板为为固固定定字字符符串串时时,可可以以用用=运运算算符符取取代代LIKE谓谓词词,用用!=或或运运算算符符取取代代NOTLIKE谓谓词词例题例题1)匹配模板为固定字符串匹配模板为固定字符串例例14查询学号为查询学号为95001的学生的详细情况。的学生的详细情况。SELECT*FROMStudentWHERESnoLIKE95001;等价于:等价于:SELECT*FROMStudentWHERESno=95001;2) 2) 匹配模板为含通配

12、符的字符串匹配模板为含通配符的字符串例例15查询所有姓刘学生的姓名、学号和性别。查询所有姓刘学生的姓名、学号和性别。SELECTSname,Sno,SsexFROMStudentWHERESnameLIKE刘刘%;(5)涉及空值的查询涉及空值的查询n使用谓词使用谓词ISNULL或或ISNOTNULLn注意:注意:“ISNULL”不能用不能用“=NULL”代替代替例例21某些学生选修课程后没有参加考试,所以某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。生的学号和相应的课程号。SELECTSno,

13、CnoFROMSCWHEREGradeISNULL;(6)多重条件查询多重条件查询n用逻辑运算符用逻辑运算符AND和和OR来联结多个查询条件来联结多个查询条件AND的优先级高于的优先级高于OR可以用括号改变优先级可以用括号改变优先级例例23查询计算机系年龄在查询计算机系年龄在20岁以下的学生姓名。岁以下的学生姓名。SELECTSnameFROMStudentWHERESdept=CSANDSage20;三、三、ORDERBY子句子句 n可以按一个或多个属性列排序可以按一个或多个属性列排序n升序:升序:ASC;降序:;降序:DESC;缺省值为升序;缺省值为升序例例24查查询询选选修修了了3号号课

14、课程程的的学学生生的的学学号号及及其其成成绩绩,查询结果按分数降序排列。查询结果按分数降序排列。SELECTSno,GradeFROMSCWHERECno=3ORDERBYGradeDESC;SnoGrade9501095024950079295003829501082950097595014619500255四、使用聚集函数四、使用聚集函数 计数计数COUNT(DISTINCT|ALL*)COUNT(DISTINCT|ALL)计算总和计算总和SUM(DISTINCT|ALL)计算平均值计算平均值AVG(DISTINCT|ALL)四、使用聚集函数四、使用聚集函数 求最大值求最大值MAX(DIS

15、TINCT|ALL)求最小值求最小值MIN(DISTINCT|ALL)例例 26 查查 询询 学学 生生 总总 人人 数数SELECTCOUNT(*)FROMStudent;例例28计算计算1号课程的学生平均成绩。号课程的学生平均成绩。SELECTAVG(Grade)FROMSCWHERECno=1;五、对查询结果分组五、对查询结果分组 使使用用GROUPBY子子句句将将查查询询结结果果按按某某一一列列或或者者多多列列的值进行分组,值相等的为一组。的值进行分组,值相等的为一组。例例30求各个课程号及相应的选课人数。求各个课程号及相应的选课人数。SELECTCno,COUNT(Sno)FROMS

16、CGROUPBYCno;CnoCOUNT(Sno) 1222343444335483.4.3连接查询连接查询 n同时涉及多个表的查询称为同时涉及多个表的查询称为连接查询连接查询n用来连接两个表的条件称为用来连接两个表的条件称为连接条件连接条件或或连接谓词连接谓词n连接条件或连接谓词一般格式:连接条件或连接谓词一般格式:.比较运算符:比较运算符:=、=、=、!=n.BETWEEN.AND.连接查询示例连接查询示例例:例:查询每个学生及其选修课程的情况。查询每个学生及其选修课程的情况。SELECTStudent.*,SC.*FROMStudent,SCWHEREStudent.sno=SC.sno

17、n两个表间的联系由两个表间的联系由公共属性公共属性sno实现实现StudentSCStudent.sno=SC.sno连接查询连接查询(续)(续)SQL中连接查询的主要类型中连接查询的主要类型 广义笛卡尔积广义笛卡尔积 等值连接等值连接(含自然连接含自然连接) 非等值连接查询非等值连接查询 自身连接查询自身连接查询 外连接查询外连接查询 复合条件连接查询复合条件连接查询返回SELECTStudent.*,SC.*FROMStudent,SCSELECTStudent.*,SC.*FROMStudent,SCWHEREStudent.Sno=SC.Sno例:例:SELECTStudent.*,S

18、C.*FROMStudent,SCWHEREStudent.SnoSC.SnoSELECTFIRST.Cno,SECOND.CpnoFROMCourseFIRST,CourseSECONDWHEREFIRST.Cpno=SECOND.Cno SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student LEFT OUT JOIN SC ON (Student.Sno=SC.Sno);SELECTStudent.Sno,Sname,Cname,GradeFROMStudent,SC,CourseWHEREStudent.Sno=S

19、C.SnoandSC.Cno=Course.Cno3.4.4嵌套查询嵌套查询n嵌套查询概述嵌套查询概述n嵌套查询分类嵌套查询分类n嵌套查询求解方法嵌套查询求解方法n引出子查询的谓词引出子查询的谓词 返回嵌套查询嵌套查询(续续)n嵌套查询概述嵌套查询概述一个一个SELECT-FROM-WHERE语句称为一个查询块语句称为一个查询块将一个查询块嵌套在另一个查询块的将一个查询块嵌套在另一个查询块的WHERE子句子句或或HAVING短语的条件中的查询称为嵌套查询短语的条件中的查询称为嵌套查询n不相关子查询:子查询的查询条件不依赖于父查询不相关子查询:子查询的查询条件不依赖于父查询n相关子查询:子查询的

20、查询条件依赖于父查询相关子查询:子查询的查询条件依赖于父查询引出子查询的谓词引出子查询的谓词n带有带有IN谓词的子查询谓词的子查询n带有比较运算符的子查询带有比较运算符的子查询n带有带有ANY或或ALL谓词的子查询谓词的子查询n带有带有EXISTS谓词的子查询谓词的子查询返回一、带有一、带有IN谓词的子查询谓词的子查询例例39查询与查询与“刘晨刘晨”在同一个系学习的学生。在同一个系学习的学生。此查询要求可以分步来完成此查询要求可以分步来完成SELECTSno,Sname,SdeptFROMStudentWHERESdeptIN(SELECTSdeptFROMStudentWHERESname=

21、刘晨刘晨)n此查询为不相关子查询。此查询为不相关子查询。DBMS求解该查询时也是求解该查询时也是分步去做的。分步去做的。带有带有IN谓词的子查询(续)谓词的子查询(续)n可以用自身连接完成本查询要求可以用自身连接完成本查询要求SELECTS1.Sno,S1.Sname,S1.SdeptFROMStudentS1,StudentS2WHERES1.Sdept=S2.SdeptANDS2.Sname=刘晨刘晨为数据库起别名为数据库起别名例例41找出每个学生超过他选修课程平均成绩的课程号。找出每个学生超过他选修课程平均成绩的课程号。二、带有比较运算符的子查询二、带有比较运算符的子查询SELECTSn

22、o,CnoFROMSCxWHEREGrade=(SELECTAVG(Grade)FROMSCyWHEREy.Sno=x.Sno)返回相关子查询相关子查询带有比较运算符的子查询(续)带有比较运算符的子查询(续)SELECTSno,CnoFROMSCxWHEREGrade=(SELECTAVG(Grade)FROMSCyWHEREy.Sno=x.Sno)返回从外层查询中取出从外层查询中取出SC的一个元组的一个元组x,将元组将元组x的的Sno值(值(200215121)传送)传送给内层查询。给内层查询。SELECTAVG(Grade)FROMSCyWHEREy.Sno=200215121执行内层查询

23、,得到值执行内层查询,得到值88,用该,用该值代替内层查询,得到外层查询:值代替内层查询,得到外层查询:SELECTSno,CnoFROMSCxWHEREGrade=88执行这个查询,得到:执行这个查询,得到:(200215121,1)(200215121,3)外层查询取出下一元组重复上述外层查询取出下一元组重复上述1至至3步骤的处理,直到外层的步骤的处理,直到外层的SC元组全元组全部处理完毕。部处理完毕。三、带有三、带有ANY或或ALL谓词的子查询谓词的子查询例例42查询其他系中比信息系任意一个查询其他系中比信息系任意一个(其中某一个其中某一个)学生年龄小的学生姓名和年龄学生年龄小的学生姓名

24、和年龄SELECTSname,SageFROMStudentWHERESageANY(SELECTSageFROMStudentWHERESdept=IS)ANDSdeptIS/*注意这是父查询块中的条件注意这是父查询块中的条件*/四、带有四、带有EXISTS谓词的子查询谓词的子查询例例44查询所有选修了查询所有选修了1号课程的学生姓名。号课程的学生姓名。思路分析:思路分析:本查询涉及本查询涉及Student和和SC关系。关系。在在Student中依次取每个元组的中依次取每个元组的Sno值,用此值去检值,用此值去检查查SC关系。关系。若若SC中存在这样的元组,其中存在这样的元组,其Sno值等于

25、该值等于该Student.Sno值,并且其值,并且其Cno=1,则取此,则取此Student.Sname送入结果关系。送入结果关系。带有带有EXISTS谓词的子查询谓词的子查询(续续)用嵌套查询用嵌套查询SELECTSnameFROMStudentWHEREEXISTS(SELECT*FROMSC/*相关子查询相关子查询*/WHERESno=Student.SnoANDCno=1)SC.SnoSno SnameSsexSageSdept95001 李勇李勇 男男 20 CS95002 刘晨刘晨 女女 19 IS95003 王敏王敏 女女 18 MA95004 张立张立 男男 19 ISSC表表

26、Student表表 SnoCnoGrade9500119295001285950013889500229095002380Student.SnoSnameSsexSageSdeptSC.SnoCnoGrade95001李勇李勇男男20CS9500119295001李勇李勇男男20CS9500128595001李勇李勇男男20CS9500138895002刘晨刘晨女女19IS9500229095002刘晨刘晨女女19IS95002380带有带有EXISTS谓词的子查询谓词的子查询(续续)例例45查询没有选修查询没有选修1号课程的学生姓名。号课程的学生姓名。SELECTSnameFROMStude

27、ntWHERENOTEXISTS(SELECT*FROMSCWHERESno=Student.SnoANDCno=1)思考:此题用连接运算如何实现?思考:此题用连接运算如何实现?Sno SnameSsexSageSdept95001 李勇李勇 男男 20 CS95002 刘晨刘晨 女女 19 IS95003 王敏王敏 女女 18 MA95004 张立张立 男男 19 ISSC表表Student表表 SnoCnoGrade9500119295001285950013889500229095002380Student.SnoSnameSsexSageSdeptSC.SnoCnoGrade95001

28、李勇李勇男男20CS9500119295001李勇李勇男男20CS9500128595001李勇李勇男男20CS9500138895002刘晨刘晨女女19IS9500229095002刘晨刘晨女女19IS95002380Sno SnameSsexSageSdept95001 李勇李勇 男男 20 CS95002 刘晨刘晨 女女 19 IS95003 王敏王敏 女女 18 MA95004 张立张立 男男 19 ISSC表表Student表表 SnoCnoGrade9500119295001285950013889500229095002380Student.SnoSnameSsexSageSde

29、ptSC.SnoCnoGrade95001李勇李勇男男20CS9500119295001李勇李勇男男20CS9500128595001李勇李勇男男20CS9500138895002刘晨刘晨女女19IS9500229095002刘晨刘晨女女19IS9500238095003王敏王敏女女18MANULLNULLNULL95004张立张立男男19ISNULLNULLNULL带有带有EXISTS谓词的子查询谓词的子查询(续续)用用EXISTS/NOTEXISTS实现全称量词实现全称量词(难点难点)nSQL语言中没有全称量词语言中没有全称量词 (Forall)n可以把带有全称量词的谓词转换为等价的带有存

30、在可以把带有全称量词的谓词转换为等价的带有存在量词的谓词:量词的谓词:( x)P ( x( P)带有带有EXISTS谓词的子查询谓词的子查询(续续)用用EXISTS/NOTEXISTS实现逻辑蕴涵实现逻辑蕴涵(难点难点)SQL语言中没有蕴涵语言中没有蕴涵(Implication)逻辑运算逻辑运算可以利用谓词演算将逻辑蕴涵谓词等价转换为:可以利用谓词演算将逻辑蕴涵谓词等价转换为:pq p q51常见的视图形式常见的视图形式1.行列子集视图行列子集视图2.基于多个基表的视图基于多个基表的视图3.基于视图的视图基于视图的视图4.带表达式的视图带表达式的视图5.分组视图分组视图返回521.行列子集视图

31、行列子集视图例例1建立信息系学生的视图。建立信息系学生的视图。返回CREATEVIEWIS_StudentASSELECTSno,Sname,SageFROMStudentWHERESdept=IS从单个基本表导出从单个基本表导出保留了码保留了码只是去掉了基本表的某些行和某些列只是去掉了基本表的某些行和某些列531.行列子集视图(续)行列子集视图(续)例例:视图:视图GOOD_SC(修课成绩在平均成绩之上的元组修课成绩在平均成绩之上的元组)返回CREATEVIEWGOOD_SCASSELECTSno,Cno,GradeFROMSCWHEREGrade(SELECTAVG(Grade)FROMS

32、C)542.基于多个基表的视图基于多个基表的视图例例3建立信息系选修了建立信息系选修了1号课程的学生视图。号课程的学生视图。返回CREATEVIEWIS_S1(Sno,Sname,Grade)ASSELECTStudent.Sno,Sname,GradeFROMStudent,SCWHERESdept=ISANDStudent.Sno=SC.SnoANDSC.Cno=1553.基于视图的视图基于视图的视图例例4建立信息系选修了建立信息系选修了1号课程且成绩在号课程且成绩在90分以分以上的学生的视图。上的学生的视图。返回CREATEVIEWIS_S2ASSELECTSno,Sname,Grade

33、FROMIS_S1WHEREGrade=90564.带表达式的视图带表达式的视图例例5定义一个反映学生出生年份的视图。定义一个反映学生出生年份的视图。返回CREATEVIEWBT_S(Sno,Sname,Sbirth)ASSELECTSno,Sname,2011-SageFROMStudent设置一些派生属性列设置一些派生属性列,也称为虚拟列也称为虚拟列-Sbirth带表达式的视图必须明确定义组成视图的各个属性列名带表达式的视图必须明确定义组成视图的各个属性列名575.建立分组视图建立分组视图例例6将学生的学号及他的平均成绩定义为一个视图将学生的学号及他的平均成绩定义为一个视图CREATEVI

34、EWS_G(Sno,Gavg)ASSELECTSno,AVG(Grade)FROMSCGROUPBYSno58 注意:一类不易扩充的视图注意:一类不易扩充的视图n以以SELECT*方式创建的视图可扩充性差,应尽可能避免方式创建的视图可扩充性差,应尽可能避免例例7将将Student表中所有女生记录定义为一个视图表中所有女生记录定义为一个视图CREATEVIEWF_Student1(stdnum,name,sex,age,dept)ASSELECT*FROMStudentWHERESsex=女女缺点:修改基表缺点:修改基表Student的结构后,的结构后,Student表与表与F_Student1

35、视图的映象关系被破坏,导致该视图不能正视图的映象关系被破坏,导致该视图不能正确工作。确工作。59一类不易扩充的视图一类不易扩充的视图(续)(续)可改为可改为:CREATEVIEWF_Student2(stdnum,name,sex,age,dept)ASSELECTSno,Sname,Ssex,Sage,SdeptFROMStudentWHERESsex=女女为为 基基 表表 Student增增 加加 属属 性性 列列 不不 会会 破破 坏坏 Student表表 与与F_Student2视图的映象关系。视图的映象关系。60删除视图删除视图nDROPVIEW该语句删除指定的视图定义该语句删除指定

36、的视图定义由该视图导出的其他视图定义仍然存在,但已由该视图导出的其他视图定义仍然存在,但已不能使用,必须显式删除不能使用,必须显式删除删除基表时,由该基表导出的所有视图定义都删除基表时,由该基表导出的所有视图定义都必须显式删除必须显式删除返回例例9删除视图删除视图IS_S1DROPVIEWIS_S1613.6.2查询视图查询视图n从用户角度:查询视图与查询基本表相同从用户角度:查询视图与查询基本表相同nDBMS实现实现视图查询的方法视图查询的方法实体化视图(实体化视图(ViewMaterialization)R有效性检查:检查所查询的视图是否存在有效性检查:检查所查询的视图是否存在R执行视图定

37、义,将视图临时实体化,生成执行视图定义,将视图临时实体化,生成临时表临时表R查询视图转换为查询临时表查询视图转换为查询临时表R查询完毕删除被实体化的视图查询完毕删除被实体化的视图(临时表临时表)62查询视图(续)查询视图(续)视图消解法(视图消解法(ViewResolution)R进行有效性检查,检查查询的表、视图等是否存在。进行有效性检查,检查查询的表、视图等是否存在。如果存在,则从数据字典中取出视图的定义如果存在,则从数据字典中取出视图的定义R把视图定义中的子查询与用户的查询结合起来,转把视图定义中的子查询与用户的查询结合起来,转换成等价的对基本表的查询换成等价的对基本表的查询R执行执行修

38、正修正后的查询后的查询63查询视图(续)查询视图(续)例例1在信息系学生的视图中找出年龄小于在信息系学生的视图中找出年龄小于20岁的学生。岁的学生。SELECTSno,SageFROMIS_StudentWHERESage20RIS_Student视图的定义视图的定义(视图定义例视图定义例1):CREATEVIEWIS_StudentASSELECTSno,Sname,SageFROMStudentWHERESdept=IS64查询视图(续)查询视图(续)视图实体化法视图实体化法视图消解法视图消解法对对例例1,转换后的查询语句为:,转换后的查询语句为:SELECTSno,SageFROMStu

39、dentWHERESdept=ISANDSage=9068查询转换查询转换错误:错误:SELECTSno,AVG(Grade)FROMSCWHEREAVG(Grade)=90GROUPBYSno正确:正确:SELECTSno,AVG(Grade)FROMSCGROUPBYSnoHAVINGAVG(Grade)=90返回693.6.3更新视图更新视图n用户角度:更新视图与更新基本表相同用户角度:更新视图与更新基本表相同n更新视图最终要转换成对基本表的更新更新视图最终要转换成对基本表的更新n指定指定WITHCHECKOPTION子句后子句后DBMS在更新在更新视图时会进行检查,防止用户通过视图对视

40、图时会进行检查,防止用户通过视图对不属于视不属于视图范围内图范围内的基本表数据进行更新的基本表数据进行更新70更新视图(续)更新视图(续)例例1将信息系学生视图将信息系学生视图IS_Student中学号中学号95002的学的学生姓名改为生姓名改为“刘辰刘辰”。UPDATEIS_StudentSETSname=刘辰刘辰WHERESno=95002转换后的语句:转换后的语句:UPDATEStudentSETSname=刘辰刘辰WHERESno=95002ANDSdept=IS71更新视图(续)更新视图(续)例例2向信息系学生视图向信息系学生视图IS_S中插入一个新的学生记录:中插入一个新的学生记录

41、:95029,赵新,赵新,20岁岁INSERTINTOIS_StudentVALUES(95029,赵新赵新,20)转换为对基本表的更新:转换为对基本表的更新:INSERTINTOStudent(Sno,Sname,Sage,Sdept)VALUES(95029,赵新赵新,20,IS)72更新视图(续)更新视图(续)例例3删除视图删除视图CS_S中学号为中学号为95029的记录的记录DELETEFROMIS_StudentWHERESno=95029转换为对基本表的更新:转换为对基本表的更新:DELETEFROMStudentWHERESno=95029ANDSdept=IS73更新视图的限制

42、更新视图的限制n一些视图是不可更新的,因为对这些视图的更新不能一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新唯一地有意义地转换成对相应基本表的更新例:例:视图视图S_G为不可更新视图。为不可更新视图。CREATEVIEWS_G(Sno,Gavg)ASSELECTSno,AVG(Grade)FROMSCGROUPBYSno74更新视图(续)更新视图(续)n对于如下更新语句:对于如下更新语句:UPDATES_GSETGavg=90WHERESno=95001n无论实体化法还是消解法都无法将其转换成对基无论实体化法还是消解法都无法将其转换成对基本表本表SC的更新

43、的更新75实际系统对视图更新的限制实际系统对视图更新的限制n允许对行列子集视图进行更新允许对行列子集视图进行更新n对其他类型视图的更新,不同系统有不同限制对其他类型视图的更新,不同系统有不同限制返回763.6.4视图的作用视图的作用1.视图能够视图能够简化简化用户的操作用户的操作当视图中数据不是直接来自基本表时,通过定义当视图中数据不是直接来自基本表时,通过定义视图,使数据库看起来结构简单、清晰,并且可视图,使数据库看起来结构简单、清晰,并且可以简化用户的操作。以简化用户的操作。2.视图使用户能以视图使用户能以多种角度多种角度看待同一数据看待同一数据视图机制能使不同用户以不同方式看待同一数据,

44、视图机制能使不同用户以不同方式看待同一数据,适应数据库共享的需要适应数据库共享的需要773.6.4视图的作用视图的作用(续续)3.视图对重构数据库提供了一定程度的逻辑独立性视图对重构数据库提供了一定程度的逻辑独立性例:数据库逻辑结构发生改变,将学生关系例:数据库逻辑结构发生改变,将学生关系Student(Sno,Sname,Ssex,Sage,Sdept)“垂直垂直”地分成两个基本表:地分成两个基本表:SX(Sno,Sname,Sage)SY(Sno,Ssex,Sdept)78通过建立一个视图通过建立一个视图Student:CREATEVIEWStudent(Sno,Sname,Ssex,Sa

45、ge,Sdept)ASSELECTSX.Sno,SX.Sname,SY.Ssex,SX.Sage,SY.SdeptFROMSX,SYWHERESX.Sno=SY.Sno使用户的外模式保持不变,从而对原使用户的外模式保持不变,从而对原Student表的查询程序不表的查询程序不必修改必修改视图只能在视图只能在一定程度上一定程度上提供数据的逻辑独立性提供数据的逻辑独立性3.6.4视图的作用视图的作用(续续)793.6.4视图的作用视图的作用(续续)4.视图能够对机密数据提供安全保护视图能够对机密数据提供安全保护对不同用户定义不同视图,使每个用户只能看到对不同用户定义不同视图,使每个用户只能看到他有权

46、看到的数据他有权看到的数据通过通过WITHCHECKOPTION对关键数据定义操作对关键数据定义操作时间限制时间限制5.适当的利用视图可以更清晰的表达查询适当的利用视图可以更清晰的表达查询返回803.6.4视图的作用视图的作用(续续)createviewvmgradeAsSelectsno,max(grade)MgradeFromscGroupbysno返回Selectsc.sno,cnoFromsc,vmgradeWheresc.sno=vmgrade.snoandsc.grade=vmgrade.mgrade对每个同学找出他获得最高成绩的课程号。对每个同学找出他获得最高成绩的课程号。定义视图:求出每个同学获得的最高成绩。定义视图:求出每个同学获得的最高成绩。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号