oracle 子查询速度,oracle 子查询 where having from ,from子查询提高效率,oraclehaving...

oracle 子查询 where having from ,from子查询提高效率,oraclehaving

where 子查询主要功能是控制数据行的,返回结果一般都是单行单列、多行单列、单行多列数据

单行单列

SELECT *

FROMempWHERE hiredate=(SELECT MIN(hiredate)FROM emp) ;

多行单列 (使用不多)

SELECT *

FROMempWHERE (sal,job)=(SELECTsal,jobFROMempWHERE ename='SCOTT')AND ename<>'SCOTT' ;

多行单列 使用三个判断符号:IN、ANY、ALL

SELECT *

FROMempWHERE sal NOT IN(SELECTsalFROMempWHERE job='MANAGER') ;

此时有一个需要注意的小问题了:在使用 NOT IN 的时候子查询之中必须不能包含 null,否则不会有任何数据返回。

· =ANY:此功能与 IN 操作完全一样

· >ANY:比子查询的最小值要大;

·

· >ALL:比子查询返回的最大值还要大

·

在 HAVING 子句之中使用子查询只能够返回单行单列的数据

SELECT job,AVG(sal)FROMempGROUP BYjobHAVING AVG(sal)=(SELECT MIN(AVG(sal))FROMempGROUP BYjob

)//分组函数嵌入太深错误SELECT job,AVG(sal)FROMempGROUP BYjobHAVING AVG(sal) = MIN(AVG(sal))

FROM 子句的主要功能是确定数据来源,而且数据来源应该都是数据表,表是一种行列的集合。所以就证明如果在

FROM 子句里面出现的子查询,其返回的结果一定是多行多列数据。

SELECT d.deptno,d.dname,d.loc,temp.count,temp.avg

FROMdept d , (SELECT deptno ,COUNT(empno) count,AVG(sal) avg

FROMempGROUP BY deptno) temp

WHERE d.deptno=temp.deptno(+) ;

SELECT d.deptno,d.dname,d.loc,COUNT(empno) count,AVG(sal) avg

FROMdept d ,emp eWHERE d.deptno=e.deptno(+)GROUP BY d.deptno,d.dname,d.loc

多字段分组和from子查询的区别?

即:此时 emp 表之中存在有 14000 条数据,dept 表中存在有 4000 条数据。

多表查询一定会产生笛卡儿积

多字段分组:积的数量:emp 的 14000 条 * dept 的 4000 条 = 56,000,000 条数据;

from子查询:

|- 第一步(内嵌子查询):针对于 emp 表查询,最多操作 14000 条记录,最多返回 4000 条记录;

|- 第二步,子查询和 dept 表关联;

|- 积的数量:dept 表的 4000 条 * 子查询返回的最多 4000 条 = 16000000 条记录;

|- 总的数据量:16000000 + 14000 = 16,014,000 条记录

主要目的:子查询的出现主要是为了解决多表查询之中的性能问题。

次要目的:很多时候在 FROM 子句里面使用子查询,是因为在外部查询里无法再继续使用统计函数操作的时

736f3a4546a343ce9aaa66bb6de35416.png

http://www.dengb.com/oracle/1341952.htmlwww.dengb.comtruehttp://www.dengb.com/oracle/1341952.htmlTechArticleoracle 子查询 where having from ,from子查询提高效率,oraclehaving where子查询主要功能是控制数据行的,返回结果一般都是单行单列、多行单列、...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值