原文链接:https://www.jianshu.com/p/5d336094d4b4
什么是视图?
视图就是基于SQL语句的结果集的可视化的表。不过视图是一个虚拟的表,是一个表中的数据经过某种筛选后的显示方式,视图由一个预定义的查询select语句组成。
视图的特点
- 视图中的数据并不属于视图本身,而是属于基本的表,对视图可以像表一样进行增删改查操作。
- 视图不能被修改,表修改或者删除后应该删除视图再重建。
- 视图可以被嵌套,一个视图中可以嵌套另一个视图。
- 视图的数量没有限制,但是命名不能和视图以及表重复,具有唯一性。
视图的功能
- 将用户限定在表中的特定行上。
- 将用户限定在特定列上。
- 将多个表中的列联接起来,使它们看起来象一个表。
- 聚合信息而非提供详细信息,例如显示一个列的和或列的最大值和最小值。
视图的优点:
- 视图着重于特定数据。
- 简化数据的操作,易维护。
- 视图可以限定查询数据。
视图的缺点:
- 操作视图会比直接操作基础表要慢,所以我们尽量避免在大型表上创建视图。
- 尽量不要创建嵌套视图,就是在视图中使用视图。 这样在查询时,会多次重复访问基础表,带来性能损耗。
- 尽量在视图只返回所需的信息,尽量不要在视图使用不需要访问的表。
- 在大型表或者复杂定义的视图,可以使用存储过程代替。
- 频繁使用的视图,可以使用索引视图来代替。
视图的使用场景:
使用场景:–多个地方用到同样的查询结果
–该查询结果使用的sql语句较复杂
实例:
CREATE OR REPLACE VIEW newview
AS
SELECT stuid,username,city,stuname FROM `mytable4` WHERE age=24;
SELECT * FROM newview WHERE stuid=2;
AS
SELECT stuid,username,city,stuname FROM `mytable4` WHERE age=24;
SELECT * FROM newview WHERE stuid=2;
#一、创建视图emp_v1,要求查询电话号码以‘011’开头的员工姓名和工资、邮箱
CREATE OR REPLACE VIEW emp_v1
AS
SELECT last_name,salary,email
FROM employees
WHERE phone_number LIKE ‘011%‘;
#二、创建视图emp_v2,要求查询部门的最高工资高于12000的部门信息
CREATE OR REPLACE VIEW emp_v2
AS
SELECT MAX(salary) mx_dep,department_id
FROM employees
GROUP BY department_id
HAVING MAX(salary)>12000;