SQL中 exists和in的区别是什么啊?

 我来答
day忘不掉的痛
推荐于2017-10-10 · 知道合伙人数码行家
day忘不掉的痛
知道合伙人数码行家
采纳数:62646 获赞数:223934
本人担任公司网络部总经理多年,有充足的网络经验、互联网相关知识和资讯。

向TA提问 私信TA
展开全部
1.exist,not exist一般都是与子查询一起使用. In可以与子查询一起使用,也可以直接in (a,b.....)。
2.exist会针对子查询的表使用索引. not exist会对主子查询都会使用索引. in与子查询一起使用的时候,只能针对主查询使用索引. not in则不会使用任何索引. 注意,一直以来认为exists比in效率高的说法是不准确的。
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。
zk329754551
推荐于2017-09-15 · TA获得超过251个赞
知道小有建树答主
回答量:216
采纳率:0%
帮助的人:115万
展开全部
11. 用EXISTS替代IN、用NOT EXISTS替代NOT IN
在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率. 在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历). 为了避免使用NOT IN ,我们可以把它改写成外连接(OUTER JOINS)或NOT EXISTS.
例子:(高效)SELECT * FROM EMP (基础表) WHERE EMPNO > 0 AND EXISTS (SELECT ‘X' FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = ‘MELB’)
(低效)SELECT * FROM EMP (基础表) WHERE EMPNO > 0 AND DEPTNO IN(SELECT DEPTNO FROM DEPT WHERE LOC = ‘MELB’)
12. 用EXISTS替换DISTINCT
当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT. 一般可以考虑用EXIST替换, EXISTS 使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果。
例:(低效): SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D , EMP E WHERE D.DEPT_NO = E.DEPT_NO
(高效): SELECT DEPT_NO,DEPT_NAME FROM DEPT D WHERE EXISTS ( SELECT ‘X' FROM EMP E WHERE E.DEPT_NO = D.DEPT_NO);
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2fd3fc6
2011-07-28 · 超过25用户采纳过TA的回答
知道答主
回答量:77
采纳率:66%
帮助的人:41.2万
展开全部
exists是存在的意思,检查是否存在这一数据;而in是指在哪一字段数据里,例如:select * from admin where id in ('部门')
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2011-07-28 · TA获得超过308个赞
知道小有建树答主
回答量:236
采纳率:0%
帮助的人:206万
展开全部
exists是 检查是否存在,比如说是否存在某张表,
而 in 的话 举个例子
select * from Student where stuId in(1,2,3,4)
就表示查询 Student表中stuId为1,2,3,4的四个学生
也可以这样写select * from Student where stuId in(select stuId from Student where sex='男')
这是 子查询, in关键字多数在 子查询中用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sxdtgsh
2011-07-28 · TA获得超过2221个赞
知道小有建树答主
回答量:913
采纳率:75%
帮助的人:799万
展开全部
Exists是存在判断,只要有其中一个存在就返回。
in是返回所有包含在in中的数据。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式