MySQL 官方手册 8.0 Reference Manual - Subqueries with ANY, IN, or SOME

1. ANYALL对比

operand comparison_operator ANY (subquery)
operand IN (subquery)
operand comparison_operator SOME (subquery)

comparison_operator 包含:= > < >= <= <> !=

ANYSOME 是任意一个,是存在性。或者数学里的能成立 。也就是>ANY 大于最小的即可,<ANY 小于最大的即可。

ALL 是所有,是全部都满足。或者数学里的恒成立。也就是>ALL 必须大于最大的,<ALL必须小于最小的。

ANY

select * from student where 班级=’01’ and age > any (select age from student where 班级=’02’);
# 就是说,查询出01班中,年龄大于 02班任意一个 的 同学
# 相当于
select * from student where 班级=’01’ and age > (select min(age) from student where 班级=’02’);

ALL

select * from student where 班级=’01’ and age > all (select age from student where 班级=’02’);
# 就是说,查询出01班中,年龄大于 02班所有人的同学
# 相当于
select * from student where 班级=’01’ and age > (select max(age) from student where 班级=’02’);

《SQL完全手册》书中(p155),作者在解释“ANY"的用法中提到:
where x < any (select y ....)
不能读成where x is less than any select y ......
而该读成where,for some y, x is less than y .......

例:列出销售人员中不管理销售点的所有人员的名字和年龄
select name,age from salesreps
错误的筛选字句为
where empl_num <> any(select mgr from offices)
正确的筛选子句为
where not (emp_num=any(select mgr from offices))

在子查询中:IN=ANY 的别名

IN= ANY表达式列表一起使用时不是同义词。 IN可以接受表达式列表,但 = ANY不能。

NOT IN 的别名不是 <> ANY,而是 <> ALL

SOME 的别名是 ANY

2. EXISTSIN对比

SELECT column1 FROM t1 WHERE EXISTS (SELECT * FROM t2);

exists关键字后面的参数是一个任意的子查询,系统对子查询进行运算以判断它是否返回行,如果至少返回一行,那么exists的结果为true ,此时外层的查询语句将进行查询;如果子查询没有返回任何行,那么exists的结果为false,此时外层语句将不进行查询。

传统上,EXISTS子查询以 开头 SELECT *,但也可以以SELECT 5SELECT column1 或任何开头 。MySQL 会忽略SELECT此类子查询中的列表,因此没有区别。

exists执行流程:

​ 先遍历外表t1,然后每次遍历的时候,在检查内表t2是否符合匹配条件。即子查询是否为true。其中子查询可以使用索引外查询全表扫描

​ 相当于:遍历外表,然后拿着外表的id去子查询,根据数据库索引匹配查找。

​ 因此,外查询越小,循环次数越少。但是子查询表大小都有索引优化查询速度。

IN执行流程:

​ 先执行子查询(仅执行一次,然后把结果集存在临时文件中),然后再与外查询匹配。其中外查询与子查询都可以使用索引

​ 相当于:遍历外表,然后拿着外表的id去子查询的临时文件中,内存中遍历匹配查找。

​ 因此,子查询越小,在内存里查询越快,子查询大的时候肯定不如数据库索引查询速度快。

结论:外查询表小,用EXISTS;子查询表小,用IN。

3. using

关联查询的时候,用于替换 ON关键字,ON a.uid=b.uid 等价于using(uid)

MySQL函数关键字(五)子查询 ANY/SOME/ALL/IN/EXISTS/USING相关推荐

  1. 【MySQL】实验五 子查询

    文章目录 1. 查询商品类别名称为"一体机"."台式机"两类商品的信息 2. 查询商品类别名称为"一体机"."台式机"两 ...

  2. Mysql 知行必会 “子查询”

    Mysql 知行必会 "子查询" 每博一文案 后半生看透了人心,也看透了这世间所有的得失,不值得的人,不再 托付真心,不值得的感情,不会苦苦挽留,这世上有太多的人, 人前口服蜜饯, ...

  3. MySQL(五) —— 子查询

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

  4. MySQL使用IN、EXISTS、ANY、ALL关键字的子查询

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

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

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

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

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

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

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

  8. Oracle 语言分类 数据类型 数据类型转换 常用函数 集合操作 子查询

    SQL分类 SQL(Structure Query Language)语言是数据库的核心语言.SQL语言共分为四大类:数据定义语言DDL,数据操纵语言DML,数据查询语言DQL,数据控制语言DCL.1 ...

  9. [20180602]函数与标量子查询3.txt

    [20180602]函数与标量子查询3.txt --//前面看http://www.cnblogs.com/kerrycode/p/9099507.html链接,里面提到: 通俗来将,当使用标量子查询 ...

  10. 20180601]函数与标量子查询2.txt

    [20180601]函数与标量子查询2.txt --//昨天看http://www.cnblogs.com/kerrycode/p/9099507.html链接,里面提到: 通俗来将,当使用标量子查询 ...

最新文章

  1. 温水里的程序员,技术将淘汰一切。
  2. SQL Server 多实例下的复制
  3. 【线上分享】如虎添翼,边缘计算在媒体性能与安全上的实现
  4. 2019款iPhone XR新配色机模上手:就是这个味儿
  5. ubuntu无法安装usb驱动
  6. Flex父子窗口传值
  7. 软件压力测试的手段有注入错误吗,JMeter压力测试之环境搭建、脚本调试及报错解决方法(Linux版)...
  8. Android Provision(开机向导setupwizard程序)
  9. 修改内存卡里linux系统文件怎么恢复,EMMC转SD卡做成内存卡恢复数据教程
  10. c#上位机plc通讯读位
  11. python经典编程题分别取个位十位百位
  12. 螺旋线java_java 小测试,关于画螺旋线的问题.
  13. matlab导入word数据,matlab导入word
  14. 在arm-linux上用gdb调试程序,出现“Program received signal SIGPIPE, Broken pipe”
  15. Teams会议/实时事件中的参会者报告详解
  16. 60 个让程序员崩溃的瞬间,哈哈哈哈哈哈哈哈哈
  17. 软件工程 个人学习笔记(第三章)
  18. 【线性代数】7-2:线性变化的矩阵(The Matrix of a Linear Transformation)
  19. cgl证书(cgl证书查询官网)
  20. voa 1500单词

热门文章

  1. 2023年高新技术企业认定申报注意事项
  2. 使用C语言判断一个机器是大端机还是小端机
  3. unity碰撞检测的几种函数
  4. HP Pavilion X360 11-U054TU降级安装Win7总结
  5. 微信个人收款码于订单应用之解决方案
  6. 给toB创业程序员的建议
  7. 希捷推出数条战略有意对抗充氦硬盘
  8. 官方消息:即将开始退钱
  9. 计算机职称考试科目及内容,职称计算机-考试科目
  10. runtime错误c语言,c,runtime_为什么这样的代码会出现RUNTIME ERROR?,c,runtime - phpStudy...