所谓子查询,就是指在一个查询之中嵌套了其他的若干查询,通过子查询可以实现多表查询,该查询语句中可能包含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子句里,被当作一张临时表的方式来处理。

mysql之子查询的更多相关文章

  1. mysql in 子查询 效率慢 优化(转)

    mysql in 子查询 效率慢 优化(转) 现在的CMS系统.博客系统.BBS等都喜欢使用标签tag作交叉链接,因此我也尝鲜用了下.但用了后发现我想查询某个tag的文章列表时速度很慢,达到5秒之久! ...

  2. MySQL 行子查询(转)

    MySQL 行子查询 行子查询是指子查询返回的结果集是一行 N 列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集. 一个行子查询的例子如下: SELECT * FROM table1 WH ...

  3. MySQL FROM 子查询

    FROM 子句中的子查询 MySQL FROM 子查询是指 FROM 的子句作为子查询语句,主查询再到子查询结果中获取需要的数据.FROM 子查询语法如下: SELECT ... FROM (subq ...

  4. MySQL 表子查询

    MySQL 表子查询 表子查询是指子查询返回的结果集是 N 行 N 列的一个表数据. MySQL 表子查询实例 下面是用于例子的两张原始数据表: article 表: aid title conten ...

  5. MySQL 行子查询

    MySQL 行子查询 行子查询是指子查询返回的结果集是一行 N 列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集. 一个行子查询的例子如下: SELECT * FROM table1 WH ...

  6. Mysql in子查询中加limit报错

    Mysql in子查询中加limit报错 select id from aa where id in ( select id from bb limit 10 ); 改写成 SELECT id FRO ...

  7. MySQL(五) —— 子查询

    子查询(SubQuery)是指出现在其他SQL语句内的SELECT语句. 如: SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2); 其中 SELE ...

  8. MySql优化子查询

    用子查询语句来影响子查询中产生结果rows的数量和顺序. For example: SELECT * FROM t1 WHERE t1.column1 IN (SELECT column1 FROM ...

  9. Mysql的子查询相关知识,少但是精

    Mysql子查询 概念分析: 根据相关性分: (1)不相关子查询:一条Sql语句中含有多条SELECT语句,先执行子查询,再执行外查询,子查询可对立运行 关键字:(1)先子查询,再外查询 (2)可以对 ...

  10. 聊聊MySQL的子查询

    1. 背景 在之前介绍MySQL执行计划的博文中已经谈及了一些关于子查询相关的执行计划与优化.本文将重点介绍MySQL中与子查询相关的内容,设计子查询优化策略,包含半连接子查询的优化与非半连接子查询的 ...

随机推荐

  1. SaltStack的salt-ssh使用及LAMP状态设计部署(五)

    一.salt-ssh的使用 官方文档:https://docs.saltstack.com/en/2016.11/topics/ssh/index.html (1)安装salt-ssh [root@l ...

  2. MVC Partial页面的使用

    先建立Action: public PartialViewResult CurrentCount() { ViewBag.Count = CurrentUserCount; return Partia ...

  3. ref:mysql丢失密码,如何修改?

    ref:https://www.linuxidc.com/Linux/2007-05/4338.htm mysql“Access denied for user 'root'@'localhost'” ...

  4. CODEVS1358【DFS/状压DP】

    题目链接[http://codevs.cn/problem/1358/] 题意:这个游戏在一个有10*10个格子的棋盘上进行,初始时棋子位于左上角,终点为右下角,棋盘上每个格子内有一个0到9的数字,每 ...

  5. 范浩强treap——可持久化

    当平衡树需要可持久化的时候,意味着我们需要访问以前的某个时间点的平衡树,就要保持以前的树形态不变,新建一个时间戳,构建一棵新的树. 如果用以前的旋转treap可能就不方便做到(又要打时间戳,又要新建节 ...

  6. 51nod2000 四边形分割平面 规律题

    观察样例,$ans(1) = 1, ans(2) = 10$,再手推一组,$ans(3) = 26$ 可以发现规律$ans(n) = (2n - 1)^2 + 1$ 如果还是没看出规律,那么打个程序去 ...

  7. POJ 3553 Light Switching Game 博弈论 nim积 sg函数

    http://poj.org/problem?id=3533 变成三维的nim积..前面hdu那个算二维nim积的题的函数都不用改,多nim积一次就过了...longlong似乎不必要但是还是加上了 ...

  8. 2018BNU校赛总决赛

    题解是qls的题解我就懒得写了23333 A塞特斯玛斯塔 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld ...

  9. HDU 6134 Battlestation Operational(莫比乌斯反演)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6134 [题目大意] 求$\sum_{i=1}^{n}{\sum_{j=1}^{i}\lceil{\ ...

  10. hdu 4111 Alice and Bob 记忆化搜索 博弈论

    Alice and Bob Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...