`
s343174147
  • 浏览: 33378 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

exists

 
阅读更多
in和select的技术原理:
㈠ in:先进行子查询,再进行主查询
㈡ exists:先进行主查询,再到子查询中过滤

in和exists的使用建议:
Ⅰ 如果限制性强的条件在子查询,则使用in
Ⅱ 如果限制性强的条件在主查询,则使用exists
可用查询结果集来理解上面这段话,采用最优化匹配原则:拿最小记录匹配大记录。限制性强,则结果集小;反之,则大。
注释:
① 使用exists可以将子查询结果定位常量,不影响查询结果,而且,效率高。
比如:
select e.*
from emp e
where exists
(select 1 from dept d
where e.deptno=d.deptno and
d.dname='SALES')

② not in可能会因为null而改变其行为导致和not exists结果集有出入。然而,在相关子查询下,not in和not exists的结果集是一样的。

sql exists和not exists用法



exists       (sql       返回结果集,为真)  
not       exists       (sql       不返回结果集,为真)
如下:
表A
ID   NAME  
1       A1
2       A2
3       A3

表B
ID   AID   NAME
1       1       B1
2       2       B2  
3       2       B3

表A和表B是1对多的关系   A.ID   =>   B.AID

SELECT   ID,NAME   FROM   A   WHERE   EXIST   (SELECT   *   FROM   B   WHERE   A.ID=B.AID)
执行结果为
1       A1
2       A2
原因可以按照如下分析
SELECT   ID,NAME   FROM   A   WHERE   EXISTS   (SELECT   *   FROM   B   WHERE   B.AID=1)
---> SELECT   *   FROM   B   WHERE   B.AID=1有值,返回真,所以有数据

SELECT   ID,NAME   FROM   A   WHERE   EXISTS   (SELECT   *   FROM   B   WHERE   B.AID=2)
---> SELECT   *   FROM   B   WHERE   B.AID=2有值,返回真,所以有数据

SELECT   ID,NAME   FROM   A   WHERE   EXISTS   (SELECT   *   FROM   B   WHERE   B.AID=3)
---> SELECT   *   FROM   B   WHERE   B.AID=3无值,返回假,所以没有数据

NOT   EXISTS   就是反过来
SELECT   ID,NAME   FROM   A   WHERE NOT   EXIST   (SELECT   *   FROM   B   WHERE   A.ID=B.AID)
执行结果为
3       A3
===========================================================================
EXISTS   =   IN,意思相同不过语法上有点点区别,好像使用IN效率要差点,应该是不会执行索引的原因
SELECT   ID,NAME   FROM   A    WHERE ID   IN   (SELECT   AID   FROM   B)

NOT   EXISTS   =   NOT   IN   ,意思相同不过语法上有点点区别
SELECT   ID,NAME   FROM   A   WHERE ID NOT   IN   (SELECT   AID   FROM   B)



===========================================================================
EXISTS:

系统要求进行SQL优化,对效率比较低的SQL进行优化,使其运行效率更高,其中要求对SQL中的部分in/not in修改为exists/not exists



修改方法如下:

in的SQL语句


select *
  from univ_subject u
where u.per_id in (select c.per_id from colle_subject c);

修改为exists的SQL语句
select *
  from univ_subject u
where exists (select * from colle_subject c where u.per_id = c.per_id);
分享到:
评论

相关推荐

    in和exists的区别

    在Oracle数据库中,"IN"和"EXISTS"都是用于查询某个集合的元素是否存在于另一个集合中的关键字。然而,它们在处理数据时的效率和适用场景有所不同,这主要取决于涉及的数据量以及表之间的关联。 首先,让我们来看看...

    EXISTS_和_NOT_EXISTS

    在SQL查询中,`EXISTS` 和 `NOT EXISTS` 子句是两个非常重要的条件运算符,用于在数据检索时筛选满足特定条件的记录。它们主要用于子查询,帮助我们检查主查询的结果集是否存在匹配的子查询结果。让我们深入探讨这两...

    sql exists和not exists用法

    ### SQL EXISTS 和 NOT EXISTS 的用法详解 在SQL查询中,`EXISTS`与`NOT EXISTS`是非常实用的子查询操作符,它们主要用于检测是否存在满足一定条件的数据行。相较于`IN`、`NOT IN`等操作,`EXISTS`与`NOT EXISTS`...

    Delphi FileExists检查文件是否存在

    在Delphi编程环境中,`FileExists`函数是一个非常实用的工具,它用于检查指定路径的文件是否实际存在于文件系统中。这个函数属于`System.IOUtils`单元,因此在使用前需要确保该单元已经被导入到你的工程中。下面将...

    exists SQL用法详解、exists和not exists的常用示例

    在SQL查询中,`EXISTS`和`NOT EXISTS`是两个非常重要的子查询操作符,它们主要用于判断子查询是否返回结果。本篇文章将详细介绍这两个关键字的用法,并通过实例进行解析。 首先,`EXISTS`的语法是:主查询中的条件...

    经典SQL查询总结关于Exists,not Exists.in ,not in效率的说明。

    ### 经典SQL查询总结关于Exists, not Exists, IN, not IN 效率的说明 在数据库查询操作中,存在着多种方法来实现相似的功能,但不同的实现方式在性能上可能会有显著差异。本文将深入探讨 SQL 中 `EXISTS`, `NOT ...

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

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

    function_exists函数详解

    ### function_exists() 函数详解 在PHP编程语言中,`function_exists()` 是一个非常实用的内置函数,用于检查指定的函数是否已经定义。这个函数在处理动态调用或需要判断某些函数是否存在时非常有用。 #### 函数...

    sql server2005 exists使用方法

    ### SQL Server 2005 EXISTS 使用方法详解 #### 一、EXISTS 子句概述 在 SQL Server 2005 中,`EXISTS` 是一个非常实用的子句,用于检查子查询是否返回至少一行数据。如果子查询返回至少一行数据,则 `EXISTS` ...

    mysql多表查询和EXISTS查询性能对比

    ### MySQL多表查询和EXISTS查询性能对比 #### 测试环境 在进行MySQL多表查询与EXISTS查询的性能对比之前,首先需要了解测试环境的相关配置。虽然原文中并未给出具体的测试环境细节,但在实际操作中,这一步骤至关...

    exists用法说明.doc

    在SQL查询中,`EXISTS`子句是一个非常重要的存在性测试工具,它用于检查子查询是否返回至少一行数据。这个关键字通常与`WHERE`子句一起使用,以过滤出满足特定条件的记录。让我们深入探讨`EXISTS`及其反义词`NOT ...

    in和exists性能解析

    在数据库查询语言中,`IN` 和 `EXISTS` 子句是两种常见的用于关联两个表的方法,它们各自有其独特的性能特点和适用场景。本文将深入解析Oracle中`IN`与`EXISTS`的性能差异,以及如何根据具体需求选择最合适的查询...

    oracle中exists_和in的效率问题详解

    Oracle 中 EXISTS 和 IN 的效率问题详解 EXISTS 和 IN 都是 Oracle 中的集合操作符,但它们在使用和执行效率上有所不同。本文将深入探讨 EXISTS 和 IN 的使用场景、执行机制和效率问题。 EXISTS 的使用场景和机制 ...

    exists 和 not exists的详细解释

    exists 和 not exists的详细解释

    搞懂mysql的exists

    MySQL中的`EXISTS`子句是SQL查询语句中一种重要的条件判断操作,它用于测试子查询是否返回至少一行数据。在理解`EXISTS`的使用时,我们需要深入探讨其工作原理、优缺点以及与其他查询操作(如`IN`、`JOIN`)的对比。...

    oracle数据库关于exists使用

    ### Oracle数据库中Exists与In的使用详解 #### 一、Exists 的使用方法 在Oracle数据库中,`EXISTS` 是一种常用的子查询操作符,用于判断子查询是否有结果返回。如果子查询至少返回一行数据,则 `EXISTS` 表达式的...

    SQL里的EXISTS与IN

    ### SQL里的EXISTS与IN 在SQL查询语言中,`EXISTS` 和 `IN` 子句都是非常常用且重要的操作符,它们被广泛应用于复杂的查询条件中,特别是当需要检查某个子查询是否返回结果时。根据给定的信息,本文将详细解析`...

    sql中exists的用法

    SQL 中 EXISTS 的用法简介 exists 是 SQL 中最常用的子查询操作符之一,用于检测子查询是否返回至少一个记录。exists 的使用场景非常广泛,包括对多表之间的关系进行查询、检测记录的存在性等。 在 SQL 中,exists...

    浅析SQL中WHERE EXISTS子查询.pdf

    浅析SQL中WHERE EXISTS子查询 SQL(Structured Query Language)是一种功能强大、通用的关系数据库语言,而SQL语言的核心是SELECT语句,其中WHERE子句的条件表达式表现得灵活而复杂,和谓词DISJunctive所形成的嵌套...

    in和exists的区别与执行效率问题解析

    标题和描述均聚焦于SQL查询语句中"IN"与"EXISTS"的区别及执行效率问题,这是一个在数据库操作中非常关键的话题,尤其对于优化查询性能有着不可忽视的作用。下面,我们将深入探讨这两种语句的不同之处及其对执行效率...

Global site tag (gtag.js) - Google Analytics