目录
1.视图是什么
从SQL的角度来看,视图就是一张表,存在表名、字段列。在SQL语句中,也并不区分实体表和视图。
视图和实体表的区别就在与:是否保存了实际数据。
视图本身是一个不含任何数据的虚拟表,数据库中存放视图的定义(保存好的SELECT语句),而不存放视图对应的数据。
实体表中保存实际数据,使用实体表创建视图后,实体表中的数据发生变化,视图查询出的数据就会发生变化。
从视图中读取数据时,视图会在内部执行对应的SELECT语句,并创建出一张临时表。
2.为什么使用视图
视图保存的是SELECT语句,那么为什么需要使用视图,而非在查询的时候直接写SELECT语句?
这就涉及视图的优点:简化用户操作
将频繁使用的查询语句保存成视图,这样就不用每次都重新写。在创建好视图后,可以将视图和其他实体表一样,在SELECT语句中进行调用。
对于常用的联表查询,可将联表的结果创建为视图,后续使用联表结果时,不用重新写select语句,直接调用视图即可。
3.视图的用法
3.1创建视图
CREATE VIEW v_grade
AS
SELECT id,avg(mark) FROM grade
WHERE sex='男'
GROUP BY id
HAVING avg(mark)>80;
创建视图的语句,就是在完整的SELECT语句前,增加“CREATE VIEW 视图名 AS”。
视图是保存的SELECT语句,在SELECT语句中,可以使用WHERE\GROUP BY\HAVING子句,但是不可使用ORDER BY。
上例中,新创建的视图,字段名沿用原表字段名。
需要设置视图的字段名时,可参考如下写法:“CREATE VIEW 视图名 (列名,列名) AS”
CREATE VIEW v_grade (v_id,v_avg)
AS
SELECT id,avg(mark) FROM grade
WHERE sex='男'
GROUP BY id
HAVING avg(mark)>80;
3.2使用视图
对于已经创建的视图v_grade(v_id,v_avg),可以在其他查询语句中使用。
SELECT v_id,v_avg FROM v_grade
WHERE v_id='001';
使用视图时,同其他实体表的用法一致。只是实体表中是真实的数据,视图代表SELECT查询语句。
使用视图的查询语句,执行时至少有两个步骤:
(1)执行定义视图的SELECT语句(例如本文中创建视图的语句)
(2)根据得到的结果,再执行使用视图的SELECT语句(例如本文中使用视图的语句)
3.3删除视图
DROP VIEW v_grade;
3.4视图数据增和改
视图也可以使用INSERT,UPDATE进行数据的增和改,但是需要符合以下条件:
(1)视图FROM子句只有一张表;
(2)未使用GROUP BY子句,未使用HAVING子句
在对视图新增和修改数据后,视图对应表中的数据同步修改。
如视图在一个实体表的基础上筛选而得,那么给视图增加一条数据的语句执行后,实体表也会同步增加一条数据。以此保证数据的一致性。