SQL语句中 in和exist区别

如题所述

两者功能差不多
in和exists效率一样,用哪个都可以。但是一般来说,not exists比not in速度快(在not exists子查询里的语句比较复杂时,有可能比not in慢),最好将not in 转化成not exists。另外,要注意的是,in或者not in里面都不能有null值,否则会得不到结果。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-08-11
in 和 exists 在功能上差不多,在语法上写法不一样。
exists在效率上会快一些。
第2个回答  2012-08-11
一个是进入,在的意思,另一个是接下来的意思吧

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 exist和in的区别及查询效率比较
对于以上两种情况,in是在内存里遍历比较,而exists需要查询数据库,所以当B表数据量较大时,exists效率优于in。1、IN()语句内部工作原理 IN()只执行一次,它查出B表中的所有id字段并缓存起来。之后,检查A表的id是否与B表中的id相等,如果相等则将A表的记录加入结果集中,直到遍历完A表的所有记录。

SQL查询中in和exists的区别分析
IN 确定给定的值是否与子查询或列表中的值相匹配。EXISTS 指定一个子查询,检测行的存在。比较使用 EXISTS 和 IN 的查询 这个例子比较了两个语义类似的查询。第一个查询使用 EXISTS 而第二个查询使用 IN。注意两个查询返回相同的信息。USE pubs GO SELECT DISTINCT pub_name FROM publishers WHERE ...

SQL语句中 in和exist区别
除了第一类in语句都是可以转化成exists 语句的,一般编程习惯应该是用exists而不用in.A,B两个表,(1)当只显示一个表的数据如A,关系条件只一个如ID时,使用IN更快:select * from A where id in (select id from B)(2)当只显示一个表的数据如A,关系条件不只一个如ID,col1时,使用IN就...

SQL中IN和EXISTS用法的区别
.用EXISTS替代IN、用NOT EXISTS替代NOT IN 在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率. 在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的...

【PL\/SQL】EXISTS 函数 比 IN 更优
Exist函数的用法,比IN函数在某些场景下更优,主要体现在返回数据的效率和使用范围上。Exist函数在SQL查询中,常被用于在主查询的where筛选语句后,通过子查询实现表间匹配。Exist函数的语法格式为:Exist(查询结果集)。如果子查询返回结果集有记录,则判定为真,否则为假。其逻辑类似于:查询结果集存在则...

sql中in和exists的具体区别
使用in的时候,执行过程不能使用索引;使用exists的时候,可以使用索引,所定义一般情况下,exists效率高些。(要看具体情况,如表的大小,驱动表的选择)

exists和in有什么区别
EXISTS在SQL中的作用是:检验查询是否返回数据。select a.* from tb a where exists(select 1 from tb where name =a.name)返回真假,当 where 后面的条件成立,则列出数据,否则为空。exists强调的是是否返回结果集,不要求知道返回什么。比如:select name from student where sex = 'm' and ...

相似回答
大家正在搜