【转】ORACLE中的子查询 ---OCP--047--46

“子查询”就是查询中嵌套着另一个查询,也即通过SELECT语句的嵌套使用形成子查询。当我们不知道特定的查询条件时,可以用子查询来为父查询提供查询条件以获得查询结果。
ORACLE中常见的子查询有下面几类:
A、单行子查询(Single-row subqueries)。
B、多行子查询(Multirow subqueries)。
C、内部视图型子查询(Inline views)。
D、多列子查询(Multiple-column subqueries)。
在我们继续详细讨论子查询之前,先看看写子查询的一些特别要注意的地方:
A、子查询必须放在括号内。
B、子查询也必须放在比较操作符号的右边。
C、子查询最多可以嵌套到255级。
子查询中不能使用ORDER BY子句,即ORDER BY必须位于查询的最外层。 
一、单行子查询(Single-Row Subqueries)
单行子查询并不是最后输出的结果只能返回一行,而是指子查询只能返回一行。
有一条规则我们必须记住:
当我们用“等于”比较操作符把子查询和父查询嵌套在一起时,父查询期望从子查询那里只得到一行返回值。
例一:

SELECT ename,deptno,sal FROM EMP
WHERE deptno=(SELECT deptno FROM dept WHERE loc=’New York’);

 

在这个例子中,如果子查询“SELECT deptno FROM dept WHERE loc=’New York’”只返回一行,则这个例子能正确运行,否则将出错。原因见前面规则。
其它一些表明是单行子查询的比较操作符有“>,>=,<,<=,<>”。
  
二、多行子查询(Multirow Subqueries)
多行子查询,意味着子查询返回的结果子集可以是多行。因此,我们通常用集合比较操作符(如:IN, NOT IN)把父查询和子查询连接起来。   
例二:

SELECT ename,job,sal FROM EMP
WHERE deptno in ( SELECT deptno FROM dept WHERE dname LIKE ‘A%’);

 

三、多列子查询(Multiple-Column Subqueries):
前面两个例子中,主查询的WHERE子句中都只有一列。然而,有时需要主查询处理多列。例如,为了得到每个部门工资最高的员工信息,可以使用下面的例子。  
例三:

SELECT deptno,ename,job,sal FROM EMP
WHERE (deptno,sal) IN (SELECT deptno,MAX(sal) FROM EMPGROUP BY deptno);

 

     在使用多列子查询时必须注意:
A、 主查询中,必须把WHERE子句中需要的多个列用括号括起来,否则发生错误。
B、 主查询WHERE子句中的列与子查询中返回的列必须匹配。

四、内联视图子查询(inline view Subqueries):
通常的查询中,FROM子句后面都是具体的表名。然而,我们也可以在FROM后面跟上一个子查询作为中间
数据结果集,这个中间结果集就是内联视图(inline view)。带有内联视图的子查询就是内联视图子查
询。
例四:
    SELECT ename,job,sal,rownum 
 FROM (SELECT ename,job,sal FROM EMP ORDER BY sal);
从这个例子我们应该注意到:
FROM子句后面的内联视图是可以使用ORDER BY子句进行排序的。然而,其它视图或子查询是不能用ORDER 
BY进行排序的。
另外,我们在内联视图可以排序的基础上,可以使用“TOP-N”查询得到一些有意义的结果集。例如,可
以用下面的例子在EMP表中找出工资最低的五个员工的信息。
例五:

SELECT ename,job,sal,rownum      ---Rownum是表内部的一个指示行号的列
FROM ( SELECT ename,job,sal FROM EMP ORDER BY sal)WHERE rownum<=5;           

 

五、到此,我们已经了解了四类子查询,但在使用子查询时还要注意以下几点:    
A、 在HAVING子句中也可以使用子查询。
例:

SELECT deptno,job,AVG(sal) FROM EMP
GROUP BY deptno,job
HAVING AVG(sal)>(SELECT sal FROM EMP WHERE ename=’MARTIN’);

 

B、 在一些比较复杂的子查询中,可能需要多次处理同一个子查询,为了优化这一步骤,ORACLE9i引入了“WITH”子句来提高这类子查询的性能。
例:

    SELECT dname,SUM(sal) AS dept_totalFROM EMP,DEPTWHERE EMP.deptno=DEPT.deptnoGROUP BY dnameHAVING SUM(sal)>(SELECT SUM(sal)*1/3FROM EMP,DEPTWHERE EMP.deptno=DEPT.deptno)ORDER BY SUM(sal) DESC;

 

显然,子查询“SELECT SUM(sal) FROM EMP,DEPT WHERE EMP.deptno=DEPT.deptno”处理了两次。因此,可以利用O9i中的下来语法来改善性能:

 WITH summary AS( SELECT dname,SUM(sal) AS dept_total
      FROM EMP,DEPTWHERE EMP.deptno=DEPT.deptnoGROUP BY dname )SELECT dname,dept_total FROM summaryWHERE dept_total>(SELECT SUM(dept_total)*1/3 FROM summary)ORDER BY dept_total DESC;   

 


C、在一些子查询操作,诸如数据分组,可能会产生空值。然而,在子查询把这些数据集返回给主查询时又会忽略空值。因此,应特别小心这种情况。

转载于:https://www.cnblogs.com/Peyton-for-2012/archive/2013/01/10/2855065.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400934.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第5讲++创建管理数据库

实例 create database db on (namedb51,filenameD:\xxx\db51.mdf,size100,maxsize200,filegrowth20 ), (namedb52,filenameD:\xxx\db52.ndf,size100,maxsize200,filegrowth20 ), (namedb53,filenameD:\xxx\db53.ndf,size100,maxsize200,filegrowth20 ) log on (namedb5log1,fi…

R数据分析:如何简洁高效地展示统计结果

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

实现权重计算

今天试图实现内部点权重的计算。在论文中&#xff0c;权重的计算过程是这样的:其中solveNNLS是求解这个方程s为表面点&#xff0c;q为内部点发现两种方法&#xff1a;1.一种是把内部点位置表示成表面点的线性组合2.另一种是把内部点的位移表示成表面点的线性组合第2种可以化成内…

Android LBS系列05 位置策略(一)

Location Strategies 定位的实现 在Android系统上实现定位主要是通过GPS或者是基于网络的定位方法。 GPS是精度最高的&#xff0c;但是它只在户外有用&#xff0c;并且很耗电&#xff0c;并且首次定位花费时间较长。 基于网络的定位利用通信网络蜂窝基站和Wi-Fi信号&#xff0c…

使用并查集解决的相关问题

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

ABP官方文档翻译 3.1 实体

实体 实体类聚合根类 领域事件常规接口 审计软删除激活/失活实体实体改变事件IEntity接口实体是DDD(领域驱动设计)的核心概念之一。Eric Evans描述它为"An object that is not fundamentally defined by its attributes, but rather by a thread of continuity and identi…

目标检测之线段检测---lsd line segment detector

&#xff08;1&#xff09;线段检测应用背景 &#xff08;2&#xff09;线段检测原理简介 &#xff08;3&#xff09;线段检测实例 a line segment detector &#xff08;4&#xff09;hough 变换和 lsd 的区别 ---------------------author&#xff1a;pkf ------------------…

struts:file 提交给action后获取文件信息

参考&#xff1a; 1&#xff09;http://gemini.iteye.com/blog/67712 2&#xff09;http://bbs.csdn.net/topics/320228159 转载于:https://www.cnblogs.com/lpshou/archive/2013/01/15/2861581.html

利用Mac创建一个 IPv6 WIFI 热点

标签&#xff1a; iOSIPv6Create NAT64 NetWork创建NAT64网络2016-05-20 10:58 14156人阅读 评论(11) 收藏 举报分类&#xff1a;开发技巧&#xff08;8&#xff09; 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 苹果商店6月1日起&#xff0c;强…

SQL2000 MD5加密

原文:SQL2000 MD5加密 /***************************************************************************** * Name: T-SQL MD5算法实现 * Author: Rambo Qian * Create Date: 2003-04-10 * Last Modified by: Rambo Qian * Last Update Date: 2003-04-16 * Version: V1.…

经典电影

那些经典的电影&#xff0c;第一波&#xff01;&#xff01; 《怦然心动》&#xff0c;欧美电影——布莱斯全家搬到小镇&#xff0c;邻家女孩朱丽前来帮忙。她对他一见钟情&#xff0c;心愿是获得他的吻。两人是同班同学&#xff0c;她一直想方设法接近他&#xff0c;但是他避之…

go-zero 微服务实战系列(一、开篇)

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

大数据时代,怎么做全渠道的营销

大数据时代,怎么做全渠道的营销 营销在中国有很多变化&#xff0c;1978年之前主要是计划经济的时代&#xff0c;寻求政府的保护。1984年进入商品经济之后&#xff0c;中国企业通过大规模的扩大生产&#xff0c;扩大工厂得到生产效率。1992年进入市场经济之后&#xff0c;会涌现…

oracle slient静默安装并配置数据库及仅安装数据库不配置数据库shell

oracle slient静默安装并配置数据库及仅安装数据库不配置数据库shell <1&#xff0c;>仅安装数据库软件不配置数据库 ./x86oracle.sh /ruiy/ocr/DBSoftware/app/oracle /ruiy/ocr/DBSoftware/app/oraInventory /ruiy/ins_soft.rsp <2&#xff0c;>静默安装数据库软…

hdu 2048 神、上帝以及老天爷

题解&#xff1a; 本题主要思路是&#xff0c;算出i个人的总选择数a和以悲剧结尾的总选择数b&#xff0c;然后b/a&#xff0c;完成。属于递推题&#xff1a; 图中横杠代表人&#xff0c;竖杠代表签名。Ai代表i个人共有A[i]个选择&#xff0c;Bi起过度作用。因为最多有20人&…

探究Presto SQL引擎(3)-代码生成

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

Linux下Samba服务器的安装和配置

第一步&#xff1a;sudo apt-get install samba smbclient 安装samba服务器。 第二步&#xff1a;打开/etc/samba/smb.conf文件&#xff0c;在末尾添加下面的字段&#xff1a; [用户名] comment 用户名 path /home/用户名 writable yes 第三步&#xff1a;为samba服务器添加…

fatal error C1083:无法打开包括文件:“stdint.h”: No such file or directory解决方案

stdint.h文件是C99的标准头文件&#xff0c;默认情况下VC是不支持的&#xff0c;所以在使用过程中肯定会碰到 "No such file or directory"的问题。解决办法 1.从网盘上下载一个源码文件网盘链接 &#xff08;提取码&#xff1a;5c42&#xff09; 2.将内部包含的几个…

HTML文本框样式大全

输入框景背景透明&#xff1a;<input style"background:transparent;border:1px solid #ffffff"> 鼠标划过输入框&#xff0c;输入框背景色变色&#xff1a;<INPUT value"Type here" NAME"user_pass" TYPE"text" SIZE"2…

【学习笔记】计算几何

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…