1、什么是视图
视图:存储的查询语句,当调用的时候,产生结果集,视图充当的是虚拟表的角色.
- 如果要对一张表或者多张表进行查询,可以通过写复杂的SQL语句来实现
- 如果要这些SQL语句存储为视图,那么查询的时候,就直接查询这个视图就可以了.
2、视图的好处
视图的好处,可以主要分为四点:
我简单的说一下,希望你能明白。
第一点:
使用视图,可以定制用户数据,聚焦特定的数据。
解释:
在实际过程中,公司有不同角色的工作人员,我们以销售公司为例的话,
采购人员,可以需要一些与其有关的数据,而与他无关的数据,对他没
有任何意义,我们可以根据这一实际情况,专门为采购人员创建一个视
图,以后他在查询数据时,只需select * from view_caigou 就可以啦。
第二点:使用视图,可以简化数据操作。
解释:我们在使用查询时,在很多时候我们要使用聚合函数,同时还要
显示其它字段的信息,可能还会需要关联到其它表,这时写的语句可能
会很长,如果这个动作频繁发生的话,我们可以创建视图,这以后,我
们只需要select * from view1就可以啦~,是不是很方便呀~
第三点:使用视图,基表中的数据就有了一定的安全性
因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合,我们可以
将基表中重要的字段信息,可以不通过视图给用户,视图是动态的数据的集
合,数据是随着基表的更新而更新。同时,用户对视图,不可以随意的更改
和删除,可以保证数据的安全性。
第四点:可以合并分离的数据,创建分区视图
随着社会的发展,公司的业务量的不断的扩大,一个大公司,下属都设有很
多的分公司,为了管理方便,我们需要统一表的结构,定期查看各公司业务
情况,而分别看各个公司的数据很不方便,没有很好的可比性,如果将这些
数据合并为一个表格里,就方便多啦,这时我们就可以使用union关键字,
将各分公司的数据合并为一个视图。
以上,就是我认为视图的作用,实际上很多公司都使用视图来查询数据的
http://www.cnblogs.com/chuanzhang053/p/9230153.html
3、视图的创建和查询
1.创建表,插入数据,并且执行查询
mysql> CREATE TABLE t (qty INT, price INT);
Query OK, 0 rows affected (0.09 sec)
mysql> INSERT INTO t VALUES(3, 50), (5, 60);
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM t;
+------+-------+
| qty | price |
+------+-------+
| 3 | 50 |
| 5 | 60 |
+------+-------+
2 rows in set (0.00 sec)
2.创建视图,视图中的查询根据具体的情况有相应的表达式
mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
Query OK, 0 rows affected (0.01 sec)
3.查询视图v
mysql> SELECT * FROM v;
+------+-------+-------+
| qty | price | value |
+------+-------+-------+
| 3 | 50 | 150 |
| 5 | 60 | 300 |
+------+-------+-------+
2 rows in set (0.00 sec)
对于视图的查询也可以加上过滤条件:
mysql> SELECT * FROM v WHERE qty = 5;
+------+-------+-------+
| qty | price | value |
+------+-------+-------+
| 5 | 60 | 300 |
+------+-------+-------+
1 row in set (0.00 sec)
备注:所以仅仅查询这个视图,和执行定义语句中的SQL语句的效果相同.即就相当于查询了一张表.同时,视图也就等同于后面的查询语句,视图是存储在数据库中的,所以就理解了开头说的存储的查询.
4.查看当前库下所有的视图
mysql> show full tables where table_type like 'VIEW';
+----------------+------------+
| Tables_in_test | Table_type |
+----------------+------------+
| v | VIEW |
| vw_01 | VIEW |
+----------------+------------+
2 rows in set (0.00 sec)
5.基于其他的视图来创建视图
mysql> select * from vw_01; #vw_01是一个视图.
+---+------+
| a | b |
+---+------+
| 1 | NULL |
| 2 | NULL |
| 3 | NULL |
| 4 | NULL |
+---+------+
4 rows in set (0.00 sec)
mysql> create view v01 as select a,b from vw_01; #基于视图来创建视图,也就是说,视图定义中的SELECT查询的是另外的视图.
Query OK, 0 rows affected (0.02 sec)
mysql> select * from v01;
+---+------+
| a | b |
+---+------+
| 1 | NULL |
| 2 | NULL |
| 3 | NULL |
| 4 | NULL |
+---+------+
4 rows in set (0.00 sec)