数据库:番外篇-IN和EXISTS的用法和区别的比较

转载 2018年04月17日 15:18:07
1.exist,not exist一般都是与子查询一起使用. In可以与子查询一起使用,也可以直接in (a,b.....)。
2.exist会针对子查询的表使用索引. not exist会对主子查询都会使用索引. in与子查询一起使用的时候,只能针对主查询使用索引. not in则不会使用任何索引. 注意,一直以来认为exists比in效率高的说法是不准确的。

in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。
IN 其实与等于相似,比如in(1,2) 就是 = 1 or = 2的一种简单写法,所以一般在元素少的时候使用IN,如果多的话就用exists
exists的用法跟in不一样,一般都需要和子表进行关联,而且关联时,需要用索引,这样就可以加快速度。


IN 
确定给定的值是否与子查询或列表中的值相匹配。 

EXISTS 
指定一个子查询,检测行的存在。 

比较使用 EXISTS 和 IN 的查询 

exists()后面的子查询被称做相关子查询 他是不返回列表的值的.只是返回一个ture或false的结果,其运行方式是先运行主查询一次 再去子查询里查询与其对应的结果 如果是ture则输出,反之则不输出.再根据主查询中的每一行去子查询里去查询. 

in()后面的子查询 是返回结果集的,换句话说执行次序和exists()不一样.子查询先产生结果集,然后主查询再去结果集里去找符合要求的字段列表去.符合要求的输出,反之则不输出.

文章转于:https://blog.csdn.net/u012110719/article/details/48094181

--------------------------------------------------------------------------------

                SELECT
			tct.id teamId,tct.name teamName,tclo.id centerId, tclo.`name` centerName,tcl.id lawfirmId,tcl.name lawfirmName
		FROM
			t_coa_team tct
		left join t_coa_lawfirm_org tclo
			on tct.center_id = tclo.id
		left join t_coa_lawfirm tcl
			on tct.lawfirm_id = tcl.id
		WHERE
			EXISTS (
		SELECT
			1
		FROM
			t_coa_case_archive_auth tccaa
		WHERE
			tccaa.case_id = 555
			AND tct.id = tccaa.team_id
			)

先查询t_coa_case_archive_auth里面case_id=555有多少条记录存在

在用team_id和t_coa_team的id进行关联,存在才会输出


计算机基础win7的基本用法

-
  • 1970年01月01日 08:00

SQL关于IN和EXISTS的用法和区别的比较

1.exist,not exist一般都是与子查询一起使用. In可以与子查询一起使用,也可以直接in (a,b.....)。 2.exist会针对子查询的表使用索引. not exist会对主子查...
  • u012110719
  • u012110719
  • 2015-08-29 23:41:45
  • 3312

数据库in/exists用法和效率大揭密

之前没注意到这两者的差别。 其实,这里还是有一定的陷阱的。 先看下代码: select count(*) from ( ( select sc.xh from "JISUANJI"."S...
  • zhbitxhd
  • zhbitxhd
  • 2014-03-22 21:19:45
  • 8338

数据库 EXISTS的用法

EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False EXISTS 指定一个子查询,检测 行 的存在。 语法: EXISTS s...
  • amanicspater
  • amanicspater
  • 2017-10-23 09:37:08
  • 400

sql中exists的用法及与in的比较

EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False 有一个查询如下: 复制代码 代码如下: SELECT c.Cu...
  • zisongjia
  • zisongjia
  • 2016-09-19 11:52:32
  • 767

[数据库与SQL] - No.1 in、exists、all、any用法与区别

在使用数据库SQL中,当情况比较复杂时,我们需要使用嵌套查询。在嵌套查询是,我们经常会使用到exists、in、any、all等,在这里我就来辨析一下其之前的区别和关系 exists和in: ex...
  • tjuyanming
  • tjuyanming
  • 2017-08-09 21:34:22
  • 838

sql语句中exists和in用法的区分

初学java两个多月,这两天在整理老师的笔记对数据库中的exists和in的用法分不清楚,从网上搜了些资料,作了点总结。 一、问题起因 起初是由两条语句执行结果不同,语句如下: --分析以下结果...
  • U___U
  • U___U
  • 2015-03-27 15:25:43
  • 5014

sql中exists和not exists用法

之所以要说这个问题,是因为项目中用到了not exists,但两者写的语句只有一点差别,结果一个有问题了,一个没问题。具体问题下面详细说明,先来看看exists如何应用。 exists: ...
  • u013038643
  • u013038643
  • 2017-05-14 11:16:54
  • 12403

sql语句中的 in 、not in 、exists、not exists 详细用法说明和差别----not in失效

 2016攒课第二期之你听课我买单,快来攒你想听的课!     架构免费公开课报名     【UDN沙龙】Intel大拿分享HTML5时代的跨平台开发解 ...
  • hewusheng10
  • hewusheng10
  • 2016-04-15 11:16:43
  • 1371

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

数据库中in和exists关键字的区别       in 是把外表和内表作hash join,而exists是对外表作loop,每次loop再对内表进行查询。      一直以来认为exist...
  • zhanglu0223
  • zhanglu0223
  • 2013-10-18 17:54:17
  • 7746
收藏助手
不良信息举报
您举报文章:数据库:番外篇-IN和EXISTS的用法和区别的比较
举报原因:
原因补充:

(最多只允许输入30个字)