SQL IN ANY ,(all any) 区别

 

EXITS 和 IN 的区别:

 


从效率来看:

1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ;

T1数据量小而T2数据量非常大时,T1<<T2 时,1) 的查询效率高。

2) select * from T1 where T1.a in (select T2.a from T2) ;

T1数据量非常大而T2数据量小时,T1>>T2 时,2) 的查询效率高。

简而言之,一般式:外表大,用IN;内表大,用EXISTS。


如果查询的两个表大小相当,那么用in和exists差别不大。

如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:

例如:表A(小表),表B(大表)
1:
select * from A where cc in (select cc from B)
效率低,用到了A表上cc列的索引;
select * from A where exists(select cc from B where cc=A.cc)
效率高,用到了B表上cc列的索引。

相反的
2:
select * from B where cc in (select cc from A)
效率高,用到了B表上cc列的索引;
select * from B where exists(select cc from A where cc=B.cc)
效率低,用到了A表上cc列的索引。

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


(4)sql语句中 < any 和 <all 的区别


1、查找年龄比15、16、22、21、17、18、19中任意一个都小的学生记录就有如下代码:
select *
from student
where age<any(15,16,22,21,17,18,19)

2、查找年龄比15、16、22、21、17、18、19中任意一个都大的学生记录就有如下代码:
select *
from student
where age>any(15,16,22,21,17,18,19)

从上面来看. ANY的意义不就和ALL一样了.
ANY是小于集合里任何一个.也就是比最小的还小.
ALL比所有的都小.不也是比最小的还小.

二者的区别在哪.用在什么地方会有不同?

posted @   aspirant  阅读(3538)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2014-07-30 在MVC的项目中访问静态页面
点击右上角即可分享
微信分享提示