视图的定义
视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。通过视图,可以展现基表的部分数据;视图数据来自定义视图的查询中使用的表,使用视图动态生成。视图具有很多优点,使用视图大部分情况下都是为了保障数据的安全性、提高查询效率以及简化逻辑复杂的SQL语句。
注意:
- 用来创建视图的表叫做基表base table
- 视图本身没有数据,视图的数据全部来源于基表
使用视图具有以下优点:
- 简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集
- 安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现
- 数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响
- 简化复杂的SQL操作:在编写查询后,可以方便地重用它而不必知道它的基本查询细节
虽然视图使用方便,但是使用视图也需要遵守下面的规则:
- 对于可以创建的视图数目没有限制,但是与表一样,视图必须唯一命名
- 视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图
- ORDER BY可以用在视图中,但如果从该视图检索数据SELECT中也含有ORDER BY,那么该视图中的ORDER BY将被覆盖
- 视图不能索引,也不能有关联的触发器或默认值
- 视图可以和表一起使用。例如,编写一条联结表和视图的SELECT语句
创建和使用视图
SQL语句:CREATE VIEW myview AS SELECT cust_name, cust_contact, prod_id FROM customers, orders, orderitems FROM customers, orders, orderitems WHERE customerscust_id = orderscust_id AND orderitemsorder_num = ordersorder_num
上面的SQL语句就创建了一个名为myview的视图,它联结了三个表,查询了三个字段,这个视图也使用了WHERE子句去过滤数据。有了上面的视图,我们就可以直接使用这个视图了,如:
SELECT * FROM myview
当然,视图的WHERE子句的过滤条件也可以和SELECT语句的过滤条件自动组合,比如:SELECT cust_name,cust_contact FROM myview WHERE prod_id = ‘TNT2’
它将指定的WHERE子句添加到视图查询中的已有WHERE子句中,以便正确过滤数据
