0、说明
视图的优缺点啥的就不多做评判了,网上随便搜下都是。
我这边简单理解其主要用在查询,例如经常要用到某个比较复杂的查询语句来获取指定的数据内容,可以将其查询语句定义到一个视图中,以后直接查询该视图就相当于执行了那串复杂的查询语句来查询数据;就相当于shell脚本中,定义了一个函数,函数体内包含了许多命令,之后调用该函数就相当于执行了函数体内的那些命令一样。
1、标准视图创建语法
1 2 3 |
CREATE [FORCE | NOFORCE] [OR REPLACE] VIEW 视图名称 [(别名1 , 别名2 ,...)] AS 子查询; |
FORCE: 表示要创建视图的表不存在也可以创建视图。
NOFORCE: (默认)表示要创建视图的表必须存在,否则无法创建。
OR REPLACE: 表示视图的替换,如果创建的视图不存在则创建新的,如果视图已经存在,则将其进行替换。
别名: 用来替换显示查询结果的列名称。
2、示范创建一个基础的标准视图,然后再调用该视图进行查询
1 2 3 4 |
#创建一个名为v_emp_all的视图,其包含一条简单的查询语句(查询scott用户下emp表的所有数据) CREATE VIEW v_emp_all AS SELECT * FROM scott.emp |
1 2 |
#调用刚才创建的v_emp_all视图进行查询 SELECT * FROM v_emp_all |
执行结果如下图所示
3、接下来我们创建一个相对复杂点的视图
首先我们直接使用SQL语句来进行查询
1 2 3 4 5 6 |
#查询emp表的ename列和job列以及dept表的dname列并定义列显示别名 SELECT emp.ename AS 姓名 , dept.dname AS 部门名称 , emp.job AS 职位 FROM scott.emp , scott.dept WHERE emp.deptno=dept.deptno |
执行结果如下
像上面所示的相对比较长一点的查询语句,如果需要使用的次数比较多,我们每次调用都输入那么长还是比较麻烦的。这时就可以将上述SQL语句定义到视图里面,以后直接查询视图名称即可。
1 2 3 4 5 6 7 8 |
#创建名为v_imzcy的视图,如果存在重名视图则替换其内容。并为下面查询的三个列定义了别名 CREATE OR REPLACE VIEW v_imzcy (姓名 , 部门名称 , 职位) AS SELECT emp.ename , dept.dname , emp.job FROM SCOTT.EMP , SCOTT.DEPT WHERE scott.emp.deptno=scott.dept.deptno |
调用上面创建的视图进行查询,如下图所示(查询结果和上面使用那么长SQL语句查询出来的一样,并且只需要简短的一段查询语句调用视图即可)
4、操作视图
1 2 3 4 5 |
#1、查询当前用户下所有视图 SELECT * FROM user_views; #2、删除视图 DROP VIEW v_imzcy; |