课程表

Oracle 基础教程

Oracle 进阶教程

Oracle PL/SQL

Oracle OEM

Oracle 备份和恢复

Oracle RAC

工具箱
速查手册

Oracle 子查询

当前位置:免费教程 » 数据库/运维 » Oracle

Oracle子查询就是嵌套查询,他把select 查询的结果作为另外一个select、update或delete语句的条件,它的本质就是where条件查询中的一个条件表达式。其中我们数据库开发过程中,子查询可以根据查询结果的行数的多少,可以区分为单行子查询和多行子查询。

1、单行子查询:向外部返回的结果为空或者返回一行。

2、多行子查询:向外部返回的结果为空、一行、或者多行。

一、Oracle单行子查询

    Oracle单行子查询是利用where条件“=”关联查询结果的,如果单行子查询返回多行会报单行子查询不能返回多行的数据库错误,下面利用案例讲解子查询。

案例1、查询学生信息表(stuinfo)和班级表(class)中班级为“信息科学2班(18)”的所有学生信息

  1. select *
  2.   from stuinfo t
  3.  where t.classno in (select b.classno
  4.                        from class b
  5.                       where b.classname = '信息科学2班(18)');
  6.  
  7. /*虽然在这利用内关联也可以查出结果,
  8.   而且效率更好,但是在一些没有关联关
  9.   系的时候可以利用子查询 */
  10. select t.*
  11.   from stuinfo t, class b
  12.  where t.classno = b.classno
  13.    and b.classname = '信息科学2班(18)';

结果:

1.jpg


二、Oracle多行子查询

Oracle多行子查询则需要利用IN关键字来接收子查询的多行结果。也可以用量化关键字ANY、ALL和关系运算符>、>=、=、<、<=来组合使用。

ANY关键字:表示子查询结果当中的任意一个。假如:>ANY(子查询),表示:只要大于子查询当中的任意一个值,这个条件就满足。

ALL关键字:表示子查询中的所有结果。假如:>ALL(子查询),表示:必须大于子查询当中的所有结果才能满足这个条件。

案例2、查询班级表中所有班级的学生信息。代码如下:

  1. select * from stuinfo t where t.classno in (select b.classno from class b);

结果如下:

2.jpg

案例3、ANY/ALL关键字案例展示,代码如下:

  1. --年龄只要大于当中子查询的最小值26岁即可
  2. select * from stuinfo t where t.age>any(26,27,28);
  3. --年龄必须大于子查询当中的最大值28岁才可以
  4. select * from stuinfo t where t.age>all(26,27,28);

结果如下:

3.jpg

转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号