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 的用法 - 飞翔 - 方向 积累 沉淀 - 博客园