MySQL:视图

MySQL:视图

介绍

  一种虚拟存在的表,和普通表一样使用

  行和列的数据来自定义视图的查询中使用的表,并且是使用视图时动态生成,只保存了sql逻辑不保存查询结果

  mysql5.1版本出现的新特性,是通过表动态生成的数据。

应用场景

  • 多个地方用到同样的查询结果
  • 该查询结果使用的sql语句较复杂
  • 重用sql语句
  • 简化复杂的sql操作,不必知道他的查询细节
  • 保护数据,提高安全性

创建视图

create view 视图名
as
查询语句;

 案例

# 案例1: 查询有相中包含a字符的员工名、部门名、工种信息
# 创建视图
create view myv1
as 
select name,department,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 * form myv1 where name like '%a%';

# 案例2: 查询各部门的平均工资级别
create view myv2
as 
select avg(salary) ag,department_id 
from employees
group by departmetn_id;

select myv2.`ag`,g.grage_level
from myv2
join job_grades 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 d.*,m.ag
from myv3 m
join departments d
on m.`department_id`=d.`department_id`;

 修改视图

# 方式1
create or replace view 视图名
as
查询语句;

# 方式2
alter view 视图名
as
查询语句;

删除视图

drop view 视图名1,视图名2...

查看视图

#方式1, 推荐
desc myv3;

# 方式2
show create view myv3\G;  # \G格式化输出

案例

# 案例1  创建视图emp_v1, 要求查询电话号码以 "011"开头的员工姓名和工资,邮箱
create or replace view emp_v1
as 
select name,salary,email
from employees
where phone_num link "011%";

# 案例2    创建视图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;

select d.*,m.mx_dep
from departments d
join emp_v2 m
on m.department_id=d.department_id;

视图的更新

  视图的可更改性和试图中查询的定义有关系,一下类型的视图是不能更新的。

    • 包含以下关键字的sql语句:分组函数,distinct, group by, having, union, union all
    • 常量视图
    • select 中包含子查询
    • join
    • from 一个不能更新的视图
    • where子句的子查询引用了from子句中的表
/*
create view myv1
as 
select name,email
from employees;

1. 插入: 有些情况可以成功,有些情况不会成功,也不报错;
insert into myv1 values();

2. 修改
update myv1 set name='jhon' where name='Mary'

3. 删除
delete from myv1 where name='jhon';
*/

视图和表

  创建语法 占用物理空间 使用
视图 create view 只是保存了sql逻辑 增删改查,一般不能增删改
create table 保存了数据 增删改查

 

 


 

posted @ 2020-11-12 14:48  徘徊的游鱼  阅读(91)  评论(0编辑  收藏  举报