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

微信公众号新浪微博
免费咨询电话:400-0909-964
当前位置: 网站首页 > DBA实战 > DBA课程 > Oracle基础内容:子查询(单行、any、all)

Oracle基础内容:子查询(单行、any、all)

文章来源: 更新时间:2016/7/20 14:03:31

在线老师点击咨询:

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

我要咨询

Oracle基础内容:子查询(单行、any、all),子查询在SELECT、UPDATE、DELETE语句内部可以出现SELECT语句。内部的SELECT语句结果可以作为外部语句中条件子句的一部分,也可以作为外部查询的临时表。子查询的类型有:

1. 单行子查询:不向外部返回结果,或者只返回一行结果。

2. 多行子查询:向外部返回零行、一行或者多行结果。

案例1:查询出销售部(SALES)下面的员工姓名,工作,工资。

案例分析

该问题可以用联接查询实现,由于所需的结果信息都在Emp表中,可以先从Dept表中查询出销售部对应的部门号,然后根据当前部门号再到Emp表中查询出符合该部门的员工记录即可。从销售表中查询出的结果可以作为Emp表中查询的条件,SQL语句实现如下:

代码演示:单行子查询

SQL> SELECT ENAME,JOB,SAL FROM EMP

  2  WHERE DEPTNO=(SELECT DEPTNO FROM DEPT WHERE DNAME='SALES') 

  3  /

 ENAME

JOB

SAL

ALLEN

SALESMAN

1600

WARD

SALESMAN

1250

MARTIN

SALESMAN

1250

BLAKE

MANAGER

2850

TURNER

SALESMAN

1500

JAMES

CLERK

950

 6 rows selected

代码解析:

① 内部查询的结果作为外部查询的条件。

需要注意:

`如果内部查询不返回任何记录,则外部条件中字段DEPTNO与NULL比较永远为假,也就是说外部查询不返还任何结果。

`在单行子查询中外部查询可以使用=、>、<、>=、<=、<>等比较运算符。

`内部查询返回的结果必须与外部查询条件中的字段(DEPTNO)匹配。

`如果内部查询返回多行结果则出现错误。

案例2:查询出Emp表中比任意一个销售员(“SALESMAN”)工资低的员工姓名、工作、工资。

案例分析

销售员在Emp表中有很多条记录,每个人工资不相等,如果返回“比任意员工的工资还低”的条件,返回比“最高工资还低”即可。如果用子查询做,子查询中就会返回多条记录。用普通的关系符(>、<等)运行就会出错。这时候需要用关键字ANY。ANY放在比较运算符后面,表示“任意”的意思。

代码演示:ANY子查询

SQL> SELECT ENAME,JOB,SAL FROM EMP

  2  WHERE SAL<ANY (SELECT SAL FROM EMP WHERE JOB='SALESMAN') 

  3  /

ENAME

JOB

SAL

SMITH

CLERK

800

JAMES

CLERK

950

ADAMS

CLERK

1100

WARD

SALESMAN

1250

MARTIN

SALESMAN

1250

MILLER

CLERK

1300

TURNER

SALESMAN

1500

 7 rows selected

代码解析:

① any表示比子查询结果中最小的还大。

案例3:查询出比所有销售员的工资都高的员工姓名,工作,工资。

案例分析

ANY可以表示任意的,但本案例中要求比所有销售员工资都高,那么就要使用另外一个关键字ALL。ALL与关系操作符一起使用,表示与子查询中所有元素比较。

代码演示:ALL子查询

SQL> SELECT ENAME,JOB,SAL FROM EMP

  2  WHERE SAL>ALL (SELECT SAL FROM EMP WHERE JOB='SALESMAN')  

  3  /

 ENAME

JOB

SAL

JONES

MANAGER

2975

BLAKE

MANAGER

2850

CLARK

MANAGER

2450

SCOTT

ANALYST

3000

KING

PRESIDENT

5000

FORD

ANALYST

3000

6 rows selected

代码解析:

① >ALL:比子查询结果中所有值还要大,也就是说,比子查询结果中最大值还要大。

对于子查询还可以使用IN和NOT IN操作符进行操作。

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


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

Oracle培训机构

金牌讲师<>

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

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

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

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

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

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

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

入学

学习

就业

实操

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