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

单行单列

SELECT *

FROM emp

WHERE hiredate=(

  SELECT MIN(hiredate)

  FROM emp) ;

多行单列 (使用不多)

SELECT *

FROM emp

WHERE (sal,job)=(

  SELECT sal,job

  FROM emp

  WHERE ename='SCOTT')

  AND ename<>'SCOTT' ;

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

SELECT *

FROM emp

WHERE sal NOT IN (

  SELECT sal

  FROM emp

  WHERE job='MANAGER') ;

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

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

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

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

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

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

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

SELECT job,AVG(sal)

FROM emp

GROUP BY job

HAVING AVG(sal)=(

SELECT MIN(AVG(sal))

FROM emp

GROUP BY job

)

//分组函数嵌入太深错误
SELECT job,AVG(sal)
FROM emp
GROUP BY job
HAVING AVG(sal) = MIN(AVG(sal))

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

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

oracle 子查询 where having from ,from子查询提高效率的更多相关文章

  1. Oracle常用sql语句(三)之子查询

    子查询 子查询要解决的问题,不能一步求解 分为: 单行子查询 多行子查询 语法: SELECT select_list FROM table WHERE expr operator (SELECT s ...

  2. Rafy 中的 Linq 查询支持(根据聚合子条件查询聚合父)

    为了提高开发者的易用性,Rafy 领域实体框架在很早开始就已经支持使用 Linq 语法来查询实体了.但是只支持了一些简单的.常用的条件查询,支持的力度很有限.特别是遇到对聚合对象的查询时,就不能再使用 ...

  3. mysql(4)—— 表连接查询与where后使用子查询的性能分析。

    子查询就是在一条查询语句中还有其它的查询语句,主查询得到的结果依赖于子查询的结果. 子查询的子语句可以在一条sql语句的FROM,JOIN,和WHERE后面,本文主要针对在WHERE后面使用子查询与表 ...

  4. (5)MySQL的查询:模糊查询(通配符查询like)、限制符查询(limit)、排序查询(order by)、分组查询(group by)、(子查询)

    注意事项 指令语法的优先级: where > group by >order by > limit 例:select count(id) as cnt,age from tablen ...

  5. 子查询一(WHERE中的子查询)

    子查询 子查询就是指的在一个完整的查询语句之中,嵌套若干个不同功能的小查询,从而一起完成复杂查询的一种编写形式,为了让读者更加清楚子查询的概念. 子查询返回结果子查询可以返回的数据类型一共分为四种: ...

  6. ylb:SQL 表的高级查询-多表连接和子查询

    ylbtech-SQL Server: SQL Server-表的高级查询-多表连接和子查询 SQL Server 表的高级查询-多表连接和子查询. 1,ylb:表的高级查询-多表连接和子查询 返回顶 ...

  7. MySQL:记录的增删改查、单表查询、约束条件、多表查询、连表、子查询、pymysql模块、MySQL内置功能

    数据操作 插入数据(记录): 用insert: 补充:插入查询结果: insert into 表名(字段1,字段2,...字段n) select (字段1,字段2,...字段n) where ...; ...

  8. NX二次开发-UFUN查询对象的类型和子类型UF_OBJ_ask_type_and_subtype

    NX9+VS2012 #include <uf.h> #include <uf_obj.h> #include <uf_modl.h> #include <u ...

  9. oracle学习笔记(二)表的查询

    --oracle表的管理 --创建表 )); --删除表 drop table users; --创建表 ),xm ),sex ),birthday date,sal ,)); ),cnmae )); ...

  10. Oracle基础(五):多表查询

    一.多表查询 (一)简单多表查询 1.多表查询的机制 1)SQL: SELECT * FROM emp; --14条记录 SELECT * FROM dept;--4条记录 SELECT * FROM ...

随机推荐

  1. sql 中的注释

    1.单行注释 “-- ”  即:两个中滑线加一个空格 2.多行注释 "/* ... */" 示例: -- 单行注释 /* 多行注释*/ create table test(id i ...

  2. eclipse maven构建的java web工程项目 在修改了工程项目名时,tomcat启动异常java.lang.IllegalArgumentException: Can't convert argument:null

    问题 我修改了前一个项目的名称.重新启动该项目至tomcat,报错:Java.lang.IllegalArgumentException: Can't convert argument: null 因 ...

  3. ubuntu16.04安装网易云音乐

    源网址 对于网易,我只服云音乐,业界良心,用过的人都知道.我最喜欢的就是歌曲的评论功能,还有朋友圈子.里面有很多好段子,还有很多的好故事,基本上,不是分手,就是回忆初恋,还有吐槽的.我认为音乐带给人的 ...

  4. python及pandas,numpy等知识点技巧点学习笔记

    python和java,.net,php web平台交互最好使用web通信方式,不要使用Jypython,IronPython,这样的好处是能够保持程序模块化,解耦性好 python允许使用'''.. ...

  5. Vue2学习笔记:事件对象、事件冒泡、默认行为

    1.事情对象 <!DOCTYPE html> <html> <head> <title></title> <meta charset= ...

  6. Mysql压缩解决方案

    提到mysql压缩相关的内容,我们能想到的可能是如下几种和压缩相关的场景: 1.客户端和服务器之间传输的数据量太大,需要进行压缩,节约带宽 2.mysql某个列的数据量大,只针对某个列的数据压缩 3. ...

  7. 转:Eclipse+webservice开发实例

    原文地址:http://blog.csdn.net/xw13106209/article/details/7049614 1.参考文献: 1.利用Java编写简单的WebService实例  http ...

  8. 转:ClickOnce部署Winform程序的方方面面

    1. ClickOnce简介 微软官方对ClickOnce的解释是:ClickOnce 是一项部署技术,您可以利用这项技术来创建基于 Windows 的自行更新的应用程序,并且安装和运行这类应用程序所 ...

  9. UITextField使用的一些细节

    UITextField使用的一些细节 这篇博文是我自己使用UITextField的一些总结,并没有太多营养,并会持续更新. 2014.9.15 ---------------------------- ...

  10. 制作MacOS 系统启动盘

    1,首先需要在一台有MacOS系统,在Apple stroe下载MacOS High Sierra安装程序: 2,准备一个至少8G容量的U盘: 3,打开 “应用程序 → 实用工具 → 磁盘工具”,将U ...