视图: 虚拟表存储的是SQL语句,从真实数据表中获取数据。
创建视图:
create view view_name as 查询语句;
create view my_v1 as
select last_name,department_name,job_title
from employess e
join departments d on e.department_id = d.epartment_id
join jobs j on j.job_id = e.job_id;
使用视图my_v1
select * from my_v1 where last_name like '%a%';
案例2:
查询各部门的平均工资级别
创建视图
create view my_v2 as
select avg(salary) ag,department_id
from employees
group by department_id;
使用视图
select * from my_v2.ag, g.grade_level
from my_v2 join job_grades g
on my_v2.ag between lowest_sal and g.highest_sal;
二,视图的修改
create or replace view view_name as 查询语句;
方式一:
create OR replace view my_v2 as
select avg(salary) ,job_id from employees
group by job_id;
方式二:
alter view view_name as 查询语句;
alter view my_v2 as select * from employees;
三、 删除视图
drop view view_name,view_name2,......................;
四、查询视图结构
desc view_name;
show create view view_name;
五、视图的更新
create or replace view my_v5 as
select last_name.email,salary*12*(1+ifnull(commission_pct,0)) ""
1、插入
insert into my_v5 values('张三丰',’zsf@123.com'); U原始表也进行了更新)
2、修改 (原始表也进行了更新)
update my_v5 set
3、删除
delete from my_v5 where
六、具备以下特点的视图是不允许更新:
- 包含以下关键字的sql语句: 分组函数、distinct、group by、 having 、union 或union all
- 常量视图
- select 中包含子查询
- 包含连接查询(或关联查询)join 或where a.id=b.id
- from 一个不能更新的视图;
- where字句的子查询引用了from字句中的表
create or replace view myv6 as
select last_name,email,salary
from employees
where employee_id in ( select manage_id from employees where manager_id is not null);
八、实操
create or replace view view_v2 as select last_name,salary,email from
employees where phone_num like '129%';
2、
create or replace view emp_v4 as
select d.max(salary), department_id from employees
group by department_id
having max(salary) > 12000;