数据库中IN 和EXISTS有啥区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库中IN 和EXISTS有啥区别?相关的知识,希望对你有一定的参考价值。

没有什么区别,两者都是包含的意思,但是esists的效率比in要高。建议别用in,影响效率 ,如果只有两三个条件,就用or代替 ,如果值 比较多,就用exists.例如 select * from table where ( name = '1' or name ='2') 别写成name in ('1','2')如果数据量比较大select * from table where name exists (select name from table2); 参考技术A 在SQL中,同样的查询很多情况下,既可以用in的用法来写,也可以用exists来写。in写法比exists的写法要容易读,好理解,但是当数据量大的时候,exists的效率要远高于in的写法。 参考技术B in 是在你查找的范围中 exists 是判断是否存在 参考技术C in是遍历内存操作,esists是查询操作,当主表数据大于字表数据时,用in,当情况相反时用esists

EXISTS 和 IN 的区别

exists子句的用法

select * from 表1 where exists (select * from 表2 where 表1.列名=表2.列名);

exists子句返回的结果并不是从数据库中检索出的结果集,而是一个布尔值。如果exists子句中的select子句查询到结果,exists子句就返回true,反之返回false。

因此exists子句中的select子句选择的列并不重要,重要的是exists子句中的select子句中的where子句的筛选条件。

exists子句会对外表(即表1)用loop逐条记录查询,每次查询都会查看exists中的select语句,如果select子句返回记录行(无论返回记录行是多少,只要能返回),exists就会返回true,则外表中的当前记录就会被检索出来;如果select子句没有返回记录行,exists就会返回false,则外表中的当前记录就会被丢弃。

not exists 与 exists相反,即当exists子句中有结果集返回时,loop到的当前记录会被丢弃;反之会被检索出来。

in 子句的用法

select * from 表1 where 列名 in (select 列名 from 表2 where 筛选条件);

in查询相当于多个or条件的叠加。

in子句需要先将子查询的记录全部查出来。注意in子句中的子查询返回的结果集必须只有一个字段。假设子查询返回的结果集有m条记录,在进行m次查询。

exists 和 in 的效率

当两个表的大小相当时,用exists和in的效率差别不大

如果两个表一个大一个小,则子查询表大的用exists,子查询表小的用in。

以上是关于数据库中IN 和EXISTS有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

数据库中in和exists关键字的区别

EXISTS 和 IN 的区别

SQL中IN和EXISTS用法的区别

sql 中的in 和exists区别

数据库sql语句的exists和in的区别

Oracle中exists与in的区别