SQL Server视图

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SQL Server视图

关键词:视图,视图定义,视图使用

引言

视图是由基于一个或多个表或其他视图上的一个查询所定义的

虚拟表,视图仅仅保存该查询的具体定义,而不包含任何数据。视图也是一个表,有表名,表中包含若干列,各个列有列名。

视图与create table语句所建立的表具有本质的区别,create table语句所建立的表和表中的数据是实实在在存储在磁盘上的,通常称为基本表。视图仅仅是一些sql查询语句的集合,不需要像基本表那样在数据库中占据物理空间。视图提供了一种访问基本表数据的方法,可以按照不同的要求从数据表中提取数据。

数据库用户访问视图时,数据库系统会自动执行该视图中包含的查询语句,同时返回查询结果。

一、定义视图

创建视图时需要注意以下几点:

只能在当前数据库中创建视图,且视图名称必须惟一,不可以和基本表同名。

不能将规则和默认值绑定在视图上。

定义视图的查询语句不能使用order by 子句和distinct短语,如果需要排序,则在视图定义后,对视图查询时再进行排序。

创建视图的sql语句为create view语句,其基本语法格式为:

create view []

as

说明:

1.指定视图的名称。

2.指定在视图中包含的列名,可以省略。如果省略,则视图的列名与select子句中的列名相同。有两种情况视图列名不可以省略:视图由多个表连接得到,在不同的表中存在同名列,则需指定列名;当视图的列名为表达式或库函数的计算结果时,而不是单纯的属性名时,则需指明列名。

例1 创建计算机系读者的视图,视图名为st1。

create view st1

as

select *from readerdetail where readerdep=’计算机系’

说明:

视图创建后,只在数据字典中存放视图的定义,而其中的子查询select语句并不执行。只有当用户对视图进行操作时,才按照视图的定义执行相应的select语句。

二、视图的使用

1.查询视图

视图创建后,可以像基本表一样对视图进行查询。在查询时,需要检查视图定义中涉及的表和视图在数据库中是否存在,如果存

在,再把视图中定义的子查询和对视图的查询结合起来,转换为基本表的查询。

例2查询计算机系中年龄大于30岁的读者信息。

select *fromst1wherereaderage>30

2.更新视图

在数据库中创建了一个视图后,可以通过视图查询数据,在满足某些条件下,可以通过视图插入、修改和更新数据。通过视图更新数据时,改变的是基本表中的数据。有的视图的更新不能惟一地有意义地转换为相应基本表的更新,这些视图就不可以更新。以下几类视图不可以更新:

由两个以上基本表创建的视图,这样的视图不可以更新。

在定义视图的select子句中是用表达式、统计函数和distinct 关键字的视图,这样的视图不可以更新。

在视图创建中使用了groupby子句和having子句的视图,这样的视图不可以更新。

在创建视图的语句中使用了子查询的视图,这样的视图不可以更新。

在一个不允许更新的视图上定义的视图,这样的视图不可以更新。

视图的列中没有包括源表中列值定义为not null的所有列,这样的视图不可以进行插入操作,一般可以进行删除和修改操作。

2.1通过视图插入数据

例3向st1视图中添加一行读者记录,读者编号为002003,读者姓名为张昆,读者性别为男,读者年龄为26岁,读者所在部门为计算机系。

insert into st1

values(’002003’,’张昆’,’m’,26,’计算机系’)

数据库管理系统在执行此语句时,首先从数据字典中找到的st1定义,然后把此定义和插入操作结合起来,转换成等价的对基本表readerdetail的插入。相当于执行以下操作:

insert into readerdetail

values(’002003’,’张昆’,’m’,26,’计算机系’)

2.2通过视图修改数据

例4将st1视图中王明的年龄改为35岁。

updatest1setreaderage=35where readername=’王明’

转换成对基本表的修改操作为:updatereaderdetailsetreaderage =35

wherereadername=’王明’and readerdep=’计算机系’

2.3通过视图删除数据

例5删除计算机系读者视图st1中的张昆读者的信息。deletefromst1wherereadername=’张昆’

转换成对基本表的删除操作为:

deletefrom readerdetail

wherereadername=’张昆’ and readerdep=’计算机系’

3.视图的删除

如果有的视图不再需要使用,可以将该视图删除。删除视图的操作对创建该视图的基本表和其他视图没有任何影响。如果被删除的视图是其他视图或select语句的数据源,则其他视图或select语句将一律失效。

删除视图的sql语句的格式为:

drop view

例6删除st1视图。

drop view st1

三、视图的作用

1.简化用户操作。将多表连接查询定义为视图后,多张表中的数据放在一起,可以像一张表一样操作。用户可以通过视图操作这些数据,不需要重复写复杂的查询语句,简化了用户的操作。

2.用户可以多角度看待同一数据库。在同一个物理数据库上,可以跟据用户的需要定义不同的视图,用户看见的是不同的数据集。视图机制可以为不同用户提供各自所需的数据。

3.数据的安全性。在数据库系统中,不同类型的用户在数据库中的访问权限不同。根据用户的权限,对不同的用户定义不同的视图,用户只能操作自己权限范围内的视图。通过这种方式限制用户对数

相关文档
最新文档