返回顶部
首页 > 资讯 > 数据库 >mysql中EXISTS和IN的使用方法比较
  • 802
分享到

mysql中EXISTS和IN的使用方法比较

2024-04-02 19:04:59 802人浏览 八月长安
摘要

1、使用方式: (1)EXISTS用法 select a.batchName,a.projectId from ucsc_project_batch a wher

1、使用方式:

(1)EXISTS用法


select a.batchName,a.projectId from ucsc_project_batch a where EXISTS (select b.id from ucsc_project b where a.projectId = b.id)

上面这条sql的意思就是:以ucsc_project_batch为主表查询batchName与projectId字段,其中projectId字段存在于ucsc_project表中。

EXISTS 会对外表ucsc_project_batch进行循环查询匹配,它不在乎后面的内表子查询的返回值是什么,只在乎有没有存在返回值,存在返回值,则条件为真,该条数据匹配成功,加入查询结果集中;如果没有返回值,条件为假,丢弃该条数据。

例如我们这里改变一下子查询的查询返回字段,并不影响外查询的查询结果:


select a.batchName,a.projectId from ucsc_project_batch a where EXISTS (select b.companyId,b.name from ucsc_project b where a.projectId = b.id)

(2)IN用法


select a.batchName,a.projectId from ucsc_project_batch a where a.projectId in (select b.id from ucsc_project b)

上面这条SQL的查询结果与刚才的EXISTS的结果一样,查询的意思也一样。

2、注意点:

(1)EXISTS写法需要注意子查询中的条件语句一般需要带上外查询的表做关联,不然子查询的条件可能会一直为真,或者一直为假,外查询的表进行循环匹配的时候,要么全部都查询出来,要么一条也没有。


select a.batchName,a.projectId from ucsc_project_batch a where EXISTS (select b.id from ucsc_project b)

比如上述这种写法,由于ucsc_project 表存在值,子查询的条件一直为真,ucsc_project_batch 每条数据进行循环匹配的时候,都能匹配成功,查询出来的结果就成为了ucsc_project_batch整张表数据。


select a.batchName,a.projectId from ucsc_project_batch a where EXISTS (select b.id from ucsc_project b where b.id is null)

这种写法,子查询肯定查不到结果,所以子查询的条件为假,外查询的每条数据匹配失败,整个查询结果为空

(2)IN语句在Mysql中没有参数个数的限制,但是mysql中SQL语句有长度大小限制,整段最大为4M

(3)EXISTS的子查询语句不在乎查询的是什么,只在乎有没有结果集存在,存在则整个子查询可以看作一个条件为真的语句,不然就是一个条件为假的语句

(4)IN语句对于子查询的返回字段只能由一个,不然会报错:

select a.batchName,a.projectId from ucsc_project_batch a where a.projectId in  (select b.id,b.companyId from ucsc_project b)

[Err] 1241 - Operand should contain 1 column(s)

3、场景选择

外查询表大,子查询表小,选择IN;外查询表小,子查询表大,选择EXISTS;若两表差不多大,则差不多。

(1)IN中的SQL查询只会查询一次,然后把结果集存在临时文件中,然后再与外层查询sql进行匹配,其中外查询与子查询都可以使用索引


select a.batchName,a.projectId from ucsc_project_batch a where a.projectId in (select b.id from ucsc_project b)

等价于:


$result = [];
$ucsc_project_batch = "select a.batchName,a.projectId from ucsc_project_batch a";
$ucsc_project = "select b.id from ucsc_project b";
for($i = 0;$i < $ucsc_project_batch .length;$i++){
 for($j = 0;$j < $ucsc_project .length;$j++){
  if($ucsc_project_batch [$i].projectId== $ucsc_project [$j].id){
   $result[] = $ucsc_project_batch [$i];
   break;
  }
 }
}

(2)EXISTS会对外查询的表ucsc_project_batch 进行循环匹配,执行ucsc_project_batch.length次,其中子查询可以使用索引,外查询全表扫描


select a.batchName,a.projectId from ucsc_project_batch a where EXISTS (select b.id from ucsc_project b where a.projectId = b.id)

等价于:


$result = [];
$ucsc_project_batch = "select a.batchName,a.projectId from ucsc_project_batch a ";
for ($i = 0; $i < $ucsc_project_batch . length; $i++) {
 if (exists($ucsc_project_batch [$i] . projectId)) {//执行select b.id from ucsc_project b where a.projectId=b.id        
  $result[] = $ucsc_project_batch [$i];
 }
}

通过两个的伪代码分析可知:子查询的表大的时候,使用EXISTS可以有效减少总的循环次数来提升速度;当外查询的表大的时候,使用IN可以有效减少对外查询表循环遍历来提升速度。

总结

到此这篇关于mysql中EXISTS和IN的使用方法比较的文章就介绍到这了,更多相关mysql EXISTS和IN比较内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: mysql中EXISTS和IN的使用方法比较

本文链接: https://lsjlt.com/news/121520.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • mysql中EXISTS和IN的使用方法比较
    1、使用方式: (1)EXISTS用法 select a.batchName,a.projectId from ucsc_project_batch a wher...
    99+
    2024-04-02
  • 对比分析MySQL语句中的IN 和Exists
    背景介绍 最近在写SQL语句时,对选择IN 还是Exists 犹豫不决,于是把两种方法的SQL都写出来对比一下执行效率,发现IN的查询效率比Exists高了很多,于是想当然的认为IN的效率比Exists好,...
    99+
    2024-04-02
  • MySQL中IN和NOT IN的使用方法
    这篇文章给大家分享的是有关MySQL中IN和NOT IN的使用方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.IN与NOT IN的语法格式MySQL 中的 IN 运算符用来...
    99+
    2024-04-02
  • MySQL中的distinct与groupby比较使用方法
    目录distinct的使用distinct用法distinct 多列去重group by的使用单列去重多列去重区别示例distinct和group by原理隐式排序先说大致的结论 :...
    99+
    2023-03-10
    MySQL distinct与group by MySQL distinct MySQL group by
  • MySQL中exists和in的区别
    一、in关键字 确定给定的值是否与子查询或列表中的值相匹配。in在查询的时候,首先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。所以相对内表比较小的时候,in的速度较快。 select * from A w...
    99+
    2023-09-10
    mysql sql中in exists
  • MySQL中的distinct与group by比较使用方法
    目录distinct的使用distinct用法distinct 多列去重group by的使用单列去重多列去重区别示例distinct和group by原理隐式排序先说大致的结论 : 在语义相同,有索引的情况下:grou...
    99+
    2023-03-10
    MySQLdistinct与groupby MySQLdistinct MySQLgroupby
  • MySQL中exists、in及any的基本用法
    【1】exists 对外表用loop逐条查询,每次查询都会查看exists的条件语句。 当 exists里的条件语句能够返回记录行时(无论记录行是多少,只要能返回),条件就为真 ,...
    99+
    2024-04-02
  • jquery中的比较方法怎么使用
    本文小编为大家详细介绍“jquery中的比较方法怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“jquery中的比较方法怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。概述比较是Web应用程序中最常...
    99+
    2023-07-05
  • MySQL查询语句中的IN和Exists怎样进行对比分析
    这篇文章给大家介绍MySQL查询语句中的IN和Exists怎样进行对比分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。背景介绍最近在写SQL语句时,对选择IN 还是Exists 犹豫...
    99+
    2024-04-02
  • mysql中in和exists的区别是什么
    这篇文章主要介绍mysql中in和exists的区别是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!exists和in的区别有:in是把外表和内表做hash连接,先查询内表;ex...
    99+
    2024-04-02
  • mysql中exists 和in的区别是什么
    今天就跟大家聊聊有关mysql中exists 和in的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  MySQL中in和exists的性...
    99+
    2024-04-02
  • 使用SQL中的EXISTS和NOT EXISTS的语法
    SQL中的exists和not exists的用法,需要具体的代码示例 在SQL中,exists和not exists是一对常用的谓词(predicate),用于判断一个子查询(sub...
    99+
    2024-02-22
    sql用法
  • MySQL中in与exists的使用及区别介绍
    先放一段代码 for(int i=0;i<1000;i++){ for(int j=0;j<5;j++){ System.out.println("hello"); } } for...
    99+
    2024-04-02
  • oracle中exists的使用方法
    小编给大家分享一下oracle中exists的使用方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!exists后面接的是一个子查询...
    99+
    2024-04-02
  • VBS中Exists方法的使用
    本篇内容介绍了“VBS中Exists方法的使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Exists 方法如果在 Dictionary ...
    99+
    2023-06-08
  • python比较运算的使用方法
    这篇文章主要介绍python比较运算的使用方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于编写自动...
    99+
    2023-06-14
  • sql中in和exists的使用情况是怎样的
    本篇文章给大家分享的是有关sql中in和exists的使用情况是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。in 和 exists的区...
    99+
    2024-04-02
  • mybaits-plus lambdaQuery() 和 lambdaUpdate() 比较常见的使用方法
    mybaits-plus lambdaQuery() 和 lambdaUpdate() 比较常见的使用方法 文章目录 mybaits-plus lambdaQuery() 和 lambdaUp...
    99+
    2023-08-31
    mybatis java 数据库
  • MySQL中EXISTS的用法
    在MySQL中,EXISTS是一个用于检查子查询是否返回结果的关键字。它的基本语法如下:```SELECT 列名FROM 表...
    99+
    2023-09-14
    MySQL
  • mysql中datetime比较大小的方法是什么
    在MySQL中,可以使用比较运算符(如<、>、<=、>=、=)来比较两个datetime数据的大小。比较的结...
    99+
    2024-04-09
    mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作