第3章 关系数据库标准语言SQL (1).ppt
文本预览下载声明
查询视图(续) [例10] 查询选修了1号课程的信息系学生 SELECT IS_Student.Sno,Sname FROM IS_Student,SC WHERE IS_Student.Sno =SC.Sno AND SC.Cno= 1; 查询视图(续) 视图消解法的局限 有些情况下,视图消解法不能生成正确查询。 查询视图(续) [例11]在S_G视图中查询平均成绩在90分以上的学生学号和平均成绩 SELECT * FROM S_G WHERE Gavg=90; S_G视图的子查询定义: CREATE VIEW S_G (Sno,Gavg) AS SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno; 查询转换 错误: SELECT Sno,AVG(Grade) FROM SC WHERE AVG(Grade)=90 GROUP BY Sno; 正确: SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno HAVING AVG(Grade)=90; 更新视图(续) [例12] 将信息系学生视图IS_Student中学号200215122的学生姓名改为“刘辰”。 UPDATE IS_Student SET Sname= 刘辰 WHERE Sno= 200215122 ; 转换后的语句: UPDATE Student SET Sname= 刘辰 WHERE Sno= 200215122 AND Sdept= IS; 更新视图(续) [例13] 向信息系学生视图IS_S中插入一个新的学生记录:200215129,赵新,20岁 INSERT INTO IS_Student VALUES(‘95029’,‘赵新’,20); 转换为对基本表的更新: INSERT INTO Student(Sno,Sname,Sage,Sdept) VALUES(‘200215129 ,赵新,20,IS ); 更新视图(续) [例14]删除信息系学生视图IS_Student中学号为200215129的记录 DELETE FROM IS_Student WHERE Sno= 200215129 ; 转换为对基本表的更新: DELETE FROM Student WHERE Sno= 200215129 AND Sdept= IS; 更新视图(续) 更新视图的限制:一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新 例:视图S_G为不可更新视图。 UPDATE S_G SET Gavg=90 WHERE Sno= ‘200215121’; 这个对视图的更新无法转换成对基本表SC的更新 更新视图(续) 允许对行列子集视图进行更新 对其他类型视图的更新不同系统有不同限制 3.6.4 视图的作用 1. 视图能够简化用户的操作 2. 视图使用户能以多种角度看待同一数据 3. 视图对重构数据库提供了一定程度的逻辑独立性 4. 视图能够对机密数据提供安全保护 5. 适当的利用视图可以更清晰的表达查询 3.用SQL语句建立第二章习题5中的四个表: 供应商关系:S(SNO,SNAME,STATUS,CITY) 零件关系:P(PNO,PNAME,COLOR,WEIGHT) 工程项目关系:J(JNO,JNAME,CITY) 供应情况关系:SPJ(SNO,PNO,JNO,QTY) 定义的关系S有四个属性,分别是供应商号(SNO)、供应商名(SNAME)、状态(STATUS)和所在城市(CITY),属性的类型都是字符型,长度分别是4、20、10和20个字符。主键是供应商编号SNO。在SQL中允许属性值为空值,当规定某一属性值不能为空值时,就要在定义该属性时写上保留字“NOT NULL”。本例中,规定供应商号和供应商名不能取空值。由于已规定供应商号为主码,所以对属性SNO的定义中的“NOT NULL”可以省略不写。 CREATE TABLE S (SNO CHAR(4) NOT NULL, SNAME CHAR(20) NOT NULL, STATUS CHAR(10), CITY CHAR(20), PRIMA
显示全部