【MySQL】IN 的学习,以及和 EXISTS的区别
1、 EXISTS 的语法
语法: EXISTS subquery
参数: subquery 是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INTO 关键字)。
结果类型: Boolean 如果子查询包含行,则返回 TRUE ,否则返回 FLASE 。
说明: EXISTS (包括 NOT EXISTS) 子句的返回值是一个 BOOL 值。 EXISTS 内部有一个子查询语句 (SELECT ... FROM...), 我将其称为 EXIST 的内查询语句。其内查询语句返回一个结果集。 EXISTS 子句根据其内查询语句的结果集空或者非空,返回一个布尔值。
2、IN () 和 EXISTS () 语句内部工作原理
2.1 IN () 语句内部工作原理
2.2 EXISTS () 语句内部工作原理
2.3 各自适用场景
- 当 A 表数据与 B 表数据一样大时,in 与 exists 效率差不多,可任选一个使用。
- 通常情况下采用 exists 要比 in 效率高,因为 IN 不走索引。但要看实际情况具体使用:
- IN 适合于外表大而内表小的情况;
- EXISTS 适合于外表小而内表大的情况。
3、如何使用
3.1 使 IN () 和 EXISTS () 有相同作用
很多时候用 exists 代替 in 是一个好的选择:
select num from a where num in(select num from b) 用下面的语句替换: select num from a where exists(select 1 from b where num=a.num)
4、参考
- in 和 exist 区别 - lick4050312 的专栏 - CSDN 博客
注:特别清晰,包括 IN 和 EXISTS 的区别,各自适用场景,以及 EXISTS 字段的详细解析。- SQL 中 EXISTS 的用法 - Dsw - 博客园
注:具体语法和用法说的很详细。- SQL查询中in和exists的区别分析 - 简书
注:具体语句执行内部原理,很详细。- sql 中 exists,not exists 的用法 - 飞翔 - 方向 积累 沉淀 - 博客园
相关推荐
ItBJLan 2020-06-28
lhxxhl 2020-11-16
minggehenhao 2020-07-28
CARBON 2020-06-14
luotuofeile 2020-06-12
xiaobaif 2020-05-09
dreamhua 2020-03-28
huangliang00 2020-02-22
wklken的笔记 2020-02-15
萌亖 2020-02-10
郴州小程序 2020-01-24
liuyang000 2020-01-24
fengdos 2019-12-27
azhou 2019-12-25
oraclemch 2019-12-01
明月清风精进不止 2019-11-30
泓 2014-09-24