视图

avatar
作者
猴君
阅读量:0

目录

前言

一、视图的概述

1、视图的定义

2、视图的优点

3、视图的分类

4、视图和表的区别

二、视图的基本操作

1、创建视图

2、修改视图

3、操作视图

4、删除视图


本文有参考自

前言

        数据库是由数据库设计员,根据用户的所有需求,按照数据库设计规范设计的,但根据数据库设计规范设计的数据库并不一定符合用户的应用需求。而 SQL SERVER根据不同用户的应用需求,重新定义了表的数据结果,这种结构就是视图。

        数据库中的视图是一个虚拟表。同真实的表一样,视图包含一系列带有名称的列和行数据,行和列数据用来自由定义视图和查询所引用的表,并且在引用视图时动态产生。

一、视图的概述

1、视图的定义

        视图是从一个或者多个表导出的,它的行为与表非常相似,但视图是一个虚拟表,在视图中可以使用SELECT语句查询数据,以及使用insert、update和delete语句修改记录,对于视图的操作最终转化为对基本数据表的操作。视图不仅可以方便操作,而且可以保障数据库系统的安全性。

        视图一经定义便存储在数据库中,与其相对应的数据并没有像表数据那样在数据库中在存储一份,通过视图看到的数据只是存放在基本表中的数据。可以对其进行增删该查,通过视图对数据修改,基本表数据也对应变化,反之亦然。

2、视图的优点

  • 简单化:为用户集中数据,用户看到的就是需要的,简化用户的数据查询和理解。用户需要数据时,不必输入复杂的查询语句,只需要针对此视图做简单的查询即可。那些经常使用的查询可以被定义为视图,从而使得用户不必为以后的每次操作指定全部的条件。
  • 安全化:对不同的用户定义不同的视图,使得用户只能看到与自己有关的数据,简化了用户权限的管理,增加了数据的安全性。
  • 共享化:重新定制数据,使得数据便于共享。
  • 逻辑数据独立性:视图可以帮助用户屏蔽真实表结构变化带来的影响。

3、视图的分类

        SQL  SERVER 中,视图可以分为 标准视图、索引视图 和分区视图。

  • 标准试图:标准视图组合了一个或多个表中的数据,可以获得使用视图的大多数好处,可以实现对数据库的查询、修改和删除等基本操作。
  • 索引视图:索引视图是被具体化了的视图,即它已经经过计算并存储。可以为视图创建索引,即对视图创建一个唯一的聚集索引。索引视图可以显著提高某些类型查询的性能,索引视图尤其适于聚合许多行的查询,但它们不太适于经常更新的基本数据集。
  • 分区视图:分区视图在一台多多台服务器间水平连接一组成员表的分区数据,这样,数据看上去如同来自一个表。连接本地同一个SQL Server实例中的成员表的视图是一个本地区分视图。

4、视图和表的区别

  1. 视图是已经编译好的SQL语句,是基于SQL语句的结果集的可视化表,而表不是;
  2. 视图(除过索引视图)没有实际的物理记录,而基本表有;
  3. 表示内容,视图是窗口;
  4. 表占物理空间,而视图不占物理空间,视图只是逻辑概念的存在;
  5. 视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全角度说,视图可以防止用户接触数据表,从而不知表结构;
  6. 表属于全局模式的表,是实表;视图数据局部模式的表,是虚表;
  7. 视图的建立和删除只影响视图本身,不影响对应的基本表。

二、视图的基本操作

1、创建视图

        SQL  SERVER 提供了 CREATE   VIEW 命令来创建视图。

--  语法格式

CREATE   VIEW   view_name

AS

        SELECT  column_name  FROM  table_name   ...     /*  定义视图的 SELECT语句  */

[ WITH   CHECK   OPTION ]

 

--  定义视图的 SELECT语句:可以使用多个表或其它视图。

--  WITH   CHECK   OPTION:可选项,表示在执行所有数据修改语句时,都必须符合由  定义视图的 SELECT语句  设置的准则。

--  示例:创建名为 s_c_sc 的视图,包括计算机专业的学生的学号、姓名,以及他们的选修课程号、课程名和成绩。

create   view   s_c_sc

as

        select   student.sno, sname, course.cno, cname, score

        from  student, sc, course

        where  student.specialty = '计算机' and student.sno = sc.sno and  sc.cno = course.cno

go

 

--  示例:创建名为 acc_count 的账户统计视图,求每个存户的账户个数,要求包括身份证号和姓名。

create  view   acc_count

as

        select  depositor.IDNO, Dname, count(*)  as  number

        from  depositor, account

        where  depositor.IDNO = account.IDNO

        group  by  depositor.IDNO, Dname

go

2、修改视图

        SQL  SERVER 中,使用 ALTER   VIEW 命令来修改视图。

--  语法格式

ALTER   VIEW   view_name

AS

        SELECT  column_name  FROM  table_name   ...     /*  定义视图的 SELECT语句  */

[ WITH   CHECK   OPTION ]

--  示例:修改视图 acc_count,求每个储户的账户个数和总存款余额,要求包括身份证和姓名。

alter  view   acc_count

as

        select  depositor.IDNO, Dname, count(*)  as  number, sum(balance)  as  sumbalance

        from  depositor, account

        where  depositor.IDNO = account.IDNO

        group  by  depositor.IDNO, Dname

go

 

--  示例:在视图上创建视图:创建 Few_Balance 余额统计视图,求总存款余额少于5000 的储户信息,包括身份证号码、姓名 和手机号。

create   view   Few_Balance

as

        select  depositor.IDNO, depositor.Dname, Telephone

        from  acc_count, depositor

        where  acc_count.IDNO = depositor.IDNO  and  SumBalance < 5000

go

        注:视图的本质就是一张表,只是虚拟表而言,也可以使用视图跟表进行关联,就像表与表之间的关联一样。

3、操作视图

        使用视图时,跟操作表一样,使用 SELECT、INSERT、UPDATE、DELETE 命令进行操作。

        查看视图

--  示例:在视图 s_c_sc中,统计 C++ 语言课程的总分和平均分。

select  sum(score)  总分, avg(score)  平均分

from   s_c_sc

where   cname = 'C++语言'

 

--  示例:在视图 acc_count 中,查看储户李华的统计信息。

select  *  from  acc_count

where   Dname = '李华'

        更新视图

--  示例:通过视图 male_view,向 student表中插入数据。

insert   into   view   male_view

values

( '201501005', '张三' , '男', '1997-8-1', '2015-9-6', '电子信息', '2015级' )

 

--  示例:如果希望用户不通过视图 male_vbu 插入女生信息,可以在创建视图时,使用 WITH   CHECK   OPTION 选项。

create  view  male_vbu

as

        select sno, sname, ssex, birthday, en_time, specialty, grade

        from   student  

        where   ssex = '男'

WITH   CHECK   OPTION

4、删除视图

        在 SQL SERVER 中,删除视图使用 DROP  VIEW 命令。

--  语法格式

DROP   VIEW   视图名称

--  示例:删除视图 s_c_sc。

drop   view   s_c_sc

go

若有不足之处,欢迎各位大佬斧正。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!