为什么需要视图展开目录
求出平均工资最高的部门编号和部门的平均工资
- select * from (
- select deptno ,avg(sal) "avg_sal"
- from emp
- group by deptno
- ) T
- where T.avg_sal = (
- select max(E.avg_sal) from(
- select deptno,avg(sal) "avg_sal"
- from emp
- group by deptno
- ) E
- )
很明显上面代码有很多重复的地方,我们可以把这个重复查询的表,单独生成一个临时表,或者也叫视图,以后每次查询就可以直接引用视图的名字
- create view V_emp_1
- as
- select deptno,avg(sal) "avg_sal"
- from emp
- group by deptno
- go
- select * from V_emp_1
- where avg_sal = (select max(avg_sal) from V_emp_1)
这一段代码明显就简洁多了
什么是视图展开目录
从代码上看,视图就是个 select 语句
从逻辑上看,视图就是一个临时表
视图的格式展开目录
- create view 视图的名字
- as
- --这里不能加begin
- select 语句
- --这里不能加end
视图的优点展开目录
简化查询
增加数据的保密性(只把临时表给用户访问,而管理员可以指定原表中的哪些字段组成临时表)
视图的缺点展开目录
增加了数据维护的成本(如果删除了原始表或者原始表中的某些字段,下次使用就会报错)
可以简化查询,但是不能加快查询
注意的问题展开目录
创建视图的 select 语句必须为所有的计算列指定别名
- --error
- create view V_1
- as
- select avg(sal) from emp
-
- --right
- create view V_1
- as
- select avg(sal) "avg_sal" from emp