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_view(emp_no,emp_name)
VALUES (‘E0021’,’张大海’)
--下面这句不行!有错误,看下面注解
INSERT INTO emp_sale_view(emp_no,emp_name,order_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章 结束 |