MENU

视图

June 16, 2018 • Read: 3442 • SQL阅读设置

为什么需要视图

求出平均工资最高的部门编号和部门的平均工资

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
Last Modified: October 19, 2018
Archives Tip
QR Code for this page
Tipping QR Code