视图和索引

视图

  • 是一个虚拟表,介于表和结果集之间
--如果没有权限,登录sys管理员身份进行授权,使用完毕以后回收权限
GRANT DBA TO SCOTT;
REVOKE DBA FROM SCOTT;

--create or replace view 视图名 as select语句 [with read only];
create or replace view vw_emp_temp as select * from emp with read only;

select * from vw_emp_temp;

--drop view 视图名; 
drop view vw_emp_temp;
 
--查询公司中所有部门的经理人的平均工资最低的那个部门名称

--查询所有的经理人
select mgr from emp where mgr is not null;
--创建一个试图,存储所有经理人编号
create or replace view vw_emp_mgr as select mgr from emp where mgr is not null;
select * from vw_emp_mgr;
--对所有的经理人进行分组
select deptno
  from emp
 where empno in (select mgr from emp where mgr is not null)
 group by deptno;
--对每组所有的经理人进行求平局薪资,以组为单位(部门)
select deptno, avg(sal)
  from emp
 where empno in (select mgr from emp where mgr is not null)
 group by deptno;
--最低的那个部门的平均薪资值
select min(avg(sal))
  from emp
 where empno in (select mgr from emp where mgr is not null)
 group by deptno;
--哪一组的平均薪资与最低值相等,拿这个组的部门编号
select deptno
  from (select deptno, avg(sal) avg_sal
          from emp
         where empno in (select mgr from emp where mgr is not null)
         group by deptno)
 where avg_sal =
       (select min(avg(sal))
          from emp
         where empno in (select mgr from emp where mgr is not null)
         group by deptno);
--根据部门编号去部门表中找到部门名称
select dname
  from dept
 where deptno =
       (select deptno
          from (select deptno, avg(sal) avg_sal
                  from emp
                 where empno in (select mgr from emp where mgr is not null)
                 group by deptno)
         where avg_sal =
               (select min(avg(sal))
                  from emp
                 where empno in (select mgr from emp where mgr is not null)
                 group by deptno));
                 
--使用试图进行优化
select dname
  from dept
 where deptno =
       (select deptno
          from (select deptno, avg(sal) avg_sal
                  from emp
                 where empno in (select * from vw_emp_mgr)
                 group by deptno)
         where avg_sal =
               (select min(avg(sal))
                  from emp
                 where empno in (select * from vw_emp_mgr)
                 group by deptno)); 

索引

  • 数据库的对象之一,需要维护的,相当于字典的目录

  • 有没有添加索引,对于数据库中的表的使用完全没有影响,索引是透明的

  • 可以帮助我们提高查询效率

  • 大量的数据的频繁查询是有效,提高查询效率,如果大量做增删改,反而会降低效率

  • oracle会自动为表的主键添加索引

    --创建索引
    --create index 索引名 on表名 (字段列表...)
    create index emp_sal on emp(sal);
    --删除索引
    --drop index 索引名
    drop index emp_sal;
    --使用索引
    select * from emp where sal>1500;
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值