子查询是SELECT查询的另一个查询的附属,MySQL 4.1可以嵌套多个查询,在外面一层的查询中使用里面一层查询产生的结果集。这样就不是执行两个(或者多个)独立的查询,而是执行包含一个(或者多个)子查询的单独查询。

创建图书信息表和编号信息表,用于后续的实例使用。

(1)创建图书信息表,并添加数据。

-- 创建图书信息表
CREATE TABLE tb_book
(id INT AUTO_INCREMENT PRIMARY KEY,book_name VARCHAR(30) NOT NULL,row_no INT
);-- 添加数据
INSERT INTO tb_book(book_name,row_no) VALUES
('pan_junbiao的博客',10)
,('Java程序设计',12)
,('PHP经典模块',95)
,('C#项目整合',NULL)
,('MySQL入门',8)
,('Java高级编程',12)
,('Oracle数据库',15)

(2)创建编号信息表,并添加数据。

-- 创建编号信息表
CREATE TABLE tb_row
(id INT AUTO_INCREMENT PRIMARY KEY,row_no INT NOT NULL
);-- 添加数据
INSERT INTO tb_row(row_no) VALUES(8),(10),(12),(80),(90);

1、带IN关键字的子查询

只有子查询返回的结果列包含一个值时,比较运算符才适用。假如一个子查询返回的结果集是值的列表,这时比较运算符就必须用IN运算符代替。

IN运算符可以检测结果集中是否存在某个特定的值,如果检测成功就执行外部的查询。

示例:带IN关键字的子查询。

SELECT * FROM tb_book
WHERE row_no IN (SELECT row_no FROM tb_row);

执行结果:

2、带EXISTS关键字的子查询

使用EXISTS关键字时,内层查询语句不返回查询的记录。而是返回一个真假值。如果内层查询语句查询到满足条件的记录,就返回一个真值(true),否则,将返回一个假值(false)。当返回的值为true时,外层查询语句将进行查询;当返回的为false时,外层查询语句不进行查询或者查询不出任何记录。

示例:带EXISTS关键字的子查询。

SELECT * FROM tb_book
WHERE EXISTS (SELECT row_no FROM tb_row WHERE row_no = 12);

执行结果:

说明:与EXISTS关键字刚好相反,使用NOT EXISTS关键字时,当返回的值是true时,外层查询语句不执行查询;当返回值是false时,外层查询语句将执行查询。

3、带ANY关键字的子查询

ANY关键字表示满足其中任意一个条件。使用ANY关键字时,只要满足内层查询语句返回的结果中的任意一个,就可以通过该条件来执行外层查询语句。

示例:带ANY关键字的子查询。

SELECT * FROM tb_book
WHERE row_no < ANY(SELECT row_no FROM tb_row);

执行结果:

4、带ALL关键字的子查询

ALL关键字表示满足所有条件。使用ALL关键字时,只有满足内层查询语句返回的所有结果,才可以执行外层查询语句。

示例:带ALL关键字的子查询。

SELECT * FROM tb_book
WHERE row_no >= ALL(SELECT row_no FROM tb_row);

执行结果:

说明:ANY关键字和ALL关键字的使用方式是一样的,但是这两者有很大的区别。使用ANY关键字时,只要满足内层查询语句返回的结果中的任何一个,就可以通过该条件来执行外层查询语句;而ALL关键字则需要满足内层查询语句返回的所有结果,才可以执行外层查询语句。

MySQL使用IN、EXISTS、ANY、ALL关键字的子查询相关推荐

  1. MySQL带IN关键字的子查询

    子查询 是指一个查询语句,嵌套在另一个查询语句内部的查询 可以嵌套在一个SELECT.SELECT--INTO语句.INSERT--INTO等语句中 在执行查询语句时,首先,会执行子查询中的语句,然后 ...

  2. MySQL带ALL关键字的子查询

    ALL关键字 ALL关键字与ANY类似 ALL关键字的子查询,返回的结果,需要同时满足所有内层查询条件 使用ALL关键字的子查询,查询满足条件的部门 执行过程,首先,子查询会将employee表中的所 ...

  3. MySQL带ANY关键字的子查询

    ANY关键字 表示满足其中任意一个条件 它允许创建一个表达式,对子查询的返回值列表,进行比较,只要满足内层子查询中的,任意一个比较条件,就返回一个结果作为外层查询条件 使用ANY关键字的子查询,查询满 ...

  4. 记一次mysql优化 not in, not exits, left join 子查询

    在某次业务逻辑中写到如下逻辑:查询学校级别的未拦截弹窗记录.而弹窗设备表(t_block_blacklist_device)有四种类型(1:学校级黑名单 2:设备级别黑名单 3:略 4:学校级白名单 ...

  5. 史上最简单的 MySQL 教程(三十二)「子查询(下)」

    子查询 子查询:sub query,查询是在某个查询结果之上进行的,一条select语句内部包含了另外一条select语句. 行子查询 行子查询,返回的结果可以使一行多列或者多行多列. 需求:查询学生 ...

  6. Mysql时间数据分段累加求和案例之子查询与SUM窗口函数

    Mysql时间段数分段据累加求和 简介 时间段数据的分段可以根据义务逻辑来划分,累加求和在mysql8.0及以上可以通过sum结合窗口函数来实现,低版本用子查询实现. 需求 对原始数据按照时间点3点前 ...

  7. 带all关键字的子查询

    关键字all用来表示父查询的条件为满足子查询返回查询结果中所有数据记录,该关键字有以下 两种匹配方式: 1.2.1 >all(>=all);比子查询中返回数据记录中最大的还要大于(大于等于 ...

  8. MySQL带EXISTS关键字的子查询

    EXISTS关键字 后面的参数,可以是任意一个子查询,这个子查询的作用相当于测试,它不产生任何数据,只返回TRUE或FALSE 当返回值为TRUE时,外层的查询才会执行 查询employee表中,是否 ...

  9. mysql 去除重复 Select中DISTINCT关键字的用法(查询两列,只去掉重复的一列)

    在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的 ...

最新文章

  1. Seaborn可视化使用relplot函数可视化数据长度不同的时间序列实战:two Pandas Series of different lengths
  2. AMD/NV大跌2周后仅两天收复失地 挖矿成背后推手
  3. 【深度学习】Transformer长大了,它的兄弟姐妹们呢?(含Transformers超细节知识点)...
  4. c语言 error 9,C语言求助(_) c:9: error: syntax error before '[' token
  5. IOS中关于MBProgressHUD的使用
  6. Vue中定义全局变量与常量的各种方式详解_vue.js_脚本之家
  7. 一套组合拳,打造一款 IDEA 护眼方案
  8. threejs 绘制球体_Three.js 第一篇:绘制一个静态的3D球体
  9. matlab虚拟现实之工具介绍(修改)
  10. sourcetree合并分支_不会git命令,没关系啊,还有强大的图形界面工具SourceTree
  11. 个人简历怎么写怎么做(还有怎么培养无私奉献的精神--模板)
  12. spring AOP @Aspect,@pointcut的理解
  13. 驾考你准备好了吗 之 交通标志、标线篇
  14. 【C语言程序设计】C语言求圆周率π(三种方法)
  15. 你值得拥有——流星雨下的告白(Python实现)
  16. 屏蔽点击BackSpace键页面后退
  17. win7系统怎么用笔记本做wifi热点(转)
  18. 电商设计——3、点线面及光影
  19. 通过AWS云平台 构建云上勒索病毒防护体系,轻松保护数据完整性
  20. Monte-Carlo Dropout,蒙特卡罗 dropout

热门文章

  1. 简述setBackgroundResource、setBackgroundColor、setBackgroundDrawable的区别
  2. html实现简易商城网页设计
  3. 【京东电商网站主界面仿写——HTML第三部分】
  4. 网络工程师-考前专题突破
  5. 逻辑地址转物理地址(操作系统)
  6. HUAWEI防火墙端口映射配置
  7. 【input 标签的 type 属性详解】
  8. unity游戏云化后,暂停后游戏会继续执行问题解决
  9. 优步裁员3000名员工,背后是何原因?
  10. 云存储学习笔记5-FreeNAS搭建