视图
就是一个虚拟的表,有行有列
虚拟表是5.1之后出现的新特性,是通过普通表动态生成的数据,具有临时性的特点。
创建视图
语法
create view 视图名
as
查询语句;
查询邮箱中包含a字符的员工名、部门名和工种信息
# 创建视图
CREATE VIEW v1
AS
SELECT last_name,department_name,j.*
FROM employees e
JOIN jobs j
ON e.`job_id` = j.`job_id`
JOIN departments d
ON e.`department_id` = d.`department_id`;
# 根据视图来查询
SELECT * FROM v1 WHERE last_name LIKE '%a%';
查询各个部门的平均工资级别
# 创建视图
CREATE VIEW v2
AS
SELECT AVG(salary) ag,department_id
FROM employees
GROUP BY department_id
# 根据视图连接别的表,实现数据的查询
SELECT v2.*,j.grade_level
FROM v2
JOIN job_grades j
ON v2.`ag` BETWEEN j.`lowest_sal` AND j.`highest_sal`;
查询平均工资最低的部门的信息
# 在视图的基础上创建新的视图
CREATE VIEW v3
AS
SELECT v2.department_id
FROM v2
WHERE v2.`ag`= (
SELECT MIN(v2.`ag`)
FROM v2
)
#根据新建的视图查询
SELECT d.*
FROM v3
JOIN departments d
ON v3.`department_id` = d.`department_id`
视图的好处:
1、重用sql语句
2、简化复杂的sql操作,不必知道它的查询细节
3、保护数据,提高安全性
视图修改
方式一:
create or replace view 视图名
as
查询语句
CREATE OR REPLACE VIEW v3
AS
方式二:
alter view 视图名
as
查询语句
ALTER VIEW v3
AS
视图的删除
语法
drop view 视图名,视图名,…
DROP VIEW v1,v2,v3;
查看视图
DESC v1;
SHOW CREATE VIEW v1;
视图的更新
不是修改视图的逻辑
1、可以实现插入数据,一般不在视图里面增删改
一下情况不能更新:
①具备包含分组,distinct,group py,having,union或者union all
②常量视图
③select中包含子查询
④join
⑤from一个不能更新的视图
⑥where子句的子查询引用了from子句中的表
对比视图和表
创建的关键字不同
视图不实际为数据开启占用空间,只是保存了sql逻辑,表占用实际的空间
表和视图都能进行增删改,但是视图一般不增删改