所谓子查询,就是指在一个查询之中嵌套了其他的若干查询,通过子查询可以实现多表查询,该查询语句中可能包含IN,ANY,ALL和EXISTS等关键字,除此之外还可以包含比较运算符,子查询经常出现在WHERE和FROM字句中。

WHERE字句中的子查询:该位置处的子查询一般返回单行单列,多行单列,单行多列数据记录。

FROM字句中的子查询:该位置处的子查询一般返回多行多列数据记录,可以当作一张临时表。

1. 返回结果为单行单列和单行多列子查询

当子查询的返回结果为单行单列数据记录时,该子查询语句一般在主查询语句的WHERE子句里,通常会包含比较运算符(">","<","=","!="等)。

1.1 返回结果为单行单列子查询

SELECT * FROM e_employee WHERE sal >(SELECT sal FROM t_employee WHERE ename='SMITH')

1.2 返回结果为单行多列子查询

SELECT ename,sal,job FROM e_employee WHERE (sal,job) = (SELECT sal,job FROM t_employee WHERE ename='SMITH')

2. 返回结果为多行单列子查询

当子查询的返回结果为多行单列数据记录时,该子查询语句一般在主查询语句的WHERE子句里,通常会包含IN,ANY,ALL,EXISTS等关键字。

2.1 带有关键字IN的子查询

当主查询语句的条件是子查询的查询结果时,就可以通过关键字IN来进行判断,相反如果想实现主查询的条件不是子查询的查询结果时,就可以通过关键字NOT IN来进行判断。

SELECT * FROM t_employee WHERE deptno IN (SELECT deptno FROM t_dept)

2.2 带有关键字ANY的子查询

SELECT ename,sal FROM t_employee WHERE sal >ANY (SELECT sal FROM t_employee WHERE job='MANAGER')

关键字ANY用来表示主查询的条件为满足子查询返回查询结果中任意一条数据记录,该关键字有三种匹配方式,分别如下:

=ANY:其功能与关键字IN一样。

>ANY(>=ANY):比子查询中返回数据记录中最小的还要大于(大于等于)数据记录。

<ANY(<=ANY):比子查询中返回数据记录中最大的还要小于(小于等于)数据记录。

2.3 带有关键字ALL的子查询

SELECT ename,sal FROM t_employee WHERE sal >ALL (SELECT sal FROM t_employee WHERE job='MANAGER')

关键字ALL用来表示主查询的条件为满足子查询返回查询结果中所有数据记录,该关键字有以下两种匹配方式。

>ALL(>=ALL):比子查询中返回数据记录中最大的还要大于(大于等于)数据记录。

<ALL(<=ALL):比子查询中返回数据记录中最小的还要小于(小于等于)数据记录。

2.4 带有关键字EXISTS的子查询

关键字EXISTS是一个布尔类型,当返回结果集时为TRUE,不能返回结果集时为FALSE。查询时EXISTS对外表采用遍历方式逐条查询,每次查询都会比较EXISTS的条件语句,当EXISTS里的条件语句返回记录行时则条件为真,此时返回当前遍历到的记录;反之,如果EXISTS里的条件语句不能返回记录行,则丢弃当前遍历到的记录。

SELECT * FROM t_dept c WHERE NOT EXISTS (SELECT * FROM e_employee WHERE deptno=c.deptno);

3. 返回结果为多行多列子查询

当子查询的返回结果为多行多列数据记录时,该子查询语句一般会在主查询语句的FROM子句里,被当作一张临时表的方式来处理。

最新文章

  1. Aristochart – 灵活的 HTML5 Canvas 折线图
  2. JavaScript实例-----反选
  3. XAML概览 1(译自JeremyBytes.com)
  4. jQuery EasyUI之DataGrid使用示例
  5. 深入了解VSTS的Unit Test测试属性
  6. hdu 4545 魔法串
  7. JS关闭页面无提示
  8. KB奇遇记(3):IT现状
  9. 2013~2014年度 NOIP~GDOI总结
  10. Netty4.0.24.Final 版本中 IdleStateHandler 使用时的局限性
  11. CSS3属性之圆角效果——border-radius属性
  12. Android官方网站
  13. r.js合并实践
  14. TMS320DM642学习----第六篇(CCS中.dat文件类型详解)
  15. qt布局管理-缩放、多窗口切换
  16. [C++]线性链表之单链表
  17. python实现最大重叠子串的查找
  18. GeeTest 极验验证
  19. ansible的携带密码访问
  20. ZENCART 菜鸟找人一起学习

热门文章

  1. Recursion in Java
  2. cordova 使用WKWebView 适配iphoneX及解决不能拨打电话问题
  3. 自定义mvc验证特性,手机号号段老增加,给自定义一个RegularExpress
  4. elementUI 学习入门之 input 输入框
  5. 429.N叉树的层次遍历
  6. SpringBoot学习(二)
  7. Python中的模块(1)
  8. [CodeForces-440D]Berland Federalization
  9. poj 1485 dp
  10. [转]Android:异步处理之AsyncTask的应用(二)