sqlinexists区别 sql使用exists代替in

关于sqlinexists区别,sql使用exists代替in这个很多人还不知道,今天小深来为大家解答以上的问题,现在让我们一起来看看吧!

sqlinexists区别 sql使用exists代替insqlinexists区别 sql使用exists代替in


sqlinexists区别 sql使用exists代替in


sqlinexists区别 sql使用exists代替in


1、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核心模块将在子查询的条件一旦满足后,立刻返回结果。

2、例:(低效): 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);exists是存在的意思,检查是否存在这一数据;而in是指在哪一字段数据里,例如:select from admin where id in ('部门')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 ='男')这是 子查询, in关键字多数在 子查询中用Exists是存在判断,只要有其中一个存在就返回。

3、in是返回所有包含在in中的数据。

4、select from tablewhere column in (xxxx)满足条件的数据 会查询出来select from tablewhere exists(xxxxx)满足不满足的 条件的数据都会出来。

本文到这结束,希望上面文章对大家有所帮助。

版权声明:图片、内容均来源于互联网 如有侵权联系836084111@qq.com 删除