mysql-15-view
#视图
/*
含义:虚拟表,和普通表一样使用。通过表动态生成的数据
只保存了sql逻辑,不保存查询结果
应用场景:
1、多个地方用到同样的查询结果
2、该查询结果使用的sql语句较为复杂
*/
USE students;
show tables;
#案例:查询姓张的学生名和专业名
select stu_name, major_name
from stuinfo as s
inner join major m on s.major_id = m.id
where s.stu_name like '张%';
# 用视图来实现
# 创建视图
create view v1 as
select stu_name, major_name
from stuinfo as s
inner join major m on s.major_id = m.id;
#使用视图
select * from v1
where stu_name like '张%';
#一、创建视图
/*
语法:
create view 视图名 as
查询语句;
*/
USE myemployees;
#案例1:查询姓名中包含a字符的员工名、部门名和工种信息
create view myv1 as
select last_name,department_name, job_title
from employees as e
inner join departments as d on e.department_id = d.department_id
inner join jobs as j on j.job_id = e.job_id;
select * from myv1
where last_name like '%a%';
#案例2:查询各个部门的平均工资级别
#1、创建视图查看各个部门的平均工资
create view myv2 as
select avg(salary) as ag, department_id
from employees
group by department_id;
#2、使用视图查询对应的级别
select myv2.ag, g.grade_level
from myv2
inner join job_grades as g
on myv2.ag between g.lowest_sal and g.highest_sal;
#案例3:查询平均工资最低的部门信息
select * from myv2
order by ag
limit 1;
#案例4:查询平均工资最低的部门名和工资
create view myv3 as
select * from myv2 order by ag limit 1;
select e.salary, d.department_name
from myv3
inner join employees as e on myv3.department_id = e.department_id
inner join departments as d on myv3.department_id = d.department_id;
#二、视图的修改
/*
方式一
create or replace view 视图名 as
查询语句;
方式二
alter view 视图名 as
查询语句;
*/
#三、删除视图
/*
drop view 视图名, 视图名, ... ;
*/
#四、查看视图
desc myv3;
show create view myv3;
#五、视图的更新
#可以更新,并且会更改原始表。但一般只用于查询
create or replace view v1 as
select last_name, email
from employees;
select * from v1;
#1、插入
insert into v1
values('张飞', 'zf@qq.com');
#2、修改
update v1 set last_name='张无忌' where last_name='张飞';
#3、删除
delete from v1 where last_name='张无忌';
#当视图中含有分组groupby、联结join、子查询、并、聚集函数、distinct、导出(计算列)时,不能更新
----想成为合格的算法工程师----

浙公网安备 33010602011771号