EXISTS的用法

EXISTS的用法EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False。哦?那这个应该怎么来理解呢,通俗的来讲的话,你大可以把EXISTS当作IN来用。当然我不是说它们两个一样,只是说大体上它们的用法差不多,因为初学者对in要了解的多一些,所

大家好,欢迎来到IT知识分享网。EXISTS的用法

  EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False。

  哦?那这个应该怎么来理解呢,通俗的来讲的话,你大可以把 EXISTS 当作 IN 来用。当然我不是说 它们两个 一样,只是说大体上 它们的用法差不多,因为初学者对in要了解的多一些,所以可以先这样认为。

  首先来看 select…from…where… … in(select…from…)

       Select…from…where…exists(select…from…)

  在句式上看都差不多,区别在于in后面的子句里返回了查询查到的一些具体的值,而exists的子句则是返回了一个根据查询结果集空或非空来决定的布尔值。

  再来看具体执行过程,

    exists:执行外部的查询 – 对于外部查询结果的每一行都进行一次exists括号里的子查询(执行子查询时都会引用外部查询中当前行的值) – 用子查询的结果(true/false)来决定外部查询的某一行是否作为结果输出。切记每次外部查询的每一行结果都会执行一次子查询。

    In:执行子查询得到一个结果集 – 主查询再去结果集里去找符合要求的字段列表去.符合要求的输出,反之则不输出。

  读到此处,关于效率问题跃然而出。

    in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为exists比in效率高的说法是不准确的。如果查询的两个表大小相当,那么用in和exists差别不大;如果两个表中一个较小一个较大,则子查询表大的用exists,子查询表小的用in即可。

大家在学习与工作灵活应用。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/34682.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信