丁保国的博客

收集整理工作生活,点点滴滴

  :: :: 博问 :: 闪存 :: :: :: :: 管理 ::

10. 视图

本章主题

l        视图的概念

l        创建视图

l        通过视图添加表数据

l        通过视图更改表数据

l        通过视图删除表数据

 

较偏重于在企业管理器中实现视图的创建

 

 

与我的学生共勉:含泪播种的人一定能含笑收获。

温一军

10.1. 视图的概念

通俗地说,视图看起来一张表,这张表的数据来自于其它一张表或多张表。但是视图不是表视图本身并不保存数据,数据只保存在表内,视图的数据来自于它所“透视”的表。

类似于Access中的查询。

视图可以用来定义来自一个或者多个表的行和列的多种连接,这些行和列是用一条SELECT语句来指定。

视图是查看数据库表中数据的一种方法,在视图中被查询的表称为视图的基表。

般地,视图的内容包括

l        基表的列的子集或行的子集,因此可以说视图是基表的其中一部分。

l        两个或者多个基表的连接,也就是说视图是对多个基表进行连接运算检索的SELECT语句。

l        基表的统计汇总,视图不仅仅是基表的投影,还可以是经过对基表的各种复杂运算的结果。

l        另外一个视图的子集,这表示视图既可以基于表,也可以基于另一个视图。

l        视图和基表的混合

既然有了表,为什么还要有视图?

l        视图可以限制用户只能访问表中特定的列

l        如果要查询的数据已分布在数个表中,这时只要创建视图将想要查询的表列集合起来做这视图的列。

l        将必须经过复杂的SELECT命令和表间JOIN所生成的数据创建一视图,让用户直接处理视图,而不用面对复杂的SELECT命令和表的JOIN

 

10.2. 创建视图

利用企业管理器

演示在NorthWindSQL数据库中创建视图,取得客户与订单情况。

利用Create View命令

格式:

CREATE VIEW [拥有者].视图名称

AS

SELECT命令

 

示例1

CREATE VIEW view_emp

AS

  SELECT emp_no,emp_name,addr

  FROM employee

 

示例2

CREATE VIEW view_sale (p_id,o_date,sale_amt)

AS

  SELECT prod_id,order_no,qty*unit_price

  FROM sale_item

  WHERE sup_id=’S0001’

 

示例3

CREATE VIEW sale_detl_view

AS

  SELECT sales.order_no,sales.order_date,prod_id,sup_id,qty

  FROM sales,sale_item

  WHERE sales.order_no=sale_item.order_no

 

10.3. 通过视图添加表数据

视图除了用于数据查看以外,也可以对视图执行INSERT命令以添加数据。所谓对视图添加数据,事实上是对隐藏在视图后面的表做数据添加

 

注意:当对视图添加数据时,所有对表列的约束条件、规则、列触发器也沿用于视图内的列。

示例1:对单表视图添加数据

CREATE VIEW cust_tpe_view   --新建视图

AS

  SELECT cust_id,cust_name,zip,addr

  FROM customer

  WHERE zip>=’100’ OR zip<=’117’

--向视图添加了一行数据,请问可以添加不在100 117间的数据吗?

INSERT INTO cust_tpe_view VALUES (‘C0010’,’客户一’,’117’,’上海市’) 

 

示例1:对多表视图添加数据

CREATE VIEW emp_sale_view   --新建视图

AS

  SELECT emp_no,emp_name,order_no,tot_amt

  FROM sales,employee

  WHERE sale_id=emp_no  --看看这里,想想另一种连接表的方法

--向视图添加了一行数据

INSERT INTO emp_sale_viewemp_no,emp_name

 VALUES (‘E0021’,’张大海’) 

--下面这句不行!有错误,看下面注解

INSERT INTO emp_sale_viewemp_no,emp_nameorder_no,tot_amt

 VALUES (‘E0021’,’张大海’,10023,35000) 

 

注解:

当使用INSERT命令向视图添加数据时,在同一INSERT命令内只能指定相同表中的列

10.4. 通过视图更改表数据

可以利用UPDATE命令来操作视图,实质上是更新视图的基表中的数据。

UPDATE  cust_tpe_view

SET cust_name=’ABC公司

WHERE cust_id=’C0001’

注解:

当使用UPDATE命令通过视图修改数据时,在同一UPDATE命令内只能指定相同表中的列。也就是说,在对视图的操作时,不能有“一石两鸟”的妄想。J

10.5. 通过视图删除表数据

可以利用DELETE命令来操作视图,实质上是删除视图的基表中的数据。

DELETE  FROM cust_tpe_view

WHERE cust_id=’C0001’

注解:

ü        当使用DELETE命令通过视图修改数据时,在同一DELETE命令内只能指定相同表中的列。同一句话说了3遍啦 J

ü        利用视图删除表中数据的限制:删除的数据一定要在视图内

 

与我的学生共勉:昨晚多几分钟的准备,今天少几小时的麻烦。

温一军

 

10章 结束

 

posted on 2007-07-21 18:38  丁保国  阅读(249)  评论(1编辑  收藏  举报