Oracle PL/SQL开发基础(第十弹:子查询)
来源:互联网 发布:java怎么判断奇数偶数 编辑:程序博客网 时间:2024/05/19 01:31
在编写SQL语句时,一些查询必须要基于另一个查询的结果才能完成数据的提取,这种查询的构造方式称为子查询。
比如,要获取emp表中比SMITH薪资高的人的列表,必须要构造两个查询,一个查询用来查询SMITH的薪资,另一个查询用来比较SMITH的薪资记录,获取比SMITH薪资高的人员列表:
SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename = 'SMITH');
子查询又分为两类:
- 相关子查询:相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。
- 非相关子查询:非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。
由于相关子查询在外部查询执行一次时,同时也要执行内部查询,因此非相关子查询的效率比相关子查询高。在使用子查询时,需要遵循如下的基本原则:
- 子查询放在圆括号中。
- 子查询放在比较条件的右边。
- 在单行子查询中用单行运算符,在多行子查询中用多行运算符。
非相关子查询
非相关子查询根据返回的结果又可以分为3类:
单行单列子查询
又称为标量子查询,通常与比较运算符比如=
、>
、<
、!=
、<=
、>=
联合使用。我们最上面举的SMITH薪资的例子就是单行单列子查询。
多行单列子查询
使用特定的关键字如IN,ANY和ALL来将外层查询的单个值与子查询的多行进行比较运算。如:
SELECT empno, ename, job, mgr, hiredate, sal, deptno FROM emp WHERE sal IN (SELECT MIN (sal) FROM emp GROUP BY deptno); SELECT empno, ename, job, mgr, hiredate, sal FROM emp WHERE sal > ALL (SELECT sal FROM emp WHERE job = 'CLERK') AND job <> 'CLERK';
<ANY
表示小于任意一个,即小于最大值。 >ANY
表示大于任意一个,即大于最小值。 =ANY
表示等于任意一个,即等同于IN。 <ALL
表示小于所有值,即小于最小值。 >ALL
表示大于所有值,即大于最大值。
ANY具有一个同义词SOME,具有与ANY一样的功能。
多列子查询
这种类型的子查询通常用来UPDATE语句中。
相关子查询
比如,想知道emp表中,薪资超过该员工所在部门的平均薪资的人员信息,则需要在内部查询中获取外部查询的部门编号,在子查询中计算部门平均值,再由外部查询进行比较,如:
SELECT e1.empno, e1.ename, e1.deptno FROM emp e1 WHERE e1.sal > (SELECT AVG (sal) FROM emp e2 WHERE e2.deptno = e1.deptno)ORDER BY e1.deptno
- Oracle PL/SQL开发基础(第十弹:子查询)
- Oracle PL/SQL开发基础(第六弹:简单查询)
- Oracle PL/SQL开发基础(第九弹:多表连接查询)
- Oracle PL/SQL开发基础(第三弹:修改表)
- Oracle PL/SQL开发基础(第四弹:索引)
- Oracle PL/SQL开发基础(第五弹:视图)
- Oracle PL/SQL开发基础(第十四弹:序列)
- Oracle PL/SQL开发基础(第十五弹:同义词)
- Oracle PL/SQL开发基础(第十六弹:记录类型)
- Oracle PL/SQL开发基础(第十七弹:集合类型)
- Oracle PL/SQL开发基础(第二十一弹:基本函数)
- Oracle PL/SQL开发基础(第三十三弹:EXCEPTION_INIT)
- Oracle PL/SQL开发基础(第三十四弹:RAISE_APPLICATION_ERROR)
- 【Oracle sql基础】子查询
- 第一章 Oracle PL/SQL开发基础---草稿
- [Oracle]高效的PL/SQL程序设计(二)--标量子查询
- [Oracle]高效的PL/SQL程序设计(二)--标量子查询
- [Oracle]高效的PL/SQL程序设计(二)--标量子查询
- xmlDTD语法
- XML语法
- SpringMVC中使用StandardServletMultipartResolver进行文件上传
- DOM和SAX解析方法的区别&&如何修改…
- jaxp的dom解析和sax解析
- Oracle PL/SQL开发基础(第十弹:子查询)
- 将博客搬至CSDN
- 常用端口
- 自己写的web服务器
- FloatingActionButton的使用
- Web应用组成结构
- Android环境搭建
- 在servlet中用outputStream输出中…
- Eclipse中tomcat的配置问题