oracle 子查询 where having from ,from子查询提高效率
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子查询提高效率的更多相关文章
- Oracle常用sql语句(三)之子查询
子查询 子查询要解决的问题,不能一步求解 分为: 单行子查询 多行子查询 语法: SELECT select_list FROM table WHERE expr operator (SELECT s ...
- Rafy 中的 Linq 查询支持(根据聚合子条件查询聚合父)
为了提高开发者的易用性,Rafy 领域实体框架在很早开始就已经支持使用 Linq 语法来查询实体了.但是只支持了一些简单的.常用的条件查询,支持的力度很有限.特别是遇到对聚合对象的查询时,就不能再使用 ...
- mysql(4)—— 表连接查询与where后使用子查询的性能分析。
子查询就是在一条查询语句中还有其它的查询语句,主查询得到的结果依赖于子查询的结果. 子查询的子语句可以在一条sql语句的FROM,JOIN,和WHERE后面,本文主要针对在WHERE后面使用子查询与表 ...
- (5)MySQL的查询:模糊查询(通配符查询like)、限制符查询(limit)、排序查询(order by)、分组查询(group by)、(子查询)
注意事项 指令语法的优先级: where > group by >order by > limit 例:select count(id) as cnt,age from tablen ...
- 子查询一(WHERE中的子查询)
子查询 子查询就是指的在一个完整的查询语句之中,嵌套若干个不同功能的小查询,从而一起完成复杂查询的一种编写形式,为了让读者更加清楚子查询的概念. 子查询返回结果子查询可以返回的数据类型一共分为四种: ...
- ylb:SQL 表的高级查询-多表连接和子查询
ylbtech-SQL Server: SQL Server-表的高级查询-多表连接和子查询 SQL Server 表的高级查询-多表连接和子查询. 1,ylb:表的高级查询-多表连接和子查询 返回顶 ...
- MySQL:记录的增删改查、单表查询、约束条件、多表查询、连表、子查询、pymysql模块、MySQL内置功能
数据操作 插入数据(记录): 用insert: 补充:插入查询结果: insert into 表名(字段1,字段2,...字段n) select (字段1,字段2,...字段n) where ...; ...
- NX二次开发-UFUN查询对象的类型和子类型UF_OBJ_ask_type_and_subtype
NX9+VS2012 #include <uf.h> #include <uf_obj.h> #include <uf_modl.h> #include <u ...
- oracle学习笔记(二)表的查询
--oracle表的管理 --创建表 )); --删除表 drop table users; --创建表 ),xm ),sex ),birthday date,sal ,)); ),cnmae )); ...
- Oracle基础(五):多表查询
一.多表查询 (一)简单多表查询 1.多表查询的机制 1)SQL: SELECT * FROM emp; --14条记录 SELECT * FROM dept;--4条记录 SELECT * FROM ...
随机推荐
- maven 安装下载与配置 代理设置 《解决下载慢问题》
maven:下载地址http://mirror.bit.edu.cn/apache/maven/maven-3/ 解压之后配置环境 %maven_home% d:\*****path 中添加 %ma ...
- PowerDesigner 常用配置修改
PowerDesigner中Name与Code同步的问题 转自:http://blog.sina.com.cn/u/48932504010005t9 PowerDesigner中,但修改了某个字段的n ...
- Android Service不能再详细的教程
这篇包含了: Service后台服务.前台服务.IntentService.跨进程服务.无障碍服务.系统服务 几乎所有Android Service相关的东西. 前言 作为四大组件之一的Service ...
- 强网杯2018 pwn复现
前言 本文对强网杯 中除了 2 个内核题以外的 6 个 pwn 题的利用方式进行记录.题目真心不错 程序和 exp: https://gitee.com/hac425/blog_data/blob/m ...
- RecyclerView分隔线定制
分割线我们利用RecyclerView的addItemDecoration(ItemDecoration fromHtml) 新建一个类来看看到底是什么: public class CategoryI ...
- Error:Execution failed for task ':app:preDebugAndroidTestBuild'.错误解决
在新建布局文件的时候,页面显示: design editor is unavailable until a successful build(设计编辑器不可用,直到成功创建.) 细看下面还有一行错误: ...
- Oracle EBS 更新客户地点
--更新客户地点 declare x_return_status ); x_msg_count NUMBER; x_msg_data ); x_profile_id NUMBER; l_locatio ...
- RHEL7系统管理之资源管理
1. CGroup(控制群组).slice(切片).scop.service 控制群组(control group)是linux kernel的一项功能, 该功能允许linux对RHEL7中syste ...
- 理解 Linux 的平均负载和性能监控
在本文中,我们将解释 Linux 系统中最关键的管理任务之一——关于系统 / CPU 的负载load和平均负载Load average的性能监控. 首先来看所有的类 UNIX 系统中两个重要的表述 ...
- C#获取文件路径的几种方法
//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称. string str5=Application.StartupPath;//可获得当前执行的exe的文件名. string str1 ...