为什么需要视图
求出平均工资最高的部门编号和部门的平均工资
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