1 / 25

3.5 视 图

3.5 视 图. 视图是从一个或几个基本表(或视图)导出的表,它与基本表不同,是一个虚表。换句话说,数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。 3.5.1 定义视图 1. 建立视图 SQL 语言用 CREATE VIEW 命令建立视图,其一般格式为 :. CREATE VIEW < 视图名 >[< 列名 >[,< 列名 >]…)] AS < 子查询 > [WITH CHECK OPTION];

ludlow
Download Presentation

3.5 视 图

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 3.5 视 图 • 视图是从一个或几个基本表(或视图)导出的表,它与基本表不同,是一个虚表。换句话说,数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。 • 3.5.1 定义视图 • 1. 建立视图 • SQL 语言用 CREATE VIEW 命令建立视图,其一般格式为:

  2. CREATE VIEW <视图名 >[<列名>[,<列名>]…)] • AS < 子查询> • [WITH CHECK OPTION]; • 如果CREATE VIEW 语句仅指定了视图名,省略了组成视图的各个属性名,则隐含该视图由子查询中SELECT子句目标列中的诸字段组成。但在下列三种情况

  3. 下必须明确指定组成视图的所有列名: • 其中某个目标不是单纯的属性名,而是集函数或列表达式。 • 多表连接是选出了几个同名列作为视图的字段。 • 需要在视图中为某个列启用新的更合适的名字。

  4. 例1 建立信息系学生的视图。 • CREATE VIEW IS-STUDENT • AS • SELECT Sno,Sname,Sage • FROM Student • WHERE Sdept =‘IS’ ;

  5. DBMS 执行此语句时就相当建立如下虚表: • IS -STUDENT表 • Sno Sname Sage • 95002 刘 辰 19 • 95004 张 力 18

  6. 建立信息系学生的视图,进行操作时该视图只有信息系学生。 • CREAT VIEW IS -STUDENT • AS • SELECT Sno,Sname, Sage • FROM Student • WHERE Sdept=‘IS’ • WITH CHECK OPTION;

  7. 建立选修了一号课程 的学生视图 • CREAT E VIEW IS-S1(Sno,Sname,Grade) • AS • SELECT Student.Sno,Sname, Grade • FROM Student, SC • WHERE Sdept=‘IS’ AND SC.Cno=‘1’ • AND Student.Sno= SC.Sno

  8. 建立选修了一号课程成绩在90分以上的学生视图建立选修了一号课程成绩在90分以上的学生视图 • CREATE VIEW IS-S2 • AS • SELECT Sno, Sname, Grade • FROM IS-S1 • WHERE Grade>=90

  9. 定义一个反映学生出生年份的视图。 • CREATE VIEW BT-S (Sno,Sname,Sbirth) • AS • SELECT Sno,Sname,1996-Sage • FROM Student;

  10. 例将学生的学号极其平均成绩定义为一个视图 • CREATE VIEW S-G(Sno,Gavg) • AS SELECT Sno, AVG(Grade) • FROM SC • GROUP BY Sno;

  11. 将表中所有女生定义为一个视图 • CREAT VIEW F- Student • (Stdnum, Name ,Sex, Age, Dept) • AS • SELECT * • FROM Student • WHERE Ssex=‘女’;

  12. 2 删除视图:使用 DROP VIEW格式 • DROP VIEW <视图名>; • 例 删除视图IS-S1 • DROP VIEW IS-S1;

  13. 小结 • 视图的类型: • 1基本表上的视图{单表视图,多表视图} • 2 视图上的视图{单视图上的视图,多视图上的视图} • 3基本表与视图上的视图{普通视图,带表达式的视图,分组视图}

  14. 3.5.2 查询视图 • 例 在信息系学生的视图中找出年龄小于20的学生。 • SELECT Sno,Sage • FROM IS-STUDENT • WHERE Sage〈 20; • SELECT Sno,Sname,Sage • FROM Student • WHERE Sdept=‘IS’;

  15. 转换为 • SELECT Sno, Sage • FROM Student • WHERE Sdept=‘IS’ AND Sage‹ 20 ;

  16. 例 查询信息系选修了一号课的学生 • SELECT Sno,Sname • FROM IS-STUDENT,SC • WHERE IS -STUDENT.Sno=SC。Sno • AND SC.Cno=‘1’;

  17. 3.5.3 视图更新 • 更新视图包括: • 插入(INSERT), 删除(DELETE)和修改 • (UPDATE) • 例 将信息系学生视图中学号为95002的学生改为“刘辰”. • UPDATE IS_ STUDENT • SET Sname =‘刘辰’ • WHERE Sno =‘95002’;

  18. 转换语句 • UPDATE Student • SET Sname =‘刘辰’ • WHERE Sno =‘95002 AND Sdept=‘IS’

  19. 向信息系学生视图中插入一个新的学生记录.其中学号为95029,姓名为赵新,年龄为20岁。 • INSERT • INTO IS -STUDENT • VALUES(‘95029’, ‘赵新’,20); • DBMS将其转换为对表的基本更新:

  20. INSERT • INTO Student(Sno,Sname,Sage, • Sdept) • VALUES(‘95029’,‘赵新’,‘20’,‘IS’ ) • 例 删除计算机系学生视图CS-S中学号为95029的学生记录

  21. DELETE • FROM IS-STUDENT • WHERE Sno=‘95029’ • DBMS将其换为对基本表的更新 • DELETE • FROM Student • WHERE Sno=‘95029’AND • Sdept=‘IS’;

  22. 关系数据库 遵守如下规定: • 1 若视图是由两个以上的基本表导出的,则不允许更新。 • 2 若视图的字段来自字段表达式或常数,则不允许执行INSERT和UPDATE ,但允许执行DELETE。 • 3 若视图的字段来自集函数,则不允许更新。 • 4 若视图中含有GROUP BY 子句,不允许更新。

  23. 5 若视图中含有DISTINCT短语,不允许更新。 • 6 若视图中含有嵌套查询,并且内层查寻的子句 FROM 涉及的是该视图的基本表,则不允许更新。 • 7一个不允许更新的视图上定义的视图, 也不允许更新。

  24. 将成绩在平均成绩之上的元组定义成一个视图GOOD-SC。 • CREATE VIEW GOOD-SC • AS • SELECT Sno, Cno, Grade • FROM SC • WHERE Grade> • (SELECT AVG (Grade) • FROM SC ) ;

  25. 3.5.4视图的用途 • 1 视图能够简化用户的操作 • 2 视图能够以多种角度看问题 • 3 视图对重构数据库提供了一定程度的逻辑独立性 • 4 视图能够对机密数据提供安全保护

More Related