专业只做数据库实训和认证的品牌机构

微信公众号新浪微博
免费咨询电话:400-0909-964
当前位置: 网站首页 > DBA实战 > DBA课程 > Oracle子查询:where/from/having子查询

Oracle子查询:where/from/having子查询

文章来源: 更新时间:2020/3/13 17:35:21

在线老师点击咨询:

最新学讯:近期OCP认证正在报名中,因考试人员较多请尽快报名获取最近考试时间,报名费用请联系在线老师,甲骨文官方认证,报名从速!

我要咨询

一般情况下:

WHERE:子查询一般只返回单行单列、多行单列、单行多列的数据;

FROM:子查询返回的一般是多行多列的数据,当作一张临时表出现。

HAVING:子查询返回的一般是单行单列数据。


子查询在 WHERE 中出现


1.返回 单行单列 数据

范例一: 查询出工资比SMITH还要高的全部雇员信息

SELECT * FROM EMP WHERE sal>(SELECT sal FROM EMP WHERE ename='SMITH');


2.子查询返回 单行多列 数据

以上所返回的是单行单列,但是在子查询之中,也可以返回单行多列的数据,只是这种子查询很少出现。

范例:查询出emp表中 职位和薪资 与雇员 'SCOTT'的 职位和薪资 相同的雇员信息。

SELECT * FROM EMP WHERE (JOB,SAL)=(SELECT job,sal from emp where ename='SCOTT');


3.子查询返回 多行单列 数据

如果现在的子查询返回的是多行单列数据的话,这个时候就需要使用三种判断符判断了:IN、ANY、ALL;

IN 操作符

IN里面的范围由子查询指定。

案例:查询雇员的工资等于在经理的工资的范围内的雇员信息

SELECT * FROM EMP WHERE SAL IN (SELECT SAL FROM EMP WHERE JOB='MANAGER');

但是在使用IN的时候还要注意 NOT IN的问题,如果使用NOT IN操作,在子查询之中,如果有一个内容是null,则不会查询出任何的结果。

解决非空 问题,使用空判断NVL。

SELECT * FROM EMP WHERE SAL IN (SELECT NVl(SAL,0) FROM EMP WHERE JOB='MANAGER');

ANY操作符:与每一个内容想匹配,有三种匹配形式

=ANY:功能与IN操作符是完全一样的;

案例:查询雇员的工资等于在经理的工资的范围内的雇员信息

SELECT * FROM EMP WHERE SAL =ANY(SELECT NVl(SAL,0) FROM EMP WHERE JOB='MANAGER');

>ANY:比子查询中返回记录最小的还要大的数据;

案例:查询雇员的工资比经理的工资高的雇员信息

SELECT * FROM EMP WHERE SAL >ANY(SELECT NVl(SAL,0) FROM EMP WHERE JOB='MANAGER');

案例:查询雇员的工资比经理的工资低的雇员信息

SELECT * FROM EMP WHERE SAL

ALL操作符:与每一个内容相匹配,有两种匹配形式:

需要注意的是:ALL 。(如果有一个内容是null,则不会查询出任何的结果。)

>ALL:比子查询中返回的最大的记录还要大

案例:查询雇员的工资比经理的任意一个工资高的雇员信息

SELECT * FROM EMP WHERE SAL >ALL(SELECT NVl(SAL,0) FROM EMP WHERE JOB='MANAGER');

案例:查询雇员的工资比经理的任意一个工资低的雇员信息

SELECT * FROM EMP WHERE SAL


子查询在 FROM 中出现

这个子查询一般返回的是多行多列的数据,当作一张临时表的方式来处理。

范例:查询出每个部门的编号、名称、位置、部门人数、平均工资

SELECT

d.DEPTNO 编号,

d.DNAME 名称,

d.LOC 位置,

temp.c 部门人数,

temp.a 平均工资

FROM DEPT d, (SELECT

DEPTNO dno,

count(SAL) c,

avg(SAL) a

FROM EMP

GROUP BY DEPTNO) temp

WHERE d.DEPTNO = temp.dno;


子查询在 HAVING 中出现(一般在条件判断出现统计函数的时候才使用)

范例:查询出职位的名称、人数、平均薪资,且要求 职位平均薪资高于公司平均薪资的,查询结果根据平均薪资降序排列。

SELECT

JOB 名称,

count(ENAME) 人数,

avg(SAL) 平均薪资

FROM EMP

GROUP BY JOB

HAVING avg(SAL) > (SELECT avg(sal)

FROM EMP)

ORDER BY 平均薪资 DESC;

本文地址:http://www.cuug.com.cn/dba/kecheng/24034176362.html 转载请注明!


在线预约 抢先报名 获取课程排期

Oracle培训机构

金牌讲师<>

冉乃纲-老师CUUG金牌讲师
冉老师 CUUG金牌讲师 Oracle及RedHat高级讲师、Unix/Linux 资深专家...[详细了解老师]

免费咨询上课流程 客服在线中

陈卫星-老师CUUG金牌讲师
陈老师 CUUG金牌讲师 精通Oracle管理、备份恢复、性能优化 11年Ora...[详细了解老师]

免费咨询上课流程 客服在线中

选学校如何选择适合自己的学校

CUUG -CHINA UNIX USER GROUP,是国际UNIX组织UNIFORUM的中国代表,是国内悠久的专业UNIX培训机构,被誉为中国UNIX 的摇篮。多年来,以提高教学质量为本,强调素质教育,积极引进、消化国外的新技术,有效的结合中国....[详情]

一站式服务(从入学到就业一帮到底)

入学

学习

就业

实操

食宿
地址:北京市海淀区田村山南路35号院17号楼
课程咨询:010-59426307 010-59426319 400-0909-964
企业服务:137 1818 8639(陈经理)
部分信息来源于网络,如有错误请联系指正!
版权所有@北京神脑资讯技术有限公司 (CUUG,中国UNIX用户协会) Copyright 2016 ALL Rights Reserved 京ICP备11008061号-1