设为首页 收藏本站
查看: 934|回复: 0

[经验分享] Oracle的子查询

[复制链接]

尚未签到

发表于 2016-7-18 08:45:15 | 显示全部楼层 |阅读模式
 子查询

一、子查询概念 :当一个查询的结果是另一个查询的条件时,称之为子查询。

二、使用子查询注意事项:

子查询可以嵌套多层
查询需要圆括号()括起来
三、子查询语法:

SELECT select_list 

FROM table 

WHERE expr operator

(SELECT select_list 

   FROM table);

子查询 (内查询) 在主查询之前一次执行完成。
子查询的结果被主查询使用 (外查询)。
举例:查询员工的工资大于JONES的员工信息

分析过程如下:

首先:查询JONES的员工工资是多少 :结果2975

SQL> select sal from emp where ename='JONES';

实际上我们要查询的是:薪资大于2975的员工的信息写法如下:

SQL> select * from emp where sal>2975;

综合以上写出子查询的结果如下:

SQL> select * from emp where sal>(select sal from emp where ename='JONES');

注意:

子查询要包含在括号内。 
将子查询放在比较条件的右侧。

四、根据查询的结果(内部嵌套查询的结果)把子查询的类型分为单行子查询与多行子查询,

     注意:

单行操作符对应单行子查询,多行操作符对应多行子查询。
单行操作符

>、>=、 <、 <= 、<>、=

  举例:

查询编号7876相同职位的员工信息 并且薪资大于编号为7521的薪资的员工信息

SQL> select * from emp where job=( select job from emp where empno=7876) and sal>( select sal from emp where empno=7521);

     子查询含有组函数

   SQL> select * from emp where sal>(select avg(nvl(sal,0)) from emp);

  子查询含有having子句 查询部门的最小工资大于20号部门最小工资的部门号及最   小工资数

SQL> select deptno,min(sal) from emp group by deptno having  min(sal)>( select min(sal) from emp where deptno=20);

备注:子查询可以返回空行 没查询到结果是可以的。

 多行子查询
²  返回多行。
²  使用多行比较操作符。
操作符如下图:

操作符

描述

In

等于列表中的任何一个

Any

子查询返回的任意一个值比较 相同还有some

All

和子查询返回的所有值比较  

Exists

如果子查询返回一个或多个行则exists便返回真都则返回假


查询薪水小于工作岗位CLERK的任何一个薪资的员工信息 并且不包含工作岗位为 CLERK的员工信息

SQL> select * from emp where sal < any (select sal from emp where job='CLERK')   and job<>'CLERK';

all与所有值比较 >all 代表的是大于查询结果的最大值

SQL> select * from emp where sal > all (select sal from emp where job='CLERK')   and job<>'CLERK';

查询岗位与部门编号为10相同的员工信息 不包含自己。

SQL> select * from emp where job in(select job from emp where deptno=10) and   deptno<>10;

SQL> select * from emp where exists(select * from dept);

EMPNO ENAME  JOB        MGR HIREDATE       SAL      COMM DEPTNO

----- ---------- --------- ----- ----------- --------- --------- ------

 7369 SMITH   CLERK   7902 1980-12-17    800.00               20

 7499 ALLEN   SALESMAN  7698 1981-2-20   1600.00    300.00     30

 7521 WARD   SALESMAN  7698 1981-2-22   1250.00    500.00     30

3 rows selected

SQL> select * from emp where exists(select * from dept where deptno=80); 

EMPNO ENAME  JOB        MGR HIREDATE       SAL      COMM DEPTNO

----- ---------- --------- ----- ----------- --------- --------- 



<!--EndFragment-->

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-245548-1-1.html 上篇帖子: Java调用Oracle中的Package 下篇帖子: oracle查询重复数据方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表