1、SQL Server 2005 数据库程序设计语言,第7章 视图 本章重点:标准视图,教学目标 掌握视图的概念 掌握视图的优点 掌握使用CREATE VIEW语句定义视图 掌握使用ALTER VIEW语句修改视图定义 掌握使用Drop VIEW语句删除视图 掌握使用视图修改数据,第7章 视图,了解视图 定义视图 通过视图修改数据,视图是从一个或多个表(或视图)导出的表,提供了将预定义的查询存储成数据库中的对象以备将来使用的能力 在视图中被查询的表称为基表 一般情况下,可以将任何 SELECT 语句命名和存储为视图 视图是虚拟数据表 注:区分视图和表,了解视图,了解视图,了解视图,视图的常见实例
2、 一个基表的行或列的子集 两个或多个表的合并 两个或多个表的联接 一个基表的统计摘要 另一个视图或视图和基表组合的子集,视图的种类,标准视图 标准视图将来自一个或多个基表的数据合并到一个新的虚拟表中 索引视图 通过在视图上创建唯一的聚集索引具体化视图 分区视图 分区视图将来自一个或多个服务器上的一个或多个基表的已分区数据进行横向联接,视图的优点,使用视图将会带来许多好处,它可以帮助用户建立更加安全的数据库,管理使用者可操作的数据,简化查询过程,使用视图的优点突出体现在以下几个方面: 关注用户数据 隐藏复杂性 使查询更加灵活 简化权限的管理 提高性能 重新组织数据,练习,-使用下表中的信息分别用
3、SQL脚本、管理工具创建显示来自特定供货商的产品的视图,第7章 视图,了解视图 定义视图 通过视图修改数据,创建视图,使用视图设计器创建视图 使用 CREATE VIEW 语句:,CREATE VIEW schema_name. view_name (column , ,n ) WITH AS select_statement ; WITH CHECK OPTION ,:=ENCRYPTION | /* 说明创建视图是加密SCHEMABINDING | /* 说明视图与其所依赖的表或视图结构相关联,n ,创建视图,Create View语句加上了 WITH SCHEMABINDING 参数,可
4、以限制此视图所用到的数据表或视图,都不允许用Alter更改设计,或用drop将其删除 加上了WITH SCHEMABINDING 参数后, select_statement中不可以使用*代表所有字段,必须把字段名称写出,同时使用到的数据表或视图名称,必须用两部分schema_name.object来表示,创建视图,create view sales_view as SELECT SalesTaxRateID,StateProvinceID,TaxRate FROM Sales.SalesTaxRate,示例,创建视图,创建视图,使用 SELECT 语句指定视图的内容 必须在语句中指定列名的情况
5、得自于算术表达式、内建函数或常量的视图列在联接中使用相同名字的基表列 指定列名的方法在 SELECT 语句中使用列别名在 CREATE VIEW 语句中指定,create view sales_view as SELECT SalesTaxRateID,StateProvinceID,TaxRate*1.2 as newTaxRate FROM Sales.SalesTaxRate,示例,创建视图,创建视图,视图定义的限制 CREATE VIEW 语句不能包括 COMPUTE 或 COMPUTE BY 子句,也不能包括 INTO 关键字 仅当使用 TOP 关键字的时候,CREATE VIEW
6、语句才能包括 ORDER BY 子句 视图不能引用临时表 在单一批处理中,CREATE VIEW 语句不能和其他 Transact-SQL 语句组合使用,创建视图以提供一个方便地从两个或多个联接表中查看信息的方法,创建视图的最佳实践,更改视图,语法: ALTER VIEW . . view_name ( column ,.n ) WITH ,.n AS select_statement WITH CHECK OPTION := ENCRYPTION | SCHEMABINDING,注意:更改视图时,用新的 定义语句替代原来的定义语 句,包括选项的设置。,重命名视图,重命名视图:从数据库中删除视
7、图的定义和所有分配给它的权限 语法:sp_rename oldname,newname,删除视图,删除视图:从数据库中删除视图的定义 语法:DROP VIEW 视图名 ,.n,SQL Server Management Studio,有关视图的信息的来源,Transact-SQL,有关视图的信息的来源,第7章 视图,了解视图 定义视图 通过视图修改数据,视图维护的并不是数据的副本,它显示的是一条查询在一个或多个基表上的结果集。所以,对视图数据的修改实际上是对基表的修改 一般来说,为了能通过视图修改数据,视图必须定义在单个表上,在 SELECT 语句中不能包括聚合函数或 GROUP BY 子句,
8、通过视图修改数据,明确地说,通过视图进行的修改 不能影响超过一个的底层的表。可以修改从两个或更多表得到的视图,但是每次更新或修改只能影响一个表 若修改影响了在视图中未引用的列,也有可能引起错误。例如往视图中插入行的时候 若视图定义中指定了 WITH CHECK OPTION 选项,则修改被校验,以符合 SELECT 语句中指明的标准,通过视图修改数据,示例: -创建一个视图create view castate (au_id, au_lname, au_fname, phone, address, city, state, contract) as select au_id, au_lname
9、, au_fname, phone, address, city, state, contract from authors where state = ca WITH CHECK OPTION ,通过视图修改数据,比较插入语句,insert into castate values (234-34-4512, John, Smith, 415 548-7723, 18 Broadway Av., San Jose, ca,1),insert into castate values (123-34-4512, John, Smith, 415 548-7723, 18 Broadway Av.,
10、 Gory, IN,1),通过视图修改数据,本例中所创建的视图引用了多个表 create view au_title (author_au_id, au_lname, au_fname, contract, title_au_id, title_id, au_ord , royaltyper) as select a.au_id, a.au_lname, a.au_fname, a.contract, t.au_id, t.title_id, t.au_ord , t.royaltyper from authors a, titleauthor t where a.au_id = t.au_i
11、d,通过视图修改数据,若向视图au_title 中插入一行数据只能分别执行以下语句 insert into au_title (author_au_id, au_lname, au_fname, contract) values (234-34-4611,John,Smith, 1) insert into au_title (title_au_id, title_id, au_ord, royaltyper) values (234-34-4611,BU1111,1,50),通过视图修改数据,-在pubs数据库完成以下操作 -1、建立视图titles_view,其中包括titles表中的ti
12、tle, type, price, pubdate -2、建立视图ALL_authors,其中包括authors表中的au_fname,au_lname,address,city,zip -3、将第3题中的视图定义,使只有state为“WA”的作者信息 -4、将第3题目中的视图重命名WA_authors -5、删除视图WA_authors,练习,-6、查找pubs数据库中的视图定义信息 -7、建立视图titles_view1,其中包括titles表中的所有列,并要求隐藏视图的定义(提示用encryption选项),然后再查看该视图的定义信息 -8、建立视图wa_publishers,其中包括publishers表中state为“WA”的出版商的信息。建立视图后并试图插入下列记录(with check option的使用) insert into wa_publishers(pub_id,pub_name,city,state,country) values (9994,L,Atlanda,GI,USA),练习,