所谓子查询,就是指在一个查询之中嵌套了其他的若干查询,通过子查询可以实现多表查询,该查询语句中可能包含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. ubuntu 防火墙关闭的80端口,开启方法

    #关闭防火墙 /etc/init.d/iptables stopservice iptables stop # 停止服务#查看防火墙信息/etc/init.d/iptables status #开放端 ...

  2. 2017-2018-1 20179202《Linux内核原理与分析》第六周作业

    一.系统调用实验(下): 1.编辑 menu 中的 text.c 文件,给MenuOS增加 rename 和 rename_asm 命令: make rootf 打开 menu 镜像,可以看到Menu ...

  3. POJ 2019 Cornfields [二维RMQ]

    题目传送门 Cornfields Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 7963   Accepted: 3822 ...

  4. 洛谷P3457 [POI2007]POW-The Flood [并查集,模拟]

    题目传送门 pow 题意翻译 Description 你手头有一张该市的地图.这张地图是边长为 m∗n 的矩形,被划分为m∗n个1∗1的小正方形.对于每个小正方形,地图上已经标注了它的海拔高度以及它是 ...

  5. Python并发编程-协程

    利用Greenlet模块在多线程之间切换 from greenlet import greenlet def eat(): print('eating start') g2.switch() prin ...

  6. Python网络管理模块Paramiko-代码实例

    import paramiko import time import sys ip = "10.1.1.1" username = "Admin" passwo ...

  7. mcnp的重复探测器单元计数-fmesh卡的介绍

    第一步:首先前面是cell surface和material等的定义,忽略,然后写上下面的这些抽样信息等.最后写入fmesh卡的信息定义 第二步:计算上述输入卡,得到结果,显然不在outx,x代表p ...

  8. 阿里云下Linux服务器安装Redis

    什么是Redis? Redis是一个可以持久化的缓存框架,支持分布式缓存,简单易用.类似的框架还有memcached,是一个Key-Value形式存储的缓存框架.   可以作为缓存的框架有: EHCa ...

  9. 剖析ironic

    关键技术 在安装操作系统时需要存储介质来存储系统镜像.需要控制物理机开关机,在网络部署环境中还需要预启动环境. PXE (预启动环境) IPMI(电源管理) iSCSI(存储) 什么是PXE PXE( ...

  10. 【BJOI2014】大融合【LCT】

    闲着没事写篇题解 传送门 LCT维护子树的模板题 树链剖分中,子树可以用dfs序维护.但LCT你总不可能动态维护dfs序啊 LCT之所以不能直接维护子树,是因为LCT只能维护它的重儿子.我们把这棵子树 ...