SQL Server数据库 第八章 视图及其应用
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CREATE VIEW [ < database_name > .]
[ < owner > .] view_name [ ( column [ ,...n ] ) ] [ WITH < view_attribute > [ ,...n ] ] AS
select_statement
[ WITH CHECK OPTION ] < view_attribute > ::= { ENCRYPTION | SCHEMABINDING | VIEW_METADATA }
8.2 视图的操作 8.2.1 创建视图 1. 使用企业管理器创建视图
图8-1
选择新建视图选项对话框
图8-2 (a) 新建视图对话框
图8-2(b) 添加表菜单
图8-3 添加表对话框
图8-4 选择视图字段对话框
图8-5 视图属性对话框
2. 利用CREATE VIEW命令创建视图 利用CREATE VIEW命令创建视图 语法形式如下: 语法形式如下:
8.2.4 使用视图
1. 通过视图查询数据信息
例8 - 3 select 学号,课程号 学号, from cs_kc 例8 - 4 select * from xs_kc_avg where score_avg>=80
2.通过视图修改数据 2.通过视图修改数据
使用视图修改数据时,需要注意以下几点: 使用视图修改数据时,需要注意以下几点:
(3)删除数据记录 (3)删除数据记录 Delete from cs_xs Where
性别= 男 性别=‘男’
使用视图删除记录, 使用视图删除记录,可以删除任何基表中的 记录,直接利用DELETE语句删除记录即可。 DELETE语句删除记录即可 记录,直接利用DELETE语句删除记录即可。但应 该注意,必须指定在视图中定义过的字段来删除 该注意, 记录。 记录。
(1) 插入数据记录 通过视图向基表插入数据记录 insert into cs_xs values(‘1115 1115’, 计算机’,1,….) values( 1115 ,’ 计算机’,1, .) 查询基本表: 查询基本表: select * from xs (2) 更新数据记录 update cs_xs 总学分=总学分+8 set 总学分=总学分+8 使用视图可以更新数据记录, 使用视图可以更新数据记录,但应该注 意的是,更新的只是数据库中的基表 基表。 意的是,更新的只是数据库中的基表。
8.2.2 重命名视图
1. 利用企业管理器重命名视图 2. 可以使用系统存储过程 可以使用系统存储过程sp_rename修改视图的名称, 修改视图的名称, 修改视图的名称 该过程的语法形式如下: 语法形式如下 该过程的语法形式如下: sp_rename old_name,new_name 重命名为v_part,其程序清单如下: 例:把视图v_all重命名为 把视图 重命名为 ,其程序清单如下: sp_rename v_all,v_part
Leabharlann Baidu
课堂练习: 课堂练习: 创建计算机专业学生的平均成绩视图 cs_kc_avg,,包括学号( cs_kc_avg,,包括学号(在视图中列名为 num)和平均成绩 和平均成绩( num)和平均成绩(在视图中列名为 score_avg)。 score_avg)。
代码如下: 代码如下: Create view cs_kc_avg(num,score_avg) as 学号,avg(成绩) ,avg(成绩 select 学号,avg(成绩) from cs_kc group by 学号
第八章 视图及其应用
讲解提纲: 讲解提纲: 8.1 视图综述 8.2 视图的操作 8.3 视图定义信息查询
本章要点
理解视图的基本概念、作用 理解视图的基本概念、 掌握视图的创建、修改、 掌握视图的创建、修改、删除和使用 方法
8.1
视图综述
8.1.1 视图的基本概念
视图是一种数据库对象,常用于集中、 简化和定制显示数据信息。 视图是从一个或者多个表(或视图)中导出 的表,其结构和数据是建立在对表的查询基础 上的。和真实的表一样,视图也包括几个被定 义的数据列和多个数据行,但从本质上讲,这 些数据列和数据行来源于其所引用的表。因此, 视图不是真实存在的基础表而是一个虚拟表, 视图所对应的数据并不实际地以视图结构存储 在数据库中,而是存储在视图所引用的表中。
8.1.2 视图的作用
视图是在基表的基础上,通过查询语句生成的, 视图是在基表的基础上,通过查询语句生成的, 定义后可查询、修改、删除和更新。 定义后可查询、修改、删除和更新。 可以使视图集中数据、 ①可以使视图集中数据、简化和定制不同用户对数 据库的不同数据要求,只包含需要的数据。 据库的不同数据要求,只包含需要的数据。 使用视图可以屏蔽数据的复杂性, ②使用视图可以屏蔽数据的复杂性,用户不必了解 数据库的结构,就可以方便地使用和管理数据, 数据库的结构,就可以方便地使用和管理数据, 简化数据权限管理和重新组织数据以便输出到其 他应用程序中。 他应用程序中。 ③视图可以使用户只关心他感兴趣的某些特定数据 和他们所负责的特定任务, 和他们所负责的特定任务,而那些不需要的或者 无用的数据则不在视图中显示。 无用的数据则不在视图中显示。
8.2.3 修改视图
1. 利用企业管理器修改视图。 利用企业管理器修改视图。 2. 使用 使用ALTER VIEW语句修改视图 。 语句修改视图 ALTER VIEW view_name [(column[,...n])] [WITH ENCRYPTION] AS select_statement [ WITH CHECK OPTION ]
使用Transact-SQL语句中的CREATE 使用Transact-SQL语句中的CREATE Transact 语句中的 VIEW创建视图的参数说明如下 创建视图的参数说明如下: VIEW创建视图的参数说明如下:
view_name用于指定视图的名称,column用于指定 view_name用于指定视图的名称,column用于指定 用于指定视图的名称 视图中的字段名称。 视图中的字段名称。 ENCRYPTION表示 WITH ENCRYPTION表示 SQL Server 加密包含 语句文本在内的系统表列。 CREATE VIEW 语句文本在内的系统表列。 select_statement用于创建视图的SELECT语句, select_statement用于创建视图的SELECT语句,利 用于创建视图的SELECT语句 用SELECT命令可以从表中或者视图中选择列构成新 SELECT命令可以从表中或者视图中选择列构成新 视图的列。 视图的列。 OPTION用于强制视图上执行的所有数 WITH CHECK OPTION用于强制视图上执行的所有数 据修改语句都必须符合由 select_statement 设置 的准则。 的准则。
• 例8 - 1
分析以下代码: 分析以下代码: use xscj go create view cs_xs as select * from xs 专业名= 计算机 计算机’ where 专业名=‘计算机’ go
例8 - 2
创建cs_kc视图,包括计算机专业各学生的学号、其选修 创建cs_kc视图,包括计算机专业各学生的学号、 cs_kc视图 的课程号及成绩。 的课程号及成绩。 Create view cs_kc with encryption /*指出视图的属性 存储Create view语句时 指出视图的属性, /*指出视图的属性,存储Create view语句时 进行加密* 进行加密*/ as xs.学号 课程号, 学号, select xs.学号,课程号,成绩 from xs,xs_kc xs.学号=xs_kc.学号 学号=xs_kc. 专业名= 计算机 计算机’ where xs.学号=xs_kc.学号 and 专业名=‘计算机’ with check option /*指出在视图上的修改都要符合select指出的条件 指出在视图上的修改都要符合select指出的条件。 /*指出在视图上的修改都要符合select指出的条件。 如此例中只能修改除专业名为‘计算机’以外的值。 如此例中只能修改除专业名为‘计算机’以外的值。 以保证仍可通过cs_kc视图查询到修改后的数据。 cs_kc视图查询到修改后的数据 以保证仍可通过cs_kc视图查询到修改后的数据。*/
创建视图时应该注意以下情况: 创建视图时应该注意以下情况:
①只能在当前数据库中创建视图。 只能在当前数据库中创建视图。 ②如果视图引用的基表或者视图被删除,则该视图不能再被 如果视图引用的基表或者视图被删除, 使用,直到创建新的基表或者视图。 使用,直到创建新的基表或者视图。 ③如果视图中某一列是函数、数学表达式、常量或者来自多 如果视图中某一列是函数、数学表达式、 个表的列名相同,则必须为列定义名称。 个表的列名相同,则必须为列定义名称。 ④不能在视图上创建索引,不能在规则、缺省、触发器的定 不能在视图上创建索引,不能在规则、缺省、 义中引用视图。 义中引用视图。 Server要检查以确保语句中 ⑤当通过视图查询数据时,SQL Server要检查以确保语句中 当通过视图查询数据时, 涉及的所有数据库对象存在,而且数据修改语句不能违反 涉及的所有数据库对象存在, 数据完整性规则。 数据完整性规则。 ⑥视图的名称必须遵循标识符的规则,且对每个用户必须是 视图的名称必须遵循标识符的规则, 唯一的。此外, 唯一的。此外,该名称不得与该用户拥有的任何表的名称 相同。 相同。
④视图可以简化复杂查询的结构,方便用 视图可以简化复杂查询的结构, 户对数据的操作。 户对数据的操作。 ⑤视图可以让不同的用户以不同的方式看 到不同或者相同的数据集。 到不同或者相同的数据集。 ⑥在某些情况下,由于表中数据量太大, 在某些情况下,由于表中数据量太大, 因此在表的设计时常将表进行水平或者 垂直分割, 垂直分割,但表的结构的变化对应用程 序产生不良的影响。 序产生不良的影响。 ⑦视图提供了一个简单而有效的安全机制。 视图提供了一个简单而有效的安全机制。
修改视图中的数据时,不能同时修改两个或者多个基表, →修改视图中的数据时,不能同时修改两个或者多个基表, 可以对基于两个或多个基表或者视图的视图进行修改, 可以对基于两个或多个基表或者视图的视图进行修改,但 是每次修改都只能影响一个基表。 是每次修改都只能影响一个基表。 →不能修改那些通过计算得到的字段。 不能修改那些通过计算得到的字段。 OPTION选项 选项, →如果在创建视图时指定了WITH CHECK OPTION选项,那 如果在创建视图时指定了WITH 么所有使用视图修改数据库信息时, 么所有使用视图修改数据库信息时,必须保证修改后的数 据满足视图定义的范围。 据满足视图定义的范围。 →执行UPDATE、DELETE命令时,所删除与更新的数据必须 执行UPDATE、DELETE命令时, UPDATE 命令时 包含在视图的结果集中。 包含在视图的结果集中。 →如果视图引用多个表时,无法用DELETE命令删除数据。 如果视图引用多个表时,无法用DELETE命令删除数据。 DELETE命令删除数据
SCHEMABINDING表示在select_statement语句中如果 SCHEMABINDING表示在select_statement语句中如果 表示在select_statement 包含表、视图或者引用用户自定义函数,则表名、视 包含表、视图或者引用用户自定义函数,则表名、 图名或者函数名前必须有所有者前缀。 图名或者函数名前必须有所有者前缀。 METADATA表示如果某一查询中引用该视图且 VIEW_ METADATA表示如果某一查询中引用该视图且 要求返回浏览模式的元数据时,那么SQL Server将 要求返回浏览模式的元数据时,那么SQL Server将 向DBLIB和OLE DB APIS返回视图的元数据信息。 DBLIB和 APIS返回视图的元数据信息。 返回视图的元数据信息
[ < owner > .] view_name [ ( column [ ,...n ] ) ] [ WITH < view_attribute > [ ,...n ] ] AS
select_statement
[ WITH CHECK OPTION ] < view_attribute > ::= { ENCRYPTION | SCHEMABINDING | VIEW_METADATA }
8.2 视图的操作 8.2.1 创建视图 1. 使用企业管理器创建视图
图8-1
选择新建视图选项对话框
图8-2 (a) 新建视图对话框
图8-2(b) 添加表菜单
图8-3 添加表对话框
图8-4 选择视图字段对话框
图8-5 视图属性对话框
2. 利用CREATE VIEW命令创建视图 利用CREATE VIEW命令创建视图 语法形式如下: 语法形式如下:
8.2.4 使用视图
1. 通过视图查询数据信息
例8 - 3 select 学号,课程号 学号, from cs_kc 例8 - 4 select * from xs_kc_avg where score_avg>=80
2.通过视图修改数据 2.通过视图修改数据
使用视图修改数据时,需要注意以下几点: 使用视图修改数据时,需要注意以下几点:
(3)删除数据记录 (3)删除数据记录 Delete from cs_xs Where
性别= 男 性别=‘男’
使用视图删除记录, 使用视图删除记录,可以删除任何基表中的 记录,直接利用DELETE语句删除记录即可。 DELETE语句删除记录即可 记录,直接利用DELETE语句删除记录即可。但应 该注意,必须指定在视图中定义过的字段来删除 该注意, 记录。 记录。
(1) 插入数据记录 通过视图向基表插入数据记录 insert into cs_xs values(‘1115 1115’, 计算机’,1,….) values( 1115 ,’ 计算机’,1, .) 查询基本表: 查询基本表: select * from xs (2) 更新数据记录 update cs_xs 总学分=总学分+8 set 总学分=总学分+8 使用视图可以更新数据记录, 使用视图可以更新数据记录,但应该注 意的是,更新的只是数据库中的基表 基表。 意的是,更新的只是数据库中的基表。
8.2.2 重命名视图
1. 利用企业管理器重命名视图 2. 可以使用系统存储过程 可以使用系统存储过程sp_rename修改视图的名称, 修改视图的名称, 修改视图的名称 该过程的语法形式如下: 语法形式如下 该过程的语法形式如下: sp_rename old_name,new_name 重命名为v_part,其程序清单如下: 例:把视图v_all重命名为 把视图 重命名为 ,其程序清单如下: sp_rename v_all,v_part
Leabharlann Baidu
课堂练习: 课堂练习: 创建计算机专业学生的平均成绩视图 cs_kc_avg,,包括学号( cs_kc_avg,,包括学号(在视图中列名为 num)和平均成绩 和平均成绩( num)和平均成绩(在视图中列名为 score_avg)。 score_avg)。
代码如下: 代码如下: Create view cs_kc_avg(num,score_avg) as 学号,avg(成绩) ,avg(成绩 select 学号,avg(成绩) from cs_kc group by 学号
第八章 视图及其应用
讲解提纲: 讲解提纲: 8.1 视图综述 8.2 视图的操作 8.3 视图定义信息查询
本章要点
理解视图的基本概念、作用 理解视图的基本概念、 掌握视图的创建、修改、 掌握视图的创建、修改、删除和使用 方法
8.1
视图综述
8.1.1 视图的基本概念
视图是一种数据库对象,常用于集中、 简化和定制显示数据信息。 视图是从一个或者多个表(或视图)中导出 的表,其结构和数据是建立在对表的查询基础 上的。和真实的表一样,视图也包括几个被定 义的数据列和多个数据行,但从本质上讲,这 些数据列和数据行来源于其所引用的表。因此, 视图不是真实存在的基础表而是一个虚拟表, 视图所对应的数据并不实际地以视图结构存储 在数据库中,而是存储在视图所引用的表中。
8.1.2 视图的作用
视图是在基表的基础上,通过查询语句生成的, 视图是在基表的基础上,通过查询语句生成的, 定义后可查询、修改、删除和更新。 定义后可查询、修改、删除和更新。 可以使视图集中数据、 ①可以使视图集中数据、简化和定制不同用户对数 据库的不同数据要求,只包含需要的数据。 据库的不同数据要求,只包含需要的数据。 使用视图可以屏蔽数据的复杂性, ②使用视图可以屏蔽数据的复杂性,用户不必了解 数据库的结构,就可以方便地使用和管理数据, 数据库的结构,就可以方便地使用和管理数据, 简化数据权限管理和重新组织数据以便输出到其 他应用程序中。 他应用程序中。 ③视图可以使用户只关心他感兴趣的某些特定数据 和他们所负责的特定任务, 和他们所负责的特定任务,而那些不需要的或者 无用的数据则不在视图中显示。 无用的数据则不在视图中显示。
8.2.3 修改视图
1. 利用企业管理器修改视图。 利用企业管理器修改视图。 2. 使用 使用ALTER VIEW语句修改视图 。 语句修改视图 ALTER VIEW view_name [(column[,...n])] [WITH ENCRYPTION] AS select_statement [ WITH CHECK OPTION ]
使用Transact-SQL语句中的CREATE 使用Transact-SQL语句中的CREATE Transact 语句中的 VIEW创建视图的参数说明如下 创建视图的参数说明如下: VIEW创建视图的参数说明如下:
view_name用于指定视图的名称,column用于指定 view_name用于指定视图的名称,column用于指定 用于指定视图的名称 视图中的字段名称。 视图中的字段名称。 ENCRYPTION表示 WITH ENCRYPTION表示 SQL Server 加密包含 语句文本在内的系统表列。 CREATE VIEW 语句文本在内的系统表列。 select_statement用于创建视图的SELECT语句, select_statement用于创建视图的SELECT语句,利 用于创建视图的SELECT语句 用SELECT命令可以从表中或者视图中选择列构成新 SELECT命令可以从表中或者视图中选择列构成新 视图的列。 视图的列。 OPTION用于强制视图上执行的所有数 WITH CHECK OPTION用于强制视图上执行的所有数 据修改语句都必须符合由 select_statement 设置 的准则。 的准则。
• 例8 - 1
分析以下代码: 分析以下代码: use xscj go create view cs_xs as select * from xs 专业名= 计算机 计算机’ where 专业名=‘计算机’ go
例8 - 2
创建cs_kc视图,包括计算机专业各学生的学号、其选修 创建cs_kc视图,包括计算机专业各学生的学号、 cs_kc视图 的课程号及成绩。 的课程号及成绩。 Create view cs_kc with encryption /*指出视图的属性 存储Create view语句时 指出视图的属性, /*指出视图的属性,存储Create view语句时 进行加密* 进行加密*/ as xs.学号 课程号, 学号, select xs.学号,课程号,成绩 from xs,xs_kc xs.学号=xs_kc.学号 学号=xs_kc. 专业名= 计算机 计算机’ where xs.学号=xs_kc.学号 and 专业名=‘计算机’ with check option /*指出在视图上的修改都要符合select指出的条件 指出在视图上的修改都要符合select指出的条件。 /*指出在视图上的修改都要符合select指出的条件。 如此例中只能修改除专业名为‘计算机’以外的值。 如此例中只能修改除专业名为‘计算机’以外的值。 以保证仍可通过cs_kc视图查询到修改后的数据。 cs_kc视图查询到修改后的数据 以保证仍可通过cs_kc视图查询到修改后的数据。*/
创建视图时应该注意以下情况: 创建视图时应该注意以下情况:
①只能在当前数据库中创建视图。 只能在当前数据库中创建视图。 ②如果视图引用的基表或者视图被删除,则该视图不能再被 如果视图引用的基表或者视图被删除, 使用,直到创建新的基表或者视图。 使用,直到创建新的基表或者视图。 ③如果视图中某一列是函数、数学表达式、常量或者来自多 如果视图中某一列是函数、数学表达式、 个表的列名相同,则必须为列定义名称。 个表的列名相同,则必须为列定义名称。 ④不能在视图上创建索引,不能在规则、缺省、触发器的定 不能在视图上创建索引,不能在规则、缺省、 义中引用视图。 义中引用视图。 Server要检查以确保语句中 ⑤当通过视图查询数据时,SQL Server要检查以确保语句中 当通过视图查询数据时, 涉及的所有数据库对象存在,而且数据修改语句不能违反 涉及的所有数据库对象存在, 数据完整性规则。 数据完整性规则。 ⑥视图的名称必须遵循标识符的规则,且对每个用户必须是 视图的名称必须遵循标识符的规则, 唯一的。此外, 唯一的。此外,该名称不得与该用户拥有的任何表的名称 相同。 相同。
④视图可以简化复杂查询的结构,方便用 视图可以简化复杂查询的结构, 户对数据的操作。 户对数据的操作。 ⑤视图可以让不同的用户以不同的方式看 到不同或者相同的数据集。 到不同或者相同的数据集。 ⑥在某些情况下,由于表中数据量太大, 在某些情况下,由于表中数据量太大, 因此在表的设计时常将表进行水平或者 垂直分割, 垂直分割,但表的结构的变化对应用程 序产生不良的影响。 序产生不良的影响。 ⑦视图提供了一个简单而有效的安全机制。 视图提供了一个简单而有效的安全机制。
修改视图中的数据时,不能同时修改两个或者多个基表, →修改视图中的数据时,不能同时修改两个或者多个基表, 可以对基于两个或多个基表或者视图的视图进行修改, 可以对基于两个或多个基表或者视图的视图进行修改,但 是每次修改都只能影响一个基表。 是每次修改都只能影响一个基表。 →不能修改那些通过计算得到的字段。 不能修改那些通过计算得到的字段。 OPTION选项 选项, →如果在创建视图时指定了WITH CHECK OPTION选项,那 如果在创建视图时指定了WITH 么所有使用视图修改数据库信息时, 么所有使用视图修改数据库信息时,必须保证修改后的数 据满足视图定义的范围。 据满足视图定义的范围。 →执行UPDATE、DELETE命令时,所删除与更新的数据必须 执行UPDATE、DELETE命令时, UPDATE 命令时 包含在视图的结果集中。 包含在视图的结果集中。 →如果视图引用多个表时,无法用DELETE命令删除数据。 如果视图引用多个表时,无法用DELETE命令删除数据。 DELETE命令删除数据
SCHEMABINDING表示在select_statement语句中如果 SCHEMABINDING表示在select_statement语句中如果 表示在select_statement 包含表、视图或者引用用户自定义函数,则表名、视 包含表、视图或者引用用户自定义函数,则表名、 图名或者函数名前必须有所有者前缀。 图名或者函数名前必须有所有者前缀。 METADATA表示如果某一查询中引用该视图且 VIEW_ METADATA表示如果某一查询中引用该视图且 要求返回浏览模式的元数据时,那么SQL Server将 要求返回浏览模式的元数据时,那么SQL Server将 向DBLIB和OLE DB APIS返回视图的元数据信息。 DBLIB和 APIS返回视图的元数据信息。 返回视图的元数据信息