SQL关于IN和EXISTS的区别?
请问2者到底有什么区别啊?selectMC001fromBOMMCWHEREMC001NOTIN(SELECTMD001FROMBOMMD)和selectMC001fro...
请问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个表里面的值,给我举下例子啊?
谢谢了 展开
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个表里面的值,给我举下例子啊?
谢谢了 展开
6个回答
展开全部
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)
exists的用法跟in不一样,一般都需要和子表进行关联,而且关联时,需要用索引,这样就可以加快速度。
你的SQL语句用NOT EXISTS可以写成
select MC001 from BOMMC WHERE NOT EXISTS (SELECT MD001 FROM BOMMD where BOMMC.MC001 = BOMMD.MD001)
展开全部
in 是把外表和内表作hash 连接
exists是对外表作loop循环,每次loop循环再对内表进行查询。
那些认为exists比in效率高的人,是不准确的。
如果查询的两个表大小相当,那么用in和exists差别不大。
exists是对外表作loop循环,每次loop循环再对内表进行查询。
那些认为exists比in效率高的人,是不准确的。
如果查询的两个表大小相当,那么用in和exists差别不大。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
in 的对象是值
exists 不返回值,只验证
exists 不返回值,只验证
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2009-07-11
展开全部
MD001有空值
试试如下
select MC001 from BOMMC WHERE MC001 NOT EXISTS (SELECT MD001 FROM BOMMD AND MD001 IS NOT NULL)
试试如下
select MC001 from BOMMC WHERE MC001 NOT EXISTS (SELECT MD001 FROM BOMMD AND MD001 IS NOT NULL)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
IN和EXISTS一般用于SELECT语句的WHERE子句中作为记录筛选的条件.
IN的一般语法格式为:列(或表达式)
IN(子查询),带IN的子查询只能返回一列值,如果IN前面的列(或表达式)和子查询返回的集合中的一个或一个以上的值相等,则条件为真;如果IN前面的列(或表达式)和子查询返回的集合中的所有值均不相等,则条件为假.
EXISTS子查询的一般格式为EXISTS(子查询),如果子查询包含任何行(有记录返回),则条件为真;如果子查询不包含任何行(无记录返回),则条件为假.由于EXISTS是判断记录的有无确定条件是否成立,并不关心返回的是什么值,因此EXISTS子查询的目标列通常为*.
IN的一般语法格式为:列(或表达式)
IN(子查询),带IN的子查询只能返回一列值,如果IN前面的列(或表达式)和子查询返回的集合中的一个或一个以上的值相等,则条件为真;如果IN前面的列(或表达式)和子查询返回的集合中的所有值均不相等,则条件为假.
EXISTS子查询的一般格式为EXISTS(子查询),如果子查询包含任何行(有记录返回),则条件为真;如果子查询不包含任何行(无记录返回),则条件为假.由于EXISTS是判断记录的有无确定条件是否成立,并不关心返回的是什么值,因此EXISTS子查询的目标列通常为*.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询