ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

EXISTS的用法

2022-05-19 12:00:19  阅读:165  来源: 互联网

标签:... EXISTS exists 外部 查询 用法 select


  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即可。

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

标签:...,EXISTS,exists,外部,查询,用法,select
来源: https://www.cnblogs.com/iRyz/p/16287997.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有