Sql视图初步

一.什么是视图

视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。
感性的看一个例子。假如有下面的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'

四.性能问题

因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时所需要的每一个检索。如果你用多个联结和过滤创建了复杂的视图,可能会发现性能下降得很厉害。



Sql视图 初步
您的回应...

相关话题

查看全部

也许你感兴趣

换一批