数据库视图

合集下载

数据库视图和索引的创建及使用

数据库视图和索引的创建及使用

数据库视图和索引的创建及使用数据库是一个用于存储和管理数据的系统,它可以通过视图和索引来提高查询和访问数据的效率。

1.视图的创建和使用:视图是一个虚拟表,它是由一个或多个实际表的子集组成的。

可以将视图看作是从一个或多个表中选择出的行和列的集合。

创建视图可以简化复杂的查询操作,隐藏表的结构,方便用户对数据进行访问。

创建视图的语法如下:```CREATE VIEW view_name ASSELECT columnsFROM tablesWHERE conditions;```其中,view_name是视图的名称,columns是需要选择的列,tables 是需要选择列的表,conditions是筛选条件。

使用视图可以像使用实际表一样进行查询操作,例如:```SELECT*FROM view_name;```视图还支持更新操作,可以对视图进行插入、更新、删除等操作,数据库会将对视图的更新映射到实际的表上。

2.索引的创建和使用:索引是对数据库表中一列或多列的值进行排序的一种结构,它可以提高查询速度,加快数据的检索。

索引可以看作是一个目录,它包含有关表中数据的信息,使得数据库在执行查询时可以更快地找到需要的数据。

创建索引的语法如下:```CREATE INDEX index_nameON table_name (column1, column2, ...);```其中,index_name是索引的名称,table_name是需要创建索引的表名,column1、column2等是需要创建索引的列名。

使用索引可以加快查询速度,例如:```SELECT*FROM table_nameWHERE column_name = value;```如果没有索引,数据库会遍历整个表来找到与条件匹配的行,如果有索引,数据库可以利用索引的结构来快速定位符合条件的行。

需要注意的是,索引并不适合所有的列和表,创建索引会占用额外的磁盘空间,并且在插入、更新和删除操作时需要维护索引的结构,会影响到数据的修改速度。

数据库视图的创建与应用技巧

数据库视图的创建与应用技巧

数据库视图的创建与应用技巧数据库是现代信息系统中不可或缺的组成部分,而视图是数据库中一个重要的概念和工具。

视图是一个虚拟的表,它是基于查询的结果集,可以将多个表中的数据按照特定的逻辑组织起来。

本文将介绍数据库视图的创建与应用技巧,帮助读者更好地理解和应用视图。

一、数据库视图的创建1. 了解视图的定义:视图是一个虚拟的表,它是基于查询的结果集。

视图可以理解为是对多个表的抽象和封装,通过对数据库中的表进行关联和筛选,得到一个逻辑上的数据集,方便用户进行查询和统计分析。

2. 确定视图的目的:在创建数据库视图之前,需要明确视图的目的和使用场景。

是为了简化复杂查询语句、隐藏敏感数据、提供数据访问的安全性,还是为了减少数据冗余,不同的目的可能涉及到不同的表和字段。

3. 编写视图的查询语句:视图的创建需要编写查询语句,查询语句是基于数据库中的表进行关联和筛选得到的。

可以使用数据库的查询语言,如SQL语句,写出满足需求的查询语句。

在编写查询语句时,需要考虑数据的完整性和一致性,避免出现逻辑错误。

4. 创建视图:在数据库管理系统中,可以使用CREATE VIEW语句来创建视图。

CREATE VIEW语句的基本语法是:CREATE VIEW 视图名 AS 查询语句;其中,视图名是指定的视图名称,查询语句是用来创建视图的查询语句。

二、数据库视图的应用技巧1. 简化复杂查询语句:视图可以简化复杂的查询语句,将多个表的关联和筛选抽象成一个视图,从而减少了查询语句的复杂性。

例如,如果我们需要从多个表中查询某个特定属性的数据时,可以将这些表进行关联和筛选得到一个视图,然后在实际查询中直接使用该视图。

2. 提高数据访问安全性:视图可以对数据进行过滤和权限控制,提高了数据访问的安全性。

例如,我们可以创建一个视图,将敏感数据屏蔽起来,并设置只有特定用户才能访问该视图。

通过视图控制数据的可见性,可以有效地保护数据的安全性。

3. 减少数据冗余:视图可以减少数据冗余,实现数据的逻辑集成和管理。

数据库中的视图

数据库中的视图

数据库中的视图视图的⼀些好处:1、视图能够简化⽤户的操作;2、视图使⽤户能以多钟⾓度看待同⼀数据;3、视图对重构数据库提供了⼀定程度的逻辑独⽴性;4、视图能够对机密数据提供安全保护;5、适当的利⽤视图可以更清晰的表达查询;总结:⾼效,美观,安全Oracle对象教程:视图(View)创建使⽤,视图(View)实际上是⼀张或者多张表上的预定义查询,这些表称为基表。

从视图中查询信息与从表中查询信息的⽅法完全相同。

只需要简单的SELECT…FROM即可。

语法结构:创建视图CREATE [OR REPLACE] [{FORCE|NOFORCE}] VIEW view_nameASSELECT查询[WITH READ ONLY CONSTRAINT]语法解析:1. OR REPLACE:如果视图已经存在,则替换旧视图。

2. FORCE:即使基表不存在,也可以创建该视图,但是该视图不能正常使⽤,当基表创建成功后,视图才能正常使⽤。

3. NOFORCE:如果基表不存在,⽆法创建视图,该项是默认选项。

4. WITH READ ONLY:默认可以通过视图对基表执⾏增删改操作,但是有很多在基表上的限制(⽐如:基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执⾏insert操作),WITH READ ONLY说明视图是只读视图,不能通过该视图进⾏增删改操作。

现实开发中,基本上不通过视图对表中的数据进⾏增删改操作。

删除视图可以使⽤“DROP VIEW 视图名称”,删除视图不会影响基表的数据。

执⾏视图:select * from viewname;navicat下执⾏视图的范例:视图名称为:1027amkmsql脚本为:select A.KMID from KW_KM A LEFT JOIN KW_CC B on A.KM_CCID=IDWHERE _KSSJ IN(SELECT CC_KSSJ from kw_cc WHERE CC_KSSJ between to_date('2018/10/27 00:00:00','yyyy-mm-dd hh24:mi:ss')and to_date('2018/10/27 12:00:00','yyyy-mm-dd hh24:mi:ss'))sql语句执⾏视图:SELECT * from "1027amkm";执⾏结果:视图名称为:iswjsql脚本为:SELECTcount(*) total,a.KSKM_ISWJ,(CASE a.KSKM_ISWJWHEN 1 THEN '违纪'ELSE '未违纪'END)是否违纪from QY_KD bLEFT JOIN KW_KSKM a on a.KSKM_KDID=b.KDID LEFT JOIN QY_XQ c on b.kd_xqid=c.xqid WHERE a.KSKM_KMID in(SELECT * from "1027amkm") GROUP BY a.KSKM_ISWJsql语句执⾏视图:SELECT * from "iswj";执⾏结果:【注】视图可以单独使⽤,也可以向表⼀样关联使⽤。

数据库视图原理

数据库视图原理

数据库视图原理
数据库视图是数据库中的一种虚拟表,它是基于数据库表的查询结果集的可视化展示。

视图不存储任何数据,而只是存储了查询语句。

它提供了一种简化和抽象化表格数据的方式,使用户可以方便地访问和操作数据,同时隐藏了底层表的复杂性。

视图的创建是通过查询语句来定义的,该查询语句可以包含一个或多个表,还可以进行过滤、连接、计算和聚合等操作。

用户可以根据自己的需求创建不同的视图,以满足不同的查询和分析需求。

视图的原理是通过在查询时实时执行定义视图时的查询语句,将结果返回给用户。

当用户查询视图时,实际上是执行了视图定义的查询语句,而不是直接查询底层的表。

这种方式可以避免用户直接对底层表进行操作,保证了数据的安全性和完整性。

视图对用户来说是透明的,用户可以像查询表一样对视图进行查询和操作,而不需要了解底层表的细节。

视图还可以提供额外的数据约束,限制用户对数据的访问和操作。

视图的使用可以提供更高的数据抽象和封装,简化了数据库的使用和管理。

它可以隐藏表的具体结构和关系,提供更简洁、直观的数据展示和操作界面。

同时,视图还可以简化复杂的查询操作,提高查询性能和灵活性。

总之,数据库视图是一种基于查询语句的虚拟表,通过实时执行查询语句来提供数据的可视化展示和操作。

它可以简化数据
库的使用和管理,提高数据的安全性和完整性。

视图对用户来说是透明的,提供了更高的数据抽象和封装。

数据库视图总结

数据库视图总结

数据库视图总结数据库视图是数据库中的一种虚拟表,它是由数据库中的一个或多个实际表中的数据衍生而来的。

在数据库中,视图并不实际存储数据,而只是对数据的逻辑上的展示。

数据库视图有以下几个特点:1. 数据安全性:通过视图,可以达到控制用户访问数据库中特定数据的目的。

通过权限设置,可以确定用户对视图的访问权限,从而提高数据的安全性。

2. 数据抽象:视图将复杂的数据模型抽象成简洁的视图模型,可以使用户从底层的具体实现细节中解脱出来,只关注视图的数据模型。

3. 简化数据访问:视图可以为用户提供一种简化的数据访问方式。

用户可以只通过视图来访问数据,而不需要关心具体数据存储在哪个表中,以及如何进行关联查询等复杂操作。

4. 逻辑独立性:通过视图,可以在不改变底层数据结构的情况下进行逻辑修改。

视图可以对底层表进行数据过滤、数据转换、数据聚合等操作,并将操作后的结果呈现给用户。

5. 提高查询效率:视图可以对底层表进行数据预处理,将复杂的查询操作转化为简单的查询操作。

对于经常使用的查询,通过视图可以提高查询效率。

6. 逻辑数据独立性:通过视图,可以隐藏底层数据库的变化,使上层应用程序与底层数据库解耦。

当数据库的数据结构发生变化时,只需要对视图进行修改,而不需要修改上层应用程序。

7. 数据一致性:通过视图,可以实现数据的一致性。

视图可以将数据分割为多个逻辑部分,在这些部分之间可以进行数据交互和数据一致性保障。

总的来说,数据库视图在数据库中扮演着重要的角色,它不仅可以提高数据的安全性和访问效率,还可以简化数据访问和修改操作,提高应用程序的可维护性和扩展性。

视图既可以作为数据管理工具,也可以作为数据库设计工具,帮助开发人员在不改变底层数据库的情况下进行逻辑修改和扩展。

然而,数据库视图也存在一些限制和缺点。

首先,视图的性能可能会受到限制,尤其是当视图的定义非常复杂时。

其次,由于视图是虚拟表,不存储实际数据,所以对视图的修改操作可能会比对实际表的操作更复杂。

视图的概念与优点

视图的概念与优点

视图的概念与优点视图(view)是数据库中一个虚拟的表,由表中的数据经过某种筛选条件生成。

视图根据用户的需求,将数据库中的一部分数据提取出来,并按照一定的规则进行组织和展示。

视图一般可以看作是数据库中的一个查询结果集,可以对视图进行读取操作,但对视图的更新操作则可能会受到限制。

视图的优点主要有以下几个方面:1. 数据安全性:视图可以将数据库中敏感的数据进行过滤,仅向用户提供所需的数据,屏蔽了用户对底层数据库表的访问,保护了数据的安全性。

用户只能通过视图进行数据查询和操作,而不能直接访问底层表,提高了数据的安全性。

2. 数据逻辑独立性:数据库中的数据经常会发生变化,包括表的结构变化和数据内容的变化,如果应用程序直接依赖于底层表的结构,一旦表的结构发生变化,应用程序也需要进行相应的修改。

通过使用视图,应用程序可以仅仅依赖于视图,而不依赖于底层表,当底层表的结构发生变化时,只需要修改视图的定义,而不需要修改应用程序,提高了应用程序的逻辑独立性。

3. 数据抽象:视图可以通过将多个底层表进行连接和关联,提供一个抽象的数据视图给用户。

用户无需了解和关心底层表的具体细节,只需要使用视图中已经组织好的数据。

这样可以简化用户的操作,提高数据的可用性和易用性。

4. 数据一致性:通过视图可以将多个底层表的数据进行组织和展示,可以避免数据的冗余和不一致。

在底层表发生数据更新操作时,视图的数据也会相应地进行更新,保持数据的一致性。

5. 简化查询:在数据库中,经常需要进行复杂的关联查询操作,当数据量庞大时,这样的操作可能会导致性能问题。

通过使用视图,可以将这些复杂的查询操作预先定义好,并将结果保存为一个视图,用户只需要对视图进行简单的查询操作,而不需要关注如何进行关联和筛选,简化了用户的操作,提高了查询的效率。

6. 简化权限控制:通过视图可以对底层表进行权限控制。

可以通过视图赋予不同的用户或用户组不同的查询权限,保证了数据的安全性。

数据库视图的解释

数据库视图的解释
数据库视图
1.什么是视图
视图是⼀个虚拟的表,它不在数据库中以存储数据的
形式保存,是在使⽤视图的时候动态⽣成。

2.视图的特点
2.1视图是由基本表产⽣的虚表
2.2视图的更新和删除会影响基础表
2.3基础表的更新和删除也会影响到视图
3.视图的作⽤
对视图的操作与对基本表的操作都是⼀样的(包括alter,create,insert into ,update ,delete ,select),且⼆者任意⼀⽅的字段值被修改,都会实时影响到对⽅(如修改view的字段值,会同步修改table相应的字段值);
但是视图的创建是基于基本表的,它的作⽤可以对基本表的敏感信息进⾏保护;
在实际⼯作中,出于安全考虑,将⽤户常⽤的信息创建成视图给⽤户调⽤,避免了直接操作基本表!
4. 显⽰⽬前有哪些视图
show tables;创建的视图都在表的最下⾯。

create view A as (select id,name from dcs); //将查询结果集创建为视图A
show CREATE VIEW A(视图名)//创建给定视图
Show tables //查看视图
drop view 视图名; //删除视图。

数据库视图介绍

什么是视图:视图(view):从一个或几个基本表中根据用户需要而做成一个虚表1:视图是虚表,它在存储时只存储视图的定义,而没有存储对应的数据2:视图只在刚刚打开的一瞬间,通过定义从基表中搜集数据,并展现给用户视图与查询的区别:视图和查询都是用由sql语句组成,这是他们相同的地方,但是视图和查询有着本质区别:它们的区别在于:1:存储上的区别:视图存储为数据库设计的一部分,而查询则不是.2:更新限制的要求不一样要注意:因为视图来自于表,所以通过视图可以间接对表进行更新,我们也可以通过update语句对表进行更新,但是对视图和查询更新限制是不同的,以下我们会知道虽然通过视图可以间接更新表但是有很多限制.3:排序结果:通过sql语句,可以对一个表进行排序,而视图则不行。

比如:创建一个含有order by子句的视图,看一下可以成功吗?视图的优点:为什么有了表还要引入视图呢?这是因为视图具有以下几个优点:1:能分割数据,简化观点。

可以通过select和where来定义视图,从而可以分割数据基表中某些对于用户不关心的数据,使用户把注意力集中到所关心的数据列.进一步简化浏览数据工作2:为数据提供一定的逻辑独立性。

如果为某一个基表定义一个视图,即使以后基本表的内容的发生改变了也不会影响“视图定义”所得到的数据3:提供自动的安全保护功能。

视图能像基本表一样授予或撤消访问许可权4:视图可以间接对表进行更新,因此视图的更新就是表的更新视图的创建和管理视图的创建1:通过sql语句格式:create view 视图名 as select 语句试一试:分别创建关于一个表或多个表的视图[因为视图可以来自于多表] 2:通过企业管理器说明:1:在完成视图的创立之后,就可以像使用基本表一样来使用视图2:在创建视图时,并非所有的select子查询都可用,如:compute和compute by,order by[除非与top一起连用]3:但在查询时,依然都可以用在创建时禁用的select子查询4:在视图创建时,必须为没有标题列指定标题[思考:能否不用select语句来创建一个视图]视图的删除:1:通过sql语句:drop view 视图名2:通过企业管理器说明:与删除表不同的是,删除视图后只是删除了视图了定义,并没有删除表中的数据.[查看相关性]修改视图的定义1:通过企业管理器2:通过sql语句:格式:alter view 视图名 as 新的select语句浏览视图信息 sp_helptext 视图名 [查看视图创建的语句]如何通过视图修改基本表的数据.A:在视图上使用insert语句通过视图插入数据与直接在表中插入数据一样,但视图毕竟不是基本表.因此在进行数据插入时还是有一定的限制1:如果视图上没有包括基本表中属性为not null[不能为空]的列,那么插入操作会因为那些列是null值而失败.2:如果某些列因为某些规则或约束的限制而不能直接接受从视图插入的列时,插入会失败3:如果在视图中包含了使用统计函数的结果,或是包含计算列,则插入操作会失败4:不能在使用了distinct语句的视图中插入值5:不能在使用了group by语句的视图中插入值B:使用update更新视图中的数据1:更新视图与更新表格一样,但是在视图中使用了多个基本表连接的情况下,每次更新操作只能更新来自基本表的一个数据列例如:创建以下视图:create view del asselect 职工号,姓名,部门名称,负责人 from work1,部门where work1.部门编号=部门.部门编号如果再执行下面的语句时:update del set 职工号='001',部门名称='wenda'where 职工号='01'[出现错误]只能够改成:update del set 职工号='001' where 职工号='01'update del set 部门名称='wenda' where 职工号='01'2:不能在使用了distinct语句的视图中更新值3:不能在使用了group by语句的视图中更新值C:使用delete删除视图中数据.通过视图删除数据最终体现为从基本表中删除数据格式:delete 视图名 [where 条件]说明:当视图由两个以上的基表构成时,不允许删除视图的数据例如:建一个视图kkcreate view kk asselect 职工号,姓名,性别,部门名称 from work1,部门 where work1.部门编号=部门.部门编号 [试着去删除]使用with check option的视图如果不了解视图定义内容,则常常会发生向视图中输入不符合视图定义的数据的情况.比如:create view xm asselect * from work where 性别='男'完全可以插入insert xm values('001','女',23,'2400'....)尽管从意义上来说是不合理的,但是上述语句是正确的.为了防止这种情况的发生,可以使用with check option子句来对插入的或更改的数据进行限制.比如:create view xm asselect * from work where 性别='男' with check option使用schemabinding的视图[使用绑定到构架]我们知道视图是依赖于表,如果在一个表中创建一个视图,今后如果这个表被删除了,则这个视图将不可再用了.为了防止用户删除一个有视图在引用的表,可以在创建视图的时候加上schemabinding关键字.比如:create view 基本工资 with SCHEMABINDINGas select 姓名,性别,基本工资 from dbo.work说明:1:不能使用“*”来创建此类型的视图2:创建此类型的视图时,一定要加上dbo.表名.3:如果在某个表中定义了此类视图,则用户将不能对表的结构进行修改,否则会删除这些绑定4:如果用户对表的结构进行列改名,则会删除绑定而且视图不可用.5:如果用户对表的结构进行列的类型或者大小修改,则会删除绑定但视图可用,此时用户可以删除视图所引用的表.使用with encryption对视图进行加密为了保护创建视图定义的原代码,可以对视图进行加密.比如:create view kk with encryptionas select * from work where 职称='经理'用sp_helptext来查看一下.或用企业管理器查看一下.说明:如果应用此项用户将无法设计视图使用视图加强数据的安全一般通过使用视图共有三种途径加强数据的安全性A:对不同用户授予不同的使用权.B:通过使用select子句限制用户对某些底层基表的列的访问C:通过使用where子句限制用户对某些底层基表的行的访问,对不同用户授予不同的权限。

视图的优点,缺点,讲一下?

视图的优点,缺点,讲一下?视图(View)在数据库中有其优点和缺点,具体取决于使用场景和需求。

以下是关于视图的一些优点和缺点:优点:1. 简化复杂查询:视图可以将复杂的查询逻辑封装起来,提供用户和应用程序简化的接口,降低了复杂查询的难度。

2. 隐藏表结构:视图可以隐藏底层表的具体结构,只向用户暴露需要的数据,提高了数据的安全性和隐私保护。

3. 简化权限管理:视图可以通过授予用户对视图的访问权限,而不是直接对底层表进行权限控制,简化了用户权限管理的过程。

4. 提高数据独立性:当底层表的结构发生变化时,只需调整视图的定义,而不会影响使用视图的应用程序或用户,提高了数据独立性。

5. 重用查询逻辑:视图可以将常用的查询逻辑抽象为视图,以便在多个查询中重用,提高了代码的可维护性和重用性。

6. 提高性能:在某些情况下,使用视图可以通过预先计算和存储查询结果,提高查询性能。

特别是对于复杂计算或聚合操作,视图可以缓存中间结果。

缺点:1. 性能开销:在某些情况下,视图的使用可能导致性能开销,尤其是在处理大量数据或复杂查询时。

每次使用视图时,都需要执行视图的定义,可能会引起性能瓶颈。

2. 更新限制:一些视图是不可更新的,尤其是包含聚合函数、GROUP BY、DISTINCT等的视图。

在这种情况下,对视图的更新操作可能会受到限制。

3. 查询复杂性:当视图定义涉及多个表的连接、过滤条件等复杂操作时,用户可能需要理解视图的底层逻辑,使得查询变得更加复杂。

4. 依赖底层表结构:尽管视图可以隐藏底层表的具体结构,但它仍然依赖于底层表的存在和结构。

如果底层表发生变化,视图的定义可能需要相应调整。

5. 安全性问题:在某些情况下,视图的使用可能引起安全性问题,特别是当视图涉及敏感信息而用户无法正常控制对视图的访问权限时。

总体而言,视图是一种强大的数据库工具,可以提供方便的数据访问和管理,但在使用时需要谨慎考虑性能、安全性和更新限制等因素。

数据库-视图(View)详解

数据库-视图(View)详解⼀、简介视图(View)可以看作定义在SQL Server上的虚拟表.视图正如其名字的含义⼀样,是另⼀种查看数据的⼊⼝.常规视图本⾝并不存储实际的数据,⽽仅仅存储⼀个Select语句和所涉及表的metadata。

视图简单理解如下:通过视图,客户端不再需要知道底层table的表结构及其之间的关系。

视图提供了⼀个统⼀访问数据的接⼝。

⼆、为什么要使⽤视图(View)从上⾯的图中,我们不难发现,使⽤视图将会得到如下好处:视图隐藏了底层的表结构,简化了数据访问操作因为隐藏了底层的表结构,所以⼤⼤加强了安全性,⽤户只能看到视图提供的数据使⽤视图,⽅便了权限管理,让⽤户对视图有权限⽽不是对底层表有权限进⼀步加强了安全性视图提供了⼀个⽤户访问的接⼝,当底层表改变后,改变视图的语句来进⾏适应,使已经建⽴在这个视图上客户端程序不受影响三、视图(View)的分类视图在SQL中可以分为三类1. 普通视图(Regular View)2. 索引视图(Indexed View)3. 分割视图(Partitioned View)下⾯从这⼏种视图类型来谈视图。

1)普通视图(Regular View)普通视图由⼀个Select语句所定义,视图仅仅包含其定义和被引⽤表的metadata.并不实际存储数据。

MSDN中创建视图的模版如下:CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ][ WITH <view_attribute> [ ,...n ] ]AS select_statement[ WITH CHECK OPTION ] [ ; ]<view_attribute> ::={[ ENCRYPTION ][ SCHEMABINDING ][ VIEW_METADATA ] }参数还是⽐较少的,现在解释⼀下上⾯的参数: ENCRYPTION:视图是加密的,如果选上这个选项,则⽆法修改.创建视图的时候需要将脚本保存,否则再也不能修改了 SCHEMABINDING:和底层引⽤到的表进⾏定义绑定。

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

视图
一、视图的基本概念
通常将模式所对应的表称为基本表。

基本表中的数据实际上是物理存储在磁盘上的。

在关系模型中有一个重要的特点,那就是由SELECT语句得到的结果仍然是二维表,由此引出了视图的概念。

视图是查询语句产生的结果,但它有自己的视图名,视图中的每个列也有自己的列名。

视图在很多方面都与基本表相似
视图是由从数据库的基本表中选取出来的数据组成的逻辑窗口,是基本表的部分行和列数据的组合。

它与基本表不同的是,视图是一个虚表。

数据库中只存储视图的定义,而不存储视图所包含的数据,这些数据仍存放在原来的基本表中。

这种模式有以下两个好处。

①视图数据始终与基本表数据保持一致。

当基本表中的数据发生变化时,从视图中査询出的数据也会随之变化。

因为每次从视图中查询数据时,都是执行定义视图的查询语句,即最终都是落实到基本表中査询数据。

从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中用户自己感兴趣的数据。

②节省存储空间。

当数据量非常大时,重复存储数据是非常耗费空间的。

视图可以从ー个基本表中提取数据,也可以从多个基本表中提取数据,甚至还可以从其他视图中提取数据,构成新的视图。

但不管怎样,对视图数据的操作最终都会转换为对基本表的操作。

图1显示了视图与基本表之间的关系。

二、定义视图
定义视图的SQL语句为CREATE VIEW,其一般格式如下
CREATE VIEW<视图名>[(列名[,n])]
as
查询语句
其中,查询语句可以是任意的SELECT语句,但要注意以下几点:
①査询语句中通常不包含ORDER BY和DISTINCT子句。

②在定义视图时要么指定视图的全部列名,要么全部省略不写,不能只写视图的部分列名。

如果省略了视图的“列名”部分,则视图的列名与査询语句中査询结果显示的列名相同。

但在如下三种情况下必须明确指定组成视图的所有列名:
1. 某个目标列不是简单的列名,而是函数或表达式,并且没有为这样的列起别名。

2.多表连接时选出了几个同名列作为视图的字段
3.需要在视图中为某个列选用新的更合适的列名。

1)定义单源表视图
单源表的行列子集视图指视图的数据取自一个基本表的部分行和列,这样的视图行列与基本表行列对应。

用这种方法定义的视图可以通过视图对数据进行查询和修改操作。

例1建立查询信息管理系学生的学号、姓名、性别和年龄的视图
CREATE VIEW IS_Student
as
SELECT Sno, Sname, Ssex, Sage
FROM S WHERE Sdept='信息管理系’
数据库管理系统执行CREATE VIEW语句的结果只是在数据库中保存视图的定义并不执行其中的SELECT语句。

只有在对视图执行査询操作时,才按视图的定义从相应基本表中检索数据。

2)定义多源表视图
多源表视图指定义视图的查询语句涉及多张表,这样定义的视图一般只用于查询,不用
于修改数据
例2:建立查询信息管理系选修了“COO1”号课程的学生的学号、姓名和成绩的视图。

CREATE VIEW IS_S1(Sno, Sname, Grade)
AS
SELECT S Sno, Sname, Grade
FROM S JOIN SC ON S.Sno=SC.Sno
WHERE Sdept='信息管理系’AND o='C001’
3)在已有视图上定义新视图
还可以在视图上再建立视图,这时作为数据源的视图必须是已经建立好的视图。

例3:利用例1建立的视图,建立查询信息管理系年龄小于20的学生的学号、姓名和年龄的视图
CREATE VIEW IS_Student Sage
as
SELECT Sno, Sname, Sage
FROM IS S WHERE Sage<20
视图的来源不仅可以是单个的视图和基本表,还可以是视图和基本表的组合
例4:在例1所建的视图基础上,例2的视图定义可改为:
CREATE VIEW V_IS_S2(Sno, Sname, Grade)
AS
SELECT SC Sno, Sname, Grade
FROM IS_Student JOIN SC ON IS_Student.Sno=SC.Sno
WHERE Cno = ’C001’
这里的视图V_IS_S2就是建立在IS_Student视图和SC表之上的。

4)定义带表达式的视图
在定义基本表时,为减少数据库中的冗余数据,表中只存放基本数据,而基本数据经过各种计算派生出的数据一般是不存储的。

但由于视图中的数据并不实际存储,所以定义视图时可以根据需要设置一些派生属性列,在这些派生属性列中保存经过计算的值。

这些派生属性由于在基本表中并不实际存在,因此,也称它们为虚拟列。

包含虚拟列的视图也称为带表达式的视图。

例5:定义一个查询学生出生年份的视图,内容包括学号、姓名和出生年份。

CREATE VIEW BT_S(Sno, Sname, Birth)
SELECT Sno, Sname, 2009-Sage FROM S
注意:在定义这个视图的查询语句的查询列表中有一个表达式,但没有为表达式指定名,因此,在定义视图时必须指定视图的全部列名。

5.含分组统计信息的视图
含分组统计信息的视图是指定义视图的查询语句中含有GROUP BY子句,这样的视图只能用于査询,不能用于修改数据。

例6:定义一个查询每个学生的学号及平均成绩的视图
CREATE VIEW S_G
AS
SELECT Sno, AVG(Grade )Averagegrade FROM SC GROUP BY Sno
注意:这个查询语句为统计函数指定了列别名,因此在定义视图的语句中可以省略视图的列名。

当然,也可以指定视图的列名。

如果指定了视图中各列的列名,则视图用指定的列名作为视图各列的列名。

三、通过视图查询数据
定义视图后,就可以对其进行查询了,通过视图查询数据同通过基本表查询数据一样。

例7:利用例1建立的视图,查询信息管理系男生的信息SELECT * FROM IS_student WHERE Ssex =‘男’
例 8:查询平均成绩大于等于80分的学生的学号和平均成绩
Select * from S_G where averagegrade>=80
转换为基本语句大家是怎么写的?
Where 子句中不能带有统计函数
Select Sno,AVG(GRade) from sc group by sno having avg(grade)>=80 四、修改和删除视图
修改:语法格式与建立一样将create 改成 alter
删除:drop view 视图名
五、视图的作用
1.简化数据查询语句
2.使用户能从多角度看待同一数据
3.提高了数据的安全性
4.提供了一定程度的逻辑独立性
5.。

相关文档
最新文档