`

oracle中的exists 和not exists 用法及查询效率

阅读更多
有两个简单例子,以说明 “exists”和“in”的效率问题


1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ;   
  
   -- T1数据量小而T2数据量非常大时,T1<<T2 时,1) 的查询效率高。   
  
2) select * from T1 where T1.a in (select T2.a from T2) ;   
  
   -- T1数据量非常大而T2数据量小时,T1>>T2 时,2) 的查询效率高。 
 


exists 用法:

请注意 1)句中的有颜色字体的部分 ,理解其含义;

其中

select 1 from T2 where T1.a=T2.a  
--相当于一个关联表查询,相当于 
select 1 from T1,T2     where T1.a=T2.a 
 


但是,如果你当当执行 1) 句括号里的语句,是会报语法错误的,这也是使用exists需要注意的地方。

“exists(xxx)”就表示括号里的语句能不能查出记录,它要查的记录是否存在。

因此“select 1”这里的 “1”其实是无关紧要的,换成“*”也没问题,它只在乎括号里的数据能不能查找出来,是否存在这样的记录,如果存在,这 1) 句的where 条件成立。


in 的用法:

继续引用上面的例子

select * from T1 where T1.a in (select T2.a from T2)
   


这里的“in”后面括号里的语句搜索出来的字段的内容一定要相对应,一般来说,T1和T2这两个表的a字段表达的意义应该是一样的,否则这样查没什么意义。

打个比方:T1,T2表都有一个字段,表示工单号,但是T1表示工单号的字段名叫“ticketid”,T2则为“id”,但是其表达的意义是一样的,而且数据格式也是一样的。这时,用 2)的写法就可以这样:

select * from T1 where T1.ticketid in (select T2.id from T2)   
  
Select name from employee where name not in (select name from student);   
  
Select name from employee where not exists (select name from student); 
 
第一句SQL语句的执行效率不如第二句。

通过使用EXISTS,Oracle会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时间。Oracle在执行IN子查询时,首先执行子查询,并将获得的结果列表存放在一个加了索引的临时表中。在执行子查询之前,系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询。这也就是使用EXISTS比使用IN通常查询速度快的原因。
分享到:
评论

相关推荐

    oracle数据库关于exists使用

    在Oracle数据库中,`EXISTS` 是一种常用的子查询操作符,用于判断子查询是否有结果返回。如果子查询至少返回一行数据,则 `EXISTS` 表达式的结果为真;反之,则为假。 **1.1 Exists 的基本语法** ```sql SELECT ...

    sql in,exists,not in,not exists区别

    IN、EXISTS、NOT IN、NOT EXISTS 是 SQL 中四种常用的条件判断运算符,它们之间的区别主要体现在使用场景、执行效率和语法结构上。 IN IN 是一种条件判断运算符,用于判断某个值是否存在于一个列表中。其基本语法...

    oracle中not exists对外层查询的影响详解

    在Oracle数据库中,`NOT EXISTS` 子句常用于查询中,以排除某些特定条件的记录。然而,它对查询性能的影响可能并不总是直观的,尤其是在涉及到外层查询时。本文将深入探讨`NOT EXISTS`如何影响外层查询,并通过示例...

    oracle-use.rar_Oracle drop use_oracle

    "SQL中IN,NOT IN,EXISTS,NOT EXISTS的用法和差别"是SQL查询的基础。`IN`用于判断某值是否在给定的集合中,`NOT IN`则相反。`EXISTS`和`NOT EXISTS`则更注重子查询的存在与否,而非具体值的比较。例如,`SELECT * ...

    Oracle树查询及相关函数

    在Oracle中,树查询主要依赖于`SELECT...START WITH...CONNECT BY...PRIOR`语法,这个语法让我们能够按照层级结构遍历数据。本文将深入探讨这个语法以及与之相关的函数,并通过实例来说明它们的用法。 首先,我们...

    Oracle中常用的通配符

    通过本文,我们将详细介绍Oracle中常见的通配符及其用法,帮助读者更好地理解和运用这些符号,从而提高SQL查询的灵活性和效率。 #### 一、通配符概述 在Oracle SQL中,通配符主要用于`LIKE`操作符中,用于模糊查询...

    Oracle Database 11g SQL Fundamentals 英文原版

    3. 子查询:理解嵌套查询的概念,掌握IN、NOT IN、EXISTS、NOT EXISTS等子查询用法。 4. 分区和索引:了解Oracle的分区技术,如何提高查询性能,以及索引的创建、管理和使用。 5. 视图:创建和使用视图以简化复杂...

    Oracle中Driving_site Hint的用法

    对于使用DBLINK远程访问数据库的SQL,ORACLE可以有两种选择: 第一:在Remote数据库执行该段SQL; 第二:在Local数据库执行该段SQL; 所以优化策略和思路: 策略:远程访问,网络传输占很大部分,优化原则,减少网络...

    子查询课程实验

    - 在Oracle等数据库系统中,可以使用窗口函数(如ROW_NUMBER(), RANK(), DENSE_RANK()等)在子查询中进行分析操作,提供排序和分组后的聚合计算。 8. 优化子查询性能: - 使用索引来提高子查询的执行效率。 - ...

    数据库常见操作语句小结

    对于Oracle数据库中的子查询使用,特别是exists和not exists的用法,是SQL查询优化的重要知识点。exists用于检查子查询是否返回结果集,如果子查询返回至少一行,那么exists的结果就是TRUE,主查询将被执行。反之,...

    Oracle通配符,运算符的使用

    本文详细介绍了Oracle数据库中常用的通配符和运算符,包括它们的定义、用法以及具体的应用示例。通过学习这些内容,您可以更加熟练地进行数据检索和处理,从而提高工作效率。希望本文能够帮助您更好地理解和掌握...

    oracle面试题目

    - 子查询:理解嵌套查询的概念,以及如何使用IN、NOT IN、EXISTS和NOT EXISTS子查询。 - 分区查询:了解如何在大型表上使用分区来提高查询性能。 2. 数据库架构: - 表空间:理解表空间的用途,以及如何创建、...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     删除“开始”/“程序”中所有Oracle的组和图标。  删除所有与Oracle相关的目录,包括: C:\Program file\Oracle目录。 ORACLE_BASE目录。 C:\Documents and Settings\系统用户名、LocalSettings\Temp目录下的...

    Oracle_Database_11g完全参考手册.part3/3

    《Oracle Database 11g完全参考手册》全面详细地介绍了Oracle Database 11g的强大功能,阐述了如何使用所有的新增功能和工具,如何执行功能强大的SOL查询,如何编写PL/SQL和SQL*Plus语句,如何使用大对象和对象,...

    ORACLE 面试题集锦

    在ORACLE面试中,面试官通常会从多个角度考察候选人的技能和知识,包括但不限于基础知识、SQL查询能力、数据库管理、性能优化以及问题解决能力。以下是一些重要的ORACLE面试知识点: 1. **Oracle基础知识**: - ...

    Oracle_Database_11g完全参考手册.part2/3

    《Oracle Database 11g完全参考手册》全面详细地介绍了Oracle Database 11g的强大功能,阐述了如何使用所有的新增功能和工具,如何执行功能强大的SOL查询,如何编写PL/SQL和SQL*Plus语句,如何使用大对象和对象,...

    Oracle入门教程

    高级查询章节深入到复杂的查询技巧,如使用EXISTS和NOT EXISTS子句。 Oracle提供了丰富的数据字典视图,存储了数据库对象的元数据信息,第九章介绍如何查询数据字典,这对于数据库管理员维护数据库至关重要。第十章...

    面试Oracle没问题只要做会i这些题

    - 子查询:嵌套查询,IN, EXISTS, NOT EXISTS等操作。 3. **索引** - B树索引:如何创建,使用,优化索引,以及它们对查询性能的影响。 - Bitmap索引:适合于低选择性查询的场景。 - 索引的选择性与唯一性:...

    oracle数据库学习笔记

    ### Oracle 数据库学习笔记 #### Oracle DML 数据库操作语言...以上是关于 Oracle 数据库的一些基础知识和操作技巧,涵盖了 DML 语言、数据完整性、SQL 查询技巧等多个方面,这些知识点是进行数据库开发和管理的基础。

    ORACLE SQL性能优化.rar

    5. **查询重构**:优化查询逻辑,如避免在WHERE子句中使用NOT IN、IN和OR操作,转而使用JOIN或EXISTS。 6. **聚合函数与子查询优化**:合理使用GROUP BY、HAVING和子查询,避免在子查询中返回大量数据,尽量减少...

Global site tag (gtag.js) - Google Analytics