您的位置:广东在线游戏网 > 游戏资讯 > 在SQL语句中,in和exist的区别是什么?-sql中in和exist语句的区别?

在SQL语句中,in和exist的区别是什么?-sql中in和exist语句的区别?

作者:广东在线游戏网日期:

返回目录:游戏资讯


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

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

比较使用 EXISTS 和 IN 的查询

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

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

in是把外表和内表作hash连接,而exists是对外表作loop循环。


IN 

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


EXISTS 

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


比较使用 EXISTS 和 IN 的查询 


这个例子比较了两个语义类似的查询。第一个查询使用 EXISTS 而第二个查询使用 IN。注意两个查询返回相同的信息。 


USE pubs 
GO 
SELECT DISTINCT pub_name 
FROM publishers 
WHERE EXISTS 
(SELECT * 
FROM titles 
WHERE pub_id = publishers.pub_id 
AND type = 'business') 
GO 
-- Or, using the IN clause: 
USE pubs 
GO 
SELECT distinct pub_name 
FROM publishers 
WHERE pub_id IN 
(SELECT pub_id 
FROM titles 
WHERE type = 'business') 
GO


下面是任一查询的结果集: 


pub_name 

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

Algodata Infosystems 

New Moon Books 


(2 row(s) affected)

 

exits 相当于存在量词:表示集合存在,也就是集合不为空只作用一个集合.例如 exist P 表示P不空时为真; not exist P表示p为空时 为真 in表示一个标量和一元关系的关系。例如:s in P表示当s与P中的某个值相等时 为真; s not in P 表示s与P中的每一个值都不相等时 为真

转载自http://wp19908.javaeye.com/blog/148024

在Oracle SQL中取数据时有时要用到in 和 exists 那么他们有什么区别呢? 


1 性能上的比较 

比如Select * from T1 where x in ( select y from T2 ) 

执行的过程相当于: 

select * 

  from t1, ( select distinct y from t2 ) t2 

where t1.x = t2.y; 


相对的 


select * from t1 where exists ( select null from t2 where y = x ) 

执行的过程相当于: 

for x in ( select * from t1 ) 

   loop 

      if ( exists ( select null from t2 where y = x.x ) 

      then 

         OUTPUT THE RECORD 

      end if 

end loop 

表 T1 不可避免的要被完全扫描一遍 


分别适用在什么情况? 

以子查询 ( select y from T2 )为考虑方向 

如果子查询的结果集很大需要消耗很多时间,但是T1比较小执行( select null from t2 where y = x.x )非常快,那么exists就比较适合用在这里 

相对应得子查询的结果集比较小的时候就应该使用in.

转载自http://hi.baidu.com/hopedaily/blog/item/56d23edbde87cd60d0164efe.html

in和exists

in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。

一直以来认为exists比in效率高的说法是不准确的。

如果查询的两个表大小相当,那么用in和exists差别不大。


如果两个表中一e799bee5baa6e997aee7ad94e58685e5aeb9366个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:


例如:表A(小表),表B(大表)

1:

select * from A where cc in (select cc from B)

效率低,用到了A表上cc列的索引;

select * from A where exists(select cc from B where cc=A.cc)

效率高,用到了B表上cc列的索引。

相反的

2:

select * from B where cc in (select cc from A)

效率高,用到了B表上cc列的索引;

select * from B where exists(select cc from A where cc=B.cc)

效率低,用到了A表上cc列的索引。

not in 和not exists

如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;

而not extsts 的子查询依然能用到表上的索引。

所以无论那个表大,用not exists都比not in要快。

in 与 =的区别

select name from student where name in ('zhang','wang','li','zhao');

select name from student where name='zhang' or name='li' or name='wang' or name='zhao'

的结果是相同的。



两者都能实现表功能查询,主要区别如下:

1、适用表的类型不同。

in是子查询为驱动表zhidao,外面的表为被驱动表,故适用于子查询结果集小而外面的表结果集大的情况。

exists是外面的表位驱动表,子查询里面的表为被驱动表,故适用于外面的表结果集小而子查询结果集大的情况。

2、子查询关联不同。

exists一般都是关联子查询。对于关联子查询,必须先执行外层查询,接着对所有通过过滤条件的记录,执行内层查询。外层查询和内层查询相互依赖,因为外层查询会把数据传递给内层查询。

in则一般都是非关联子查询,非关联子查询则必须先完成内层查询之后,外层查询才能介入。

3、执行次数不同。

IN 语句:只执行一次,确定给定的值是否与子查询或列表中的值相匹配。in在查询的时候,首先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。所以相对内表比较小的时候,in的速度较快。

EXISTS语句:执行次数根据表的长度而定。指定一个子查询,检测行的存在。遍历循环外表,然后看外表中的记录有没有和内表的数据一样的。匹配上就将结果放入结果集中。

参考资料来源:百度百科--In操作符

参考资料来源:百度百科--Exists

相关阅读

关键词不能为空

标签导航

fate所有系列包括剧场版观看顺序是啥,好多搞得我都不知道怎... fate系列有几部动画和剧场版?都是什么线?观看顺序是什么?... 求fate系列动漫观看顺序包括剧场版和外传 求个顺序OTZ 观看fate系列动漫的顺序 跪求武装突袭:策略汉化版安卓手机 安卓上类似武装突袭的游戏 有没有类似武装突袭编辑器的手机游戏 武装突袭3中文版 哪里下载 滚雪球效应的生活中的滚雪球效应 滚雪球什么意思 滚雪球效应的确切定义是什么? 滚雪球效应的滚雪球效应的道理所在 请问wow中银色黎明在那?哪里可接银色黎明的任务?(截图) 魔兽世界提布的炽炎长剑哪里掉啊,要准确的,有把主手的了,或者... 魔兽世界 任务获得一把单手剑 像激光剑怎么做啊? WOW的“黎明之刃”一把单手剑,是哪个连续任务???知道的告... 勿忘我和什么花搭配比较好看?送给刚毕业的人? 勿忘我花的图片,好看一点的,最好是动漫的(要蓝色的啊) 勿忘我有什么颜色 勿忘我花的图片 在SQL语句中,in和exist的区别是什么? SQL语句中 in和exist区别 SQL查询中in和exists的区别分析 SQL关于IN和EXISTS的区别? 无聊中 给几个经典单机游戏 国内外均可 仙剑轩辕剑系列除外 ... 有哪些比较经典的国产单机游戏(角色扮演类的) 求仙剑系列的剧情简介,越全越好,谢谢大家了! 求经典的3D版单机游戏,只要角色扮演的!!! 魔塔60层全部攻略,要求非常详细! 4399魔塔60层65层神符怎么动 小游戏魔塔60层的第64层怎么过呀? 魔塔60层小游戏里第13层的宝剑怎么取 武装突袭2箭头行动怎么操作? 我这配置玩武装突袭2箭头行动怎么样,怎么设置视图? 武装突袭2箭头行动 怎么操作啊? 武装突袭2:箭头行动的操作说明 热血篮球 有秘籍吗? 热血篮球 有秘籍吗??有没有朋友知道? 热血篮球 有秘籍吗?.求高手解答 FC热血篮球秘籍 洗衣机的常识有哪些? 当今洗衣机的使用十分普遍,它把人们从手工洗衣这一繁琐的家务中... 生活常识小窍门 洗衣机的资料 魔域私服!怎么提取商店数据库! 谁有最新魔域单机版?要官方数据库的,不要私服、修改之类的 魔域单机版怎么添加物品到MS商店 魔域单机版的数据库在哪 武装突袭2这个配置能玩吗? 使命召唤8和武装突袭2哪个需要配置高 武装突袭2配置要求高吗? 武装突袭2配置要求 以前在手机上玩过一款3D的赛车游戏,上面好像有3个大的板块,... 求之前玩过的一款赛车游戏,重赏!!!