基础知识
大约 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表示要查询这个订单号对应的用户信息,实现有几种方案:
- 单表查询,先使用订单号查询用户id,再去用户表查询用户信息(推荐)
- 连表查询(不推荐)
- 上述方式
- 实用IN替代
执行逻辑:
将外查询表的每一行,代入内查询作为检验,如果内查询返回的结果取非空值,则EXISTS子句返回TRUE,这一行行可作为外查询的结果行,否则不能作为结果。
执行顺序如下:
1.首先执行一次外部查询
2.对于外部查询中的每一行分别执行一次子查询,而且每次执行子查询时都会引用外部查询中当前行的值。
3.使用子查询的结果来确定外部查询的结果集。
如果外部查询返回100行,SQL 就将执行101次查询,一次执行外部查询,然后为外部查询返回的每一行执行一次子查询。
效率问题:
EXISTS与IN的使用效率的问题,通常情况下采用exists要比in效率高,但要看实际情况具体使用: IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。