第三章:关系数据库标准语言S0L 视图
第三章:关系数据库标准语言SQL 视 图
1、视图 从一个或几个基本表(或视图)导出的表。 数据库只存放视图的定义,不存储视图所对应的数据,数据存放在基本表中。 对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。 视图一经定义后,可以像表一样被查询、修改、删除和更新。 2、视图的优点 ①为用户集中数据,简化用户的数据查询和处理; ②屏蔽数据库的复杂性 ③简化用户权限的管理; ④便于数据共享; ⑤可以重新组织数据以便输出到其他应用程序中。 只有在当前数据库中才能创建视图,视图不能与表同名
1、视图 • 从一个或几个基本表(或视图)导出的表。 • 数据库只存放视图的定义,不存储视图所对应的数据,数据存放在基本表中。 • 对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。 • 视图一经定义后,可以像表一样被查询、修改、删除和更新。 2、视图的优点 ① 为用户集中数据,简化用户的数据查询和处理; ② 屏蔽数据库的复杂性; ③ 简化用户权限的管理; ④ 便于数据共享; ⑤ 可以重新组织数据以便输出到其他应用程序中。 只有在当前数据库中才能创建视图,视图不能与表同名
3、创建视图 全部省略或全 部指定 CREATE VIEW I schema name. I view name [(column[.nD)I [WITH <view attribute>[ .n1 /*指出视图的属性* AS select statement /*指定视图创建的语句* [ WITH CHECK OPTION[ I /*指出视图上所做的修改符合限制条件* 在下列情况下必须指定组成视图的所有列名 ①视图中的列是从算术表达式、函数或常量派生的; ②两个或更多的列可能会具有相同的名称(通常是由于联接的原 因) ③视图中的某个列的指定名称不同于其派生来源列的名称
3、创建视图 在下列情况下必须指定组成视图的所有列名: ① 视图中的列是从算术表达式、函数或常量派生的; ② 两个或更多的列可能会具有相同的名称(通常是由于联接的原 因); ③ 视图中的某个列的指定名称不同于其派生来源列的名称。 CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ] [ WITH <view_attribute> [ ,...n ] ] /*指出视图的属性*/ AS select_statement /*指定视图创建的语句*/ [ WITH CHECK OPTION ] [ ; ] /*指出视图上所做的修改符合限制条件*/ 全部省略或全 部指定
EG:创建计算机专业学生的视图CSXS,并保证对该视图的修改都符合“专业为计算机” 这一条件。 CREATE VIEW CS XS AS SELECT XSB.* FROM XSB WHERE XSB. Majors计算机 WITH CHECK OPTION EG:创建CSKC视图,包括计算机专业各学生的学号、其选修的课程号以及成绩。要 保证对该视图的修改都符合“专业为计算机”这一条件。 CREATE VIEW CS KC AS SELECT XSB. Stu ID CJB. C ID cJB grade FROM XSB CJB WHERE XSB. Stu ID= CJB.Stu ID AND XSB. Major=计算机 WITH CHECK OPTION
EG:创建计算机专业学生的视图CS_XS,并保证对该视图的修改都符合“专业为计算机” 这一条件。 CREATE VIEW CS_XS AS SELECT XSB.* FROM XSB WHERE XSB.Major='计算机' WITH CHECK OPTION; EG:创建CS_KC视图,包括计算机专业各学生的学号、其选修的课程号以及成绩。要 保证对该视图的修改都符合“专业为计算机”这一条件。 CREATE VIEW CS_KC AS SELECT XSB.Stu_ID,CJB.C_ID,CJB.Grade FROM XSB,CJB WHERE XSB.Stu_ID=CJB.Stu_ID AND XSB.Major='计算机' WITH CHECK OPTION;
EG:创建计算机专业学生的平均成绩视图 CS KC AVG,包括学号和 平均成绩。 CREATE VIEW CS KC AVG(Stu ID, Grade avg) AS SELECT CJB. Stu ID,AVG(CJB Grade) FROM CJB GROUP BY CJB. Stu id CREATE VIEW CS KC AVG CREATE VIEW CS KC AVG AS AS SELECT CJB. Stu ID, AVG(CJB Grade)As SELECT CJB. Stu ID, AVG(CJB Grade) ade avg FROM CJB FROM CJB GROUP BY CJB. Stu ID GROUP BY CJB. Stu id
EG:创建计算机专业学生的平均成绩视图CS_KC_AVG,包括学号和 平均成绩。 CREATE VIEW CS_KC_AVG(Stu_ID,Grade_avg) AS SELECT CJB.Stu_ID,AVG(CJB.Grade) FROM CJB GROUP BY CJB.Stu_ID; CREATE 比较: VIEW CS_KC_AVG AS SELECT CJB.Stu_ID,AVG(CJB.Grade) FROM CJB GROUP BY CJB.Stu_ID; CREATE VIEW CS_KC_AVG AS SELECT CJB.Stu_ID,AVG(CJB.Grade) AS Grade_avg FROM CJB GROUP BY CJB.Stu_ID;