视图

为什么需要视图

假设我们现在想要获取这样的一个结果:

​ 我想查询 员工编号, 员工姓名, 员工的经理编号, 经理的姓名

显示结果如下:

要想得到这样一个结果,我们需要编写的语句是这样的:

1
2
3
select e.empno ,e.ename ,e.mgr ,m.ename 
from emp e,emp m 
where e.mgr = m.empno;  

我们可以看到,这样一条语句非常的复杂,而且很长, 试想一下,假设我们要在很多地方都要用到它, 我们能不能对它进行封装呢? 😊

这里我们就可以考虑🤔使用视图啦!

视图介绍

  1. 视图其实就是将一条复杂的SQL查询语句封装成一张虚表!
  2. 视图本身不存储任何数据,所有的数据都存放在原来的表中, 可以把视图看做是逻辑上的一张表
  3. 当原始表中的数据,发生改变的时候, 视图查询出来的结果也会跟着发生变化

例如: 我们可以将上面复杂的查询语句,封装成一个名称为: v_test 的视图.

假设现在我还想得到上面的结果,那么我只需要从视图中查询就好啦!

1
2
select * from v_test;
-- 注意: from 后面我们写的是视图的名称

好啦! 关于视图,我们就先简单介绍到这里啦! 下面我们来介绍如何使用视图

创建视图

我们首先给大家介绍一下视图创建的语法,它有点类似我们之前创建数据库或者创建表的语法:

1
create view 视图的名称  as 查询语句;

在这里我们需要注意:

  1. 视图中的字段名称不能有重复的喔!
  2. 视图的名称最好以 v_ 开头

例如我们创建一个上面的视图:

1
2
3
4
5
create view v_test 
as 
select e.empno ,e.ename ,e.mgr ,m.ename mname
from emp e,emp m 
where e.mgr = m.empno;  

这样,我们就创建好啦一个视图啦!

查看视图

我们如何去查看我们这个数据库中有哪些视图呢?

这里给大家介绍一条命令!

1
show tables;  -- 没错, 就是它, 它不仅能列出所有的表,还能列出所有的视图呢!

使用视图

我们已经创建了v_test,那我们如何去使用它呢?

还记得我们前面所介绍的吗? 视图其实是一张虚表, 我们可以和查看表一样来查看视图

1
select * from v_test;

根据条件查询

1
select * from v_test where empno>7788;

试一试: 我们尝试修改原始表,来查看一下视图中的变化!

删除视图

这个操作和我们删除数据库和删除表是类似的,我们只需要执行如下命令即可:

1
2
3
drop view 视图的名称
例如:
drop view v_test; -- 它会将我们之前创建的视图删除掉

小结

  1. 视图可以将复杂的查询结果,在逻辑上封装成一张虚表
  2. 我们可以通过select * from 视图的方式快速获取到视图的内容
  3. 视图本身并不存储任何数据,它只是逻辑上是一张表,所有的数据都存放在原来的表中
  4. 通过视图,我们还能屏蔽真实的表名和一些字段,从而更加安全