创建视图的sql语句(sql视图 的创建和使用详解)

 分类:IT知识时间:2023-06-03 07:36:03点击:

什么是Sql 视图? (what?)

视图是基于预定义的查询SQL 语句的结果集的可视化的虚拟表。

视图和数据表的区别

视图是虚拟的表,不保存任何数据记录。

数据表是真实存在的表,保存完整的数据记录。

视图的特点有哪些 ?(what?)

  1. 唯一性:即视图名称不能和现有视图和表的名称重复。
  2. 无限性:视图创建可以不限数量。
  3. 可嵌套性:视图内可嵌套视图,08版允许嵌套32层。
  4. 不可修改性:当表修改和删除后,需重新建视图。
  5. 不可索引性:不能和触发器和默认值,orderby等并用。

视图的作用是什么?(function? why?)

1、简化操作:隐藏了底层的表结构,简化了数据访问操作,客户端不再需要知道底层表的结构及其之间的关系。

2、视图提供了一个统一访问数据的接口,即可以允许用户通过视图访问数据的安全机制,而不授予用户直接访问底层表的权限,加强了安全性。

3、视图提供了多个数据表之间的逻辑独立关系展示,增强了各表之间的联系可读性,能够使操作者有全局把控感。

4.可以轻松的合并或筛选自己想要的数据,并自动创建相应的SQL查询语句。

怎么创建视图?(how ?)

第一种方法:直接创建法

1.选中视图--右键单击--新建视图

2.设置视图形式及条件。

3.保存视图(Ctrl+S)。命名规则:vw_视图名称。

第二种方法:SQL语句创建视图

简单语法:

create view view_name as --指定视图进行的操作 --select ...from .....where ... 等sql 命令语句 go 

例如:

create view vw_infoAge as select * from Teacher where Age > 20 go 

详细语法:

CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ] [ WITH <view_attribute> [ ,...n ] ] AS select_statement [ WITH CHECK OPTION ] [ ; ] <view_attribute> ::= { [ ENCRYPTION ] [ SCHEMABINDING ] [ VIEW_METADATA ] } <select_statement> ::= [ WITH <common_table_expression> [ ,...n ] ] SELECT <select_criteria> 

参数解释:

  1. schema_name:是视图所有者的名称,一般为 dbo。(指定视图所有者名称是可选的。)
  2. view_name:是视图的名称。
  3. column:是视图中用于列的名称。仅当列从算术表达式,函数或常数派生时,才需要列名称; 当两个或多个列可能具有相同的名称时,通常是因为连接; 或者当视图中的列被指定与其派生的列的名称不同的名称时。列名也可以在 SELECT 语句中分配。如果列未指定,则视图列获得相同的名称作为 SELECT 语句中的列。
  4. AS:指定视图要执行的操作。
  5. select_statement:是定义视图的 SELECT 语句。该语句可以使用多个表和其他视图。需要适当的权限才能从创建的视图的 SELECT 子句中引用的对象进行选择。
  6. ENCRYPTION:对加密进行加密,加密之后不可修改。使用 WITH ENCRYPTION 可以防止将视图作为 SQL Server 复制的一部分进行发布。
  7. SCHEMABINDING:将视图绑定到底层所应用到的表。指定 SCHEMABINDING 时,不能以影响视图定义的方式修改表。必须首先修改或删除视图定义,以删除要修改的表的依赖关系。使用 SCHEMABINDING 子句创建的视图的视图或表不能删除,除非该视图被删除或更改,以使其不再具有绑定。
  8. VIEW_METADATA:当使用 WITH VIEW_METADATA 创建视图时,返回的是视图的元数据,否则返回的元数据是视图所引用表的元数据。

如何判断视图是否已存在?

语法:

if exists (select * from sysobjects where name = 'vw_infoAge') 

怎么删除视图?

语法:

drop view vw_infoAge 

视图怎么用?

1.视图中只能创建一条select查询命令,不能在视图中创建update delete和 insert

2.视图中只能对单个表进行编辑,且改动将直接影响原始物理数据表内容。

3.创建视图时,使用order by 时,必须有top函数同时使用。

例如:

create view vw_infoAge as select * from Teacher where Age > 20 order by Id go 

结果出错:

加入top函数后:

create view vw_infoAge as select top 100 percent * from Teacher where Age > 20 order by Id go 

结果正确:

视图的优缺点 (why?)

优点:

  1. 视图着重于特定数据。
  2. 简化数据的操作,易维护。
  3. 视图可以限定查询数据。

缺点:

视图实质是一段预定义的SQL语句,它的结果是每次调用时动态生成的。如果不合理的定义视图,必然带来性能上的损耗。

注意:

  1. 操作视图会比直接操作基础表要慢,所以我们尽量避免在大型表上创建视图。
  2. 尽量不要创建嵌套视图,就是在视图中使用视图。 这样在查询时,会多次重复访问基础表,带来性能损耗。
  3. 尽量在视图只返回所需的信息,尽量不要在视图使用不需要访问的表。
  4. 在大型表或者复杂定义的视图,可以使用存储过程代替。
  5. 频繁使用的视图,可以使用索引视图来代替。

本文部分参考至网络,如有错误,敬请指正,如有侵权,请联系修改。

除注明外的文章,均为来源:老汤博客,转载请保留本文地址!
原文地址: