SQLServer视图(一)

转载 2007年09月17日 17:28:00

SQLServer视图(一):视图简介

先举一个例子,在Northwind数据库中,如果要查看一个订单是由哪个雇员签订的,签订的时间是什么时候,买了什么产品,价格是多少,由谁来送货,送货的地址是什么等内容,那么就要从产品、订单、订单明细、雇员和运货商五个表中查询记录,其查询代码如下:

SELECT 订单.订单ID, 雇员.姓氏, 雇员.名字, 产品.产品名称,

         订单明细.单价, 订单明细.数量, 订单明细.折扣, 运货商.公司名称,

         订单.货主名称, 订单.货主地址, 订单.货主城市, 订单.订购日期,

         订单.发货日期

FROM 订单 INNER JOIN

           订单明细 ON 订单.订单ID = 订单明细.订单ID INNER JOIN

           雇员 ON 订单.雇员ID = 雇员.雇员ID INNER JOIN

           产品 ON 订单明细.产品ID = 产品.产品ID INNER JOIN

           运货商 ON 订单.运货商 = 运货商.运货商ID

查询结果如图9.1所示,如果要查询具体某一个订单的详细内容,还要在其后增加一个“WHERE 订单.订单ID =”的语句。

9.1 执行查询语句后的结果

如果经常需要查询相同的字段内容(只是条件不同,如上例中可能只是订单的ID号不同而已),那么每次都重复地写这么一大串相同的代码,无疑会增加工作量和影响工作效率。

再看一下图9.1,其显示出来的界面与在SQL Server Management Studio中打开一个表的界面是否十分相似?如果将这个查询的结果集视为一个表,那么这个表就是一个视图,下面是将该查询结果创建成视图的代码:

CREATE VIEW 订单详细视图

AS

SELECT 订单.订单ID, 雇员.姓氏, 雇员.名字, 产品.产品名称,

         订单明细.单价, 订单明细.数量, 订单明细.折扣, 运货商.公司名称,

         订单.货主名称, 订单.货主地址, 订单.货主城市, 订单.订购日期,

         订单.发货日期

FROM 订单 INNER JOIN

           订单明细 ON 订单.订单ID = 订单明细.订单ID INNER JOIN

           雇员 ON 订单.雇员ID = 雇员.雇员ID INNER JOIN

           产品 ON 订单明细.产品ID = 产品.产品ID INNER JOIN

           运货商 ON 订单.运货商= 运货商.运货商ID

创建完视图之后,如果还要以同样的条件进行查询,只要输入以下一行代码就可以得到查询结果:

SELECT * FROM 订单详细视图

即使要查询某个订单的详细情况,也只要输入以下代码,而不用输入那么一长串代码了。

SELECT * FROM 订单详细视图

         WHERE 订单ID = 10248

视图具备了数据表的一些特性,数据表可以完成的功能,如查询、修改(虽然在修改记录时有些限制)、删除等操作,在视图中都可以完成。同时,视图也和数据表一样能成为另一个视图所引用的表。使用视图有以下几个优点:

简化查询语句:通过视图可以将复杂的查询语句变成很简单。

增加可读性:由于在视图中可以只显示有用的字段,并且可以使用字段别名,能方便用户浏览查询的结果。

方便程序的维护:如果用应用程序使用视图来存取数据,那么当数据表的结构发生改变时,只需要更设视图存储的查询语句即可,不需要更改程序。

增加数据的安全性和保密性:针对不同的用户,可以创建不同的视图,此时的用户只能查看和修改其所能看到的视图中的数据,而真正的数据表中的数据甚至连数据表都是不可见不可访问的,这样可以限制用户浏览和操作的数据内容。另外视图所引用的表的访问权限与视图的权限设置也是相互不影响的。

注意:视图是个虚拟的表,其存储的是查询语句而不是数据。视图中的数据都存储在其引用的数据表中,除非在视图中建立了索引。

 

 

 

sqlserver视图查询效率测试

测试视图的查询效率,结果清晰表示视图不降低查询效率。
  • wanmdb
  • wanmdb
  • 2015年12月19日 15:23
  • 3512

SQLServer之视图篇

视图是从一个或者几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存在视图对应的数据,这些数据仍然存放在原来的基本表中。所以一旦基本表中的数据发生变化,从视图中查...
  • marvel_java
  • marvel_java
  • 2016年11月26日 17:40
  • 465

SQL server 多表查询与视图的使用

use Saijie    create table goods1(    商品编号  int primary key identity(1,1),--主键,自增    商品名称  varcha...
  • qq_31059475
  • qq_31059475
  • 2016年05月23日 17:04
  • 963

SQLServer创建视图

1、视图的理解 从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据 。从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表 。从数据库系统内部来看,视图是由一张或多张...
  • lefter1986
  • lefter1986
  • 2013年09月03日 14:25
  • 969

SQLserver中的视图与主外键的创建

一.背景 原来学过数据库的相关内容,只是形式上的,从来也没有实践过,徐徐飘过而已,如今在做机房时,很多知识需要用到视图,才开始去慢慢的实践。 视图:我理解的就是一张表,它把我们所需要的某个表或某几...
  • wangyy130
  • wangyy130
  • 2014年08月12日 16:54
  • 2271

Sql Server 获取指定表、视图结构

1、获取指定表、视图的所有字段属性 只要输入不同的表/视图名,就可以获取该表的所有字段名字、字段长度、字段类型、字段说明、字段是否允许为空、是否主键、是否自增长字段等。USE [数据库名称] GO ...
  • xunzaosiyecao
  • xunzaosiyecao
  • 2015年11月19日 18:04
  • 1760

sqlserver2008 视图中跨服务器查询

最近在做公司平台,遇到下面的问题: sql语句在程序和sqlserver的新建查询窗口中可以正确的执行,但是在视图中就出错,sql语句和错误如下: sql语句: select u.UserID AS ...
  • writtyflame
  • writtyflame
  • 2013年11月08日 15:18
  • 1388

SqlServer中视图、索引、存储过程等优缺点的介绍

1.视图 (1).什么是视图? 视图(View)作为一种数据库对象,为用户提供了一个可以检索数据表中的数据方式。用户通过视图来浏览数据表中感兴趣的部分或全部数据,而数据的物理存储位置仍然在表中。 视图...
  • qq_14974339
  • qq_14974339
  • 2017年01月05日 14:01
  • 591

SQL server中视图的更新

SQL Server中更新视图, 可能出现的错误及处理.          定义视图后,对视图的查询没有什么限制,可以像对待表一样进行操作。但是, 如果对视图中的元组进行更新操作(INSERT,UPD...
  • zhangxing__
  • zhangxing__
  • 2013年12月07日 18:46
  • 4921

视图后面加with(nolock)后

原文出处:http://www.cnblogs.com/ASPNET2008/archive/2012/02/09/2343538.html       一些小的企业项目,往往存在很多局限性...
  • chelen_jak
  • chelen_jak
  • 2013年01月25日 10:33
  • 1736
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQLServer视图(一)
举报原因:
原因补充:

(最多只允许输入30个字)