视图
含义:虚拟表,和普通表一样使用
mysql 5.0.1 版本出现的新特性,是通过表动态生成的数据,只保存了sql逻辑,不保存查询结果。
应用场景:
- 多个地方用到同样的查询结果
- 该查询结果使用的sql语句较复杂
好处:
- 重用sql语句
- 简化复杂的sql操作,不知道它查询的细节
- 保护数据,提高安全性
1 创建视图
语法:
create view 视图名
as
查询语句;
案例
- 查询姓名中包含a字符的员工名、部门名和工种信息
CREATE VIEW myv1
AS
SELECT `last_name`,`department_name`,`job_title`
FROM `employees` e
JOIN `departments` d ON e.`department_id`=d.`department_id`
JOIN `jobs` j ON j.`job_id`=e.`job_id`;
SELECT *
FROM `myv1`
WHERE last_name LIKE '%a%';
- 查询各部门的平均工资级别
CREATE VIEW myv2
AS
SELECT AVG(salary) ag,department_id
FROM `employees`
GROUP BY department_id;
SELECT * FROM myv2;
SELECT myv2.`ag`,g.grade_level
FROM myv2
JOIN job_grade g
ON myv2.`ag` BETWEEN g.lowest_sal AND g.highest.sal ;
- 查询平均工资最低的部门信息
SELECT * FROM myv2 ORDER BY ag LIMIT 1;
- 查询平均工资最低部门名和工资
CREATE VIEW myv3
AS
SELECT * FROM myv2 ORDER BY ag LIMIT 1;
SELECT d.*,m.ag
FROM myv3 m
JOIN `departments` d
ON m.department_id=d.department_id;
2 视图的修改
方式一:
create or replace view 视图名
as
查询语句;
方式二:
alter view 视图名
as
查询语句;
3 删除视图
语法
drop view 视图名,视图名…;
4 查看视图
方式一:desc 视图名;
方式二:show create view 视图名;
5 视图的更新
在视图中插入:insert,update,delete
注意:如果在视图中增删改了一条数据,原始表中也新增了一条。
所以视图一般添加只读权限。
视图的可更新性和视图中查询的定义有关系,以下类型的视图是不能更新的:
- 包含以下关键字的sql语句:分组函数、distinct、group by、having、union或union all
- 常量视图
- select 中包含子查询
- join
- from一个不能更新的视图
- where子句的子查询引用了from子句中的表
6 视图和表的对比
创建语法的关键字 | 是否实际占用物理空间 | 使用 | |
---|---|---|---|
视图 | create view | 没有,只是保存了sql逻辑 | 增删改查,一般情况下只读 |
表 | create table | 占用 | 增删改查 |