EXISTS和in的区别?
EXISTS
用于检查子查询是否至少会返回一行数据,该子查询实际上
并不返回任何数据
,而是
返回值
True
或
False
SELECT *
FROM users u
WHERE EXISTS (
SELECT *
FROM orders o
WHERE o.user_id = u.id
);
# 这个查询将返回所有存在于表格orders中的用户
exists
用于对外表记录做筛选。
exists
会遍历外表,将外查询表的每一行,代入内查询进行判断。当 exists
里的条件语句能够返回记录行时,条件就为真,返回外表当前记录。反之如果
exists
里的条件语句不能返回记录行,条件为假,则外表当前记录被丢弃。
select a.* from A where exists(select 1 from B b where a.id=b.id)
in
是先把后边的语句查出来放到临时表中,然后遍历临时表,将临时表的每一行,代入外查询去查找。
(
二者的前后顺序不一样
)
select * from A where id in(select id from B)
子查询的表比较大的时候
,使用
exists
可以有效减少总的循环次数来提升速度;
当外查询的表比较大
的时候
,使用
in
可以有效减少对外查询表循环遍历来提升速度。
EXISTS
用于查找在子查询中是否存在记录,而IN
用于查找记录是否与一组值中的任何一个匹配
EXISTS和普通where条件查询有啥区别
- 1EXISTS用于子查询的存在性判断:EXISTS是一个用于判断子查询是否返回结果的布尔表达式。它不会返回子查询的实际结果集,只会返回布尔值(TRUE或FALSE)。它通常用于主查询中,以判断子查询是否返回至少一条记录。而普通的WHERE条件查询是用来过滤主查询结果中的记录,返回满足条件的记录集。
- EXISTS对性能更友好:EXISTS通常在处理大型数据集时比普通的WHERE条件查询更高效。它仅需找到一个匹配记录即可返回,而不会生成完整的结果集。这意味着EXISTS可以提前终止搜索,从而减少了不必要的计算和I/O操作,提高了查询性能。
- 使用场景不同:EXISTS通常在需要基于子查询的结果是否存在来做出决策的场景中使用。例如,使用EXISTS来判断某个记录是否存在,从而在主查询中执行不同的逻辑。普通的WHERE条件查询则适用于对主查询结果进行简单的筛选和条件匹配的场景。
总之,
EXISTS
适用于处理子查询的存在性判断和复杂逻辑的场景,通常在性能和查询结果的要求
方面更高效。普通的
WHERE
条件查询适用于简单筛选和条件匹配的场景