【sql】exists的用法,exists与in的区别

本文探讨了SQL查询中Exists与In的不同之处。Exists用于检查子查询是否有返回集,并且强调返回布尔值;而In则用于检查某字段是否包含于子查询的结果集中。此外,还讨论了在不同场景下选择使用Exists或In的原因。

一直以来很少用exists,以为和in用法一样,最近一看才发现,that is not the case!

exists用法

强调的是子查询是否有返回集,不需知道具体返回的是什么,如果有就显示主查询的内容,没有就不显示。

因此,子查询中select *和select 任意字段 效果是一样的,如下:

SELECT * FROM customer c WHERE NOT EXISTS (SELECT cg.date FROM customer_goods cg WHERE c.id =1)  
SELECT * FROM customer c WHERE NOT EXISTS (SELECT * FROM customer_goods cg WHERE c.id =1)

当然这里分为两种情况:一种是子查询和主查询有关联,就是子查询的where用到了主查询的字段,这种情况先把主表查出来,然后循环主表的每一行,复制到子查询的字段即可。另一情况是子查询和没有用到主查询的表,这种就直接返回true就可以了。

参考资料:https://blog.youkuaiyun.com/zhangsify/article/details/71937745

in和exists区别

in是先查询子表,然后内外表做迪卡尔积,筛选。 子查询返回类型是结果集。——用于判断某字段是否包含着子查询中

exists是先查外表,loop循环外表每一行,去内表判断。子查询返回类型是boolean。——用于判断是否有返回集

子表小有索引用in,主表大、有索引用exists。

参考资料:https://www.cnblogs.com/liyasong/p/sql_in_exists.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值