基础知识

YuJia大约 1 分钟

MySQL 函数用法

Exists 的用法

语法

SELECT * FROM table_1 WHERE EXISTS ( subquery )

EXISTS 用于检查子查询是否至少会返回一行数据, 该子查询实际上并不返回任何数据, 而是返回值True或False, EXISTS 指定一个子查询,检测的存在

先看例子

SELECT * FROM user
WHERE EXISTS ( SELECT uid FROM order WHERE user.id = order.uid AND order.no = '202304251128' )

这段SQL表示要查询这个订单号对应的用户信息,实现有几种方案:

  1. 单表查询,先使用订单号查询用户id,再去用户表查询用户信息(推荐)
  2. 连表查询(不推荐)
  3. 上述方式
  4. 实用IN替代

执行逻辑:

将外查询表的每一行,代入内查询作为检验,如果内查询返回的结果取非空值,则EXISTS子句返回TRUE,这一行行可作为外查询的结果行,否则不能作为结果。
执行顺序如下:
1.首先执行一次外部查询
2.对于外部查询中的每一行分别执行一次子查询,而且每次执行子查询时都会引用外部查询中当前行的值。
3.使用子查询的结果来确定外部查询的结果集。
如果外部查询返回100行,SQL 就将执行101次查询,一次执行外部查询,然后为外部查询返回的每一行执行一次子查询。

效率问题:

EXISTS与IN的使用效率的问题,通常情况下采用exists要比in效率高,但要看实际情况具体使用: IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。