定义
视图(view)是虚拟的表,与包含数据的表不同,视图只包含使用时动态检索数据的查询。下面先用一个例子来直观地理解一下:
SELECT cust_name,cust_contact
FROM customers,orders,orderitems
WHERE customers.cust_id=orders.cust_id
AND orderitems.order_num=orders.order_num
AND prod_id=’TNT2’;
视图的作用就是将整个查询包装起来。
首先要创建一个视图:
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=orders.order_num;
第二步利用这个视图:
SELECT cust_name,cust_contact
FROM productcustomers
WHERE prod_id=’TNT2’;
使用视图的优点
使用视图大多数情况下是保障数据的安全,提高查询效率(重用相似查询语句),简化逻辑复杂的SQL语句。
使用视图具有以下优点:
- 简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集
- 安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现
- 数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响
- 简化复杂的SQL操作:在编写查询后,可以方便地重用它而不必知道它的基本查询细节
虽然视图使用方便,但是使用视图也需要遵守下面的规则:
- 对于可以创建的视图数目没有限制,但是与表一样,视图必须唯一命名
- 视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图
- ORDER BY可以用在视图中,但如果从该视图检索数据SELECT中也含有ORDER BY,那么该视图中的ORDER BY将被覆盖
- 视图不能索引,也不能有关联的触发器或默认值
- 视图可以和表一起使用。例如,编写一条联结表和视图的SELECT语句
