SQL中 exists和in的区别是啥啊?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL中 exists和in的区别是啥啊?相关的知识,希望对你有一定的参考价值。
1.exist,not exist一般都是与子查询一起使用. In可以与子查询一起使用,也可以直接in (a,b.....)。2.exist会针对子查询的表使用索引. not exist会对主子查询都会使用索引. in与子查询一起使用的时候,只能针对主查询使用索引. not in则不会使用任何索引. 注意,一直以来认为exists比in效率高的说法是不准确的。
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。 参考技术A 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);本回答被提问者采纳 参考技术B exists是存在的意思,检查是否存在这一数据;而in是指在哪一字段数据里,例如:select * from admin where id in ('部门') 参考技术C 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关键字多数在 子查询中用 参考技术D Exists是存在判断,只要有其中一个存在就返回。
in是返回所有包含在in中的数据。
oracle中plsql与sqlplus的区别是啥啊?它们分别用来做啥啊?
一、SQL Plus是oracle提供的一种用户接口。类似于操作系统的命令行。用户可以通过在SQL Plus中输入命令来向数据库发 送命令,数据库也将处理结果通过SQL Plus呈现给用户。是数据库和用户的交互工具。二、PL/SQL则是oracle的过程化编程语言,定义了大量语法,用户可以遵循这些语法来定义程序块,以完成复杂的数据库操作。这些代码块可以作为数据库对象进行存储,有利于实现代码复用。程序块开发工作,照样可以在用户工具SQL Plus上完成。 参考技术A PLSQL是第三方公司为ORACLE使用人员开发的一个UI程序,好用,可以对ORACLE的性能和一些特性的东西提供了解决方案。SQLPLUS是ORACLE公司的随机安装产品,不太好用本回答被提问者采纳
以上是关于SQL中 exists和in的区别是啥啊?的主要内容,如果未能解决你的问题,请参考以下文章