一.什么是视图
视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。 感性的看一个例子。假如有下面的sql:
Select cust_name, cust_contact
From customers, Orders, OrderItems
Where Customers.cust_id = Orders.cust_id
And OrderItems.order_num = Order.order_num
And prod_id = 'RGAN01'
此查询用来检索订购了某个特定产品的客户。任何需要这个数据的人都必须理解相关表的结构,并且知道如何创建查询和对表进行联结。为了检索其他产品的相同数据,必须修改最后的where子句。 假如可以把整个查询包装成一个名为ProductCustomers的虚拟表,则可以用如下语句轻松地检索出结果:
Select cust_name, cust_contace
From ProductCustomers
Where prod_id = 'RGAN01'
二.为什么使用视图
1)征用sql语句 2)简化复杂的sql操作。在编写查询后,可以方便地重用它而不必知道它的基本查询细节。 3)使用表的组成部分而不是整个表。 4)保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。 5)更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。 视图创建后,可以用与表基本相同的方式利用它们。可以对视图执行select操作,过滤和排序数据,将视图联结到其他视图或表,甚至能添加和更新数据。
三.创建与删除视图 CREATE VIEW viewname DROP VIEW viewname 继续一中的例子,我们创建一个视图:
Create view ProductCustomers as
Select cust_name, cust_contact, prod_id
From customers, Orders, OrderItems
Where Customers.cust_id = Orders.cust_id
And OrderItems.order_num = Order.order_num
使用视图:
Select cust_name, cust_contact
From ProductCustomers
Where prod_id = 'RGAN01'
四.性能问题
因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时所需要的每一个检索。如果你用多个联结和过滤创建了复杂的视图,可能会发现性能下降得很厉害。