SQL Server 视图

一、视图的概念

视图是一个虚表;数据库中只存放视图的定义;视图对应的数据仍存放在原来的表中;随着表中数据的变化,视图的数据随之改变。

对视图的查询与基本表一样;对视图的更新将受到一定的限制。

 

二、视图分类

1.行列子集视图:从单个基本表导出,保留基本表的码,但去掉其它的某些列和部分行的视图。

2.表达式视图:带虚拟列的视图。

3.分组视图:子查询目标表带有组函数或子查询带有GROUP BY子句的视图。

 

三、定义与修改视图

    建立视图,其一般格式为:

    CREATE VIEW <视图名>[(<列名>[,<列名>]...)] AS <子查询>[WITH CHECK OPTION]

 

    其中子查询可以是任意复杂的SELECT语句但通常不允许含有ORDER BY子句和DISTINCT短语。

    WITH CHECK OPTION表示对视图进行UPDATEINSERTDELETE操作时要保证更新、插入或删除的行满足视图定义中的谓词条件即子查询中的条件表达式

    如果CREATE VIEW语句仅指定了视图名,省略了组成视图的各个属性列名,则隐含该视图由子查询中SELECT子句目标列中的诸字段组成。

 

    在下列三种情况下必须明确指定组成视图的所有列名:

    其中某个目标列不是单纯的属性名,而是集函数或列表达式;

    多表连接时选出了几个同名列作为视图的字段;

    需要在视图中为某个列启用新的更合适的名字; 

     需要说明的是,组成视图的属性列名必须依照上面的原则,或者全部省略或者全部指定,没有第三种选择。

 

    例: 建立电商系学生的视图 --- 行列子集视图

    create view ec_student 

    as select sno , sname , age from student where dept = 'ec';

 

    例: 建立电商学生的视图,并要求进行修改和插入操作时仍须保证该视图只有电商系的学生

    create view ec_student as select snosname, age from student where sdept='ec' with check option

    insert into ec_student (sno,sname,age,dept) values ('2001','Rain Man', 20 , 'ec')

    insert into ec_student (sno,sname,age,dept) values ('2001','Rain Man', 20 , '会计') /* 插入失败*/

 

    视图不仅可以建立在单个基本表上也可以建立在多个基本表上或者已定义好的视图。         

    例:建立电商系选修了号课程的学生的视图

    create view ec_s1(xh,xm,cj)

    as

    select student.sno,sname,score from student,sc

    where dept='ec' and student.sno=sc.sno and sc.cno='001'

 

    带表达式的视图:

    :定义一个反映学生出生年份的视图

    CREATE VIEW BT_S(sno,sname,csnf)

    as

    select sno,sname,2005-age from student

 

    分组视图:带有集函数和GROUP BY子句的查询

    :  将学生的学号及他的平均成绩定义为一个视图

    CREATE VIEW S_G(sno,avgscore)

    AS

    SELECT sno, AVG(score)  FROM sc  GROUP BY sno

 

三、删除视图

    DROP VIEW <视图名>

    一个视图被删除后,由此视图导出的其他视图也将失效,用户应该使用DROP VIEW语句将他们一一删除。

四、关于更新的限制

     并非所有的视图都可更新,有些视图的更新不能唯一地有意义地转换成对相应基本表的更新。

    1、若视图是由两个以上基本表导出的,则此视图不允许更新。

    2、若视图的字段来自字段表达式或常数,则不允许对此视图执行INSERTUPDATE操作,但允许执行DELETE操作。

    3、若视图的字段来自集函数,则此视图不允许更新。

    4、若视图定义中含有GROUP BY子句,则此视图不允许更新。

    5、若视图定义中含有DISTINCT短语,则此视图不允许更新。

五、视图的作用

    1、视图能够简化用户的操作

    2、视图使用户能以多种角度看待同一数据

    3、视图对重构数据库提供了一定程度的逻辑独立性

    4、视图能够对机密数据提供安全保护

 

 

 

 

 

原文地址:https://www.cnblogs.com/rainman/p/1443218.html