码迷,mamicode.com
首页 > 其他好文 > 详细

EXISTS 和 IN 的区别

时间:2018-10-13 02:47:41      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:子查询   sel   有一个   code   筛选   查看   结果   字段   大小   

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 的区别

标签:子查询   sel   有一个   code   筛选   查看   结果   字段   大小   

原文地址:https://www.cnblogs.com/0820LL/p/9781256.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!