目录
十八、视图(view)
1)什么是视图
1.视图在数据库管理系统中也是一个对象,也是以文件形式存在的;
2.视图也对应了一个查询结果,只是从不同的角度查看数据;
2)创建视图
1.语法结构:create view 视图名称 as 查询语句;
2.示例:从emp表中查询empno,ename,sal结果当作视图展示
Create view myview as select empno,ename,sal from emp;(创建视图)
Select * from myview;(查看视图)
3)删除视图
1.语法结构:drop view if exists 视图名称;
2.示例:删除myview视图
Drop view if exists myview;(删除视图)
4)修改视图
1.语法机构:alter view 视图名称 as 查询语句;
2.示例:将myview视图修改为empno,ename,sal;
Alter view myview as select empno,ename,sal from emp;(修改视图)
结论:对视图进行增删改查,会影响原表数据。(通过视图影响原表数据的,不是直接操作的原表)可以对视图进行CRUD操作;
5)面向视图操作
emp(原表)
emp_bak(复制原表emp)
myview1(复制视图表emp_bak中empno,ename,sal)
1.创建emp表视图
Create table 视图名称 as 查询表语句;
示例:创建emp表视图
Create table emp_bak as select * from emp;
2.从视图表emp_bak中创建empno,ename,sal视图
Create view myview1 as select empno,ename,sal from emp_bak;
3.视图myview1中编号为'7369'的姓名和工资修改为'yuan','889';
Update myview1 set ename='yuan',sal='889' where empno='7369';
结论:创建原表的视图,再由原表的视图来形成操作表,这样不会影响原表的数据,进行测试CRUD操作。
6)视图的作用
1.面向视图查询,可以提高查询效率
例如:
a)单独执行:select e.ename,d.dname from emp e join dept d on e.deptno=d.deptno;
b)将上面执行结果当作视图对象创建
Create view myview2 as select e.ename,d.dname from emp e join dept d on e.deptno=d.deptno;
Select * from myview2;
结论:视图可以隐藏表的实现细节。保密级别较高的系统,数据库只对外提供相关的视图,java程序员只对视图对象进行CRUD。
2.create view myview3 as select empno a,ename b,sal c from emp;
结论:面向视图查询,只知道myview3中有a,b,c三个字段,不知道该字段视图背后真实表结构是什么