SQL关于IN和EXISTS的区别?

请问2者到底有什么区别啊?
select MC001 from BOMMC WHERE MC001 NOT IN (SELECT MD001 FROM BOMMD)

select MC001 from BOMMC WHERE MC001 NOT EXISTS (SELECT MD001 FROM BOMMD)

2个IN查出来是80,而EXISTS查出来是没有结果,请问下2者有什么区别?
什么情况下使用
不是很明白,能把1、2、3、4、5当做1个表里面的值,给我举下例子啊?
谢谢了

IN 其实与等于相似,比如in(1,2) 就是 = 1 or = 2的一种简单写法,所以一般在元素少的时候使用IN,如果多的话就用exists

exists的用法跟in不一样,一般都需要和子表进行关联,而且关联时,需要用索引,这样就可以加快速度。

你的SQL语句用NOT EXISTS可以写成
select MC001 from BOMMC WHERE NOT EXISTS (SELECT MD001 FROM BOMMD where BOMMC.MC001 = BOMMD.MD001)
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-10-05
in 是把外表和内表作hash 连接
exists是对外表作loop循环,每次loop循环再对内表进行查询。
那些认为exists比in效率高的人,是不准确的。
如果查询的两个表大小相当,那么用in和exists差别不大。
第2个回答  2009-07-11
in 的对象是值
exists 不返回值,只验证
第3个回答  2009-07-11
MD001有空值
试试如下
select MC001 from BOMMC WHERE MC001 NOT EXISTS (SELECT MD001 FROM BOMMD AND MD001 IS NOT NULL)
第4个回答  2019-12-01
IN和EXISTS一般用于SELECT语句的WHERE子句中作为记录筛选的条件.
IN的一般语法格式为:列(或表达式)
IN(子查询),带IN的子查询只能返回一列值,如果IN前面的列(或表达式)和子查询返回的集合中的一个或一个以上的值相等,则条件为真;如果IN前面的列(或表达式)和子查询返回的集合中的所有值均不相等,则条件为假.
EXISTS子查询的一般格式为EXISTS(子查询),如果子查询包含任何行(有记录返回),则条件为真;如果子查询不包含任何行(无记录返回),则条件为假.由于EXISTS是判断记录的有无确定条件是否成立,并不关心返回的是什么值,因此EXISTS子查询的目标列通常为*.

sql中in和exist语句的区别?
1、适用表的类型不同。in是子查询为驱动表,外面的表为被驱动表,故适用于子查询结果集小而外面的表结果集大的情况。exists是外面的表位驱动表,子查询里面的表为被驱动表,故适用于外面的表结果集小而子查询结果集大的情况。2、子查询关联不同。exists一般都是关联子查询。对于关联子查询,必须先执...

SQL中IN和EXISTS用法的区别
SQL中IN和EXISTS用法的区别 1.exist,not exist一般都是与子查询一起使用. In可以与子查询一起使用,也可以直接in (a,b...)。2.exist会针对子查询的表使用索引. not exist会对主子查询都会使用索引. in与子查询一起使用的时候,只能针对主查询使用索引. not in则不会使用任何索引. 注意,一直以来...

sql中in和exist语句的区别?
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:例如:表A(小表),表B(大表)1:select * from A where cc in (select cc from B)效率低,用到了A表上cc...

SQL 中的 in 与 not in、exists 与 not exists 的区别以及性能分析
SQL中,in和exists,以及not in和not exists在使用上有显著的区别,并且性能受到表大小和查询条件的影响。1. 对于in和exists:in通常通过hash连接操作,效率取决于两个表的大小,当表相当时,两者性能相近。如果子查询表大,用exists;反之,子查询表小,用in。如表A(小表)与表B(大表)的查询。2...

Sql 语句中 IN 和 EXISTS 的区别及应用
IN与EXISTS的区分:IN适用于子查询结果集小、主查询表大且有索引的场景;EXISTS适用于主查询记录少、子查询表大且有索引的场景。主要区别在于驱动顺序改变,影响性能。IN与EXISTS性能比较:IN使用hash连接,EXISTS使用循环与内表查询。认为EXISTS总是比IN效率高的说法是不准确的。not in与not exists:使用...

sql中in和exists的区别效率问题 转
in和exists in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。 如果查询的两个表大小相当,那么用in和exists差别不大。如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in ...

SQL关于IN和EXISTS的区别?
IN 其实与等于相似,比如in(1,2) 就是 = 1 or = 2的一种简单写法,所以一般在元素少的时候使用IN,如果多的话就用exists exists的用法跟in不一样,一般都需要和子表进行关联,而且关联时,需要用索引,这样就可以加快速度。你的SQL语句用NOT EXISTS可以写成 select MC001 from BOMMC WHERE NOT ...

SQL查询中in和exists的区别分析
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。如果查询的两个表大小相当,那么用in和exists差别不大。如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:例如:表A(小...

SQL中IN和EXISTS用法的区别
一、EXISTS 并非总比IN 快,究竟应该选用 IN 还是 EXISTS ,可参考以下分析:1、Select * from t1 where x in ( select y from t2 )相当于 select from t1, ( select distinct y from t2 ) t2 where t1.x = t2.y;2、select * from t1 where exists ( select null from t2 where y ...

sql exist和in的区别及查询效率比较
SQL查询中in和exists的区别分析 select * from A where id in (select id from B);select * from A where exists (select 1 from B where A.id=B.id);对于以上两种情况,in是在内存里遍历比较,而exists需要查询数据库,所以当B表数据量较大时,exists效率优于in。1、IN()语句内部工作原理 ...

相似回答