sql中in和exist语句的区别?

除了效率,在功能上是否实现的功能相同吗?... 除了效率,在功能上是否实现的功能相同吗? 展开
 我来答
加百列windy
高粉答主

推荐于2019-11-11 · 每个回答都超有意思的
知道小有建树答主
回答量:2074
采纳率:100%
帮助的人:96.6万
展开全部

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

1、适用表的类型不同。

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

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

2、子查询关联不同。

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

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

3、执行次数不同。

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

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

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

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

悦己文化
高粉答主

推荐于2019-11-01 · 人群里也是很寂寞的。
悦己文化
采纳数:690 获赞数:51714

向TA提问 私信TA
展开全部

当A表数据与B表数据一样大时,in与exists效率差不多,可任选一个使用。in 和 exists的区别如下:

1、运用情况不同

sql中in适用于子查询得出的结果集记录较少,主查询中的表较大且又有索引的表,。sql中exist适用于外层的主查询记录较少,子查询中的表大,又有索引的时候。

2、驱动顺序不同

IN是先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。exists是以外层表为驱动表,先被访问。

3、对NULL值处理不同。

IN不对NULL进行处理,exists会对NULL值进行处理。

4、底层原理不同

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

参考资料:

百度百科-SQL数据库


本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
918984025
推荐于2017-09-14 · TA获得超过1063个赞
知道答主
回答量:94
采纳率:0%
帮助的人:77.4万
展开全部
in和exists
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。

如果两个表中一个较小,一个是大表,则子查询表大的用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'
的结果是相同的。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b310bac74
2010-01-20 · TA获得超过243个赞
知道小有建树答主
回答量:362
采纳率:100%
帮助的人:309万
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
石亮东
2010-01-20 · TA获得超过1217个赞
知道小有建树答主
回答量:2022
采纳率:66%
帮助的人:1412万
展开全部
完全可以.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式