EXISTS 和 IN 的区别
Posted 0820ll
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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。
以上是关于EXISTS 和 IN 的区别的主要内容,如果未能解决你的问题,请参考以下文章