经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Oracle » 查看文章
oracle 子查询 where having from ,from子查询提高效率
来源:cnblogs  作者:xianting  时间:2019/3/26 8:39:49  对本文有异议

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

单行单列

  1. SELECT *
  2.  
  3. FROM emp
  4. WHERE hiredate=(
  5.   SELECT MIN(hiredate)
  6.   FROM emp) ;

多行单列 (使用不多)

  1. SELECT *
  2.  
  3. FROM emp
  4. WHERE (sal,job)=(
  5.   SELECT sal,job
  6.   FROM emp
  7.   WHERE ename='SCOTT')
  8.   AND ename<>'SCOTT' ;

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

  1. SELECT *
  2.  
  3. FROM emp
  4. WHERE sal NOT IN (
  5.   SELECT sal
  6.   FROM emp
  7.   WHERE job='MANAGER') ;

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

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

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

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

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

· <ALL:比子查询最小值还要小

 

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

  1. SELECT job,AVG(sal)
  2. FROM emp
  3. GROUP BY job
  4. HAVING AVG(sal)=(
  5. SELECT MIN(AVG(sal))
  6. FROM emp
  7. GROUP BY job
  8. )
  9. //分组函数嵌入太深错误
  10. SELECT job,AVG(sal)
  11. FROM emp
  12. GROUP BY job
  13. HAVING AVG(sal) = MIN(AVG(sal))

FROM 子句的主要功能是确定数据来源,而且数据来源应该都是数据表,表是一种行列的集合。所以就证明如果在
FROM 子句里面出现的子查询,其返回的结果一定是多行多列数据。

  1. SELECT d.deptno,d.dname,d.loc,temp.count,temp.avg
  2. FROM dept d , (
  3. SELECT deptno ,COUNT(empno) count,AVG(sal) avg
  4. FROM emp
  5. GROUP BY deptno) temp
  6. WHERE d.deptno=temp.deptno(+) ;
  1. SELECT d.deptno,d.dname,d.loc,COUNT(empno) count,AVG(sal) avg
  2. FROM dept d ,emp e
  3. WHERE d.deptno=e.deptno(+)
  4. 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 子句里面使用子查询,是因为在外部查询里无法再继续使用统计函数操作的时

原文链接:http://www.cnblogs.com/xianting/p/10593381.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号