首页 / 知识
SQL中EXISTS和IN的区别?
2023-04-13 01:13:00

Difference between EXISTS and IN in SQL?SQL中的 我们什么时候应该使用
。 这在有 当您要传递静态列表时,最好使用
当您在
。
也可以将查询结果与
。 基于规则优化器:
基于成本优化器:
我假设您知道它们的作用,因此使用方式不同,所以我将理解您的问题:什么时候重写SQL以使用而不使用exists是一个好主意,反之亦然。 这是一个公平的假设吗? 编辑:我问的原因是,在许多情况下,您可以重写基于中的SQL以使用exists,反之亦然;对于某些数据库引擎,查询优化器将对这两者进行不同的处理。 例如:
可重写为:
号 或者加入:
所以我的问题仍然存在,最初的海报是不是想知道什么在里面,什么在里面,什么在里面存在,以及如何使用它,或者他是否要求重写一个使用in来使用exists的SQL,或者反过来,是一个好主意? 当子查询结果很大时,
查询1
。 查询2
号 如果在 我的意思是 如果使用 中只支持平等关系(或前面没有的不平等)。它是=any/=some的同义词,例如
exists支持变量类型的关系,不能用in表示,例如-
。换个角度来说- 据称存在和存在的性能和技术差异可能是由特定供应商的实现/限制/错误造成的,但很多时候它们只是由于对数据库内部的理解不足而产生的神话。 表的定义、统计信息的准确性、数据库配置和优化器的版本都会影响执行计划,从而影响性能指标。
。 但是 我想,
什么时候用一个比另一个…当你觉得它读得恰当时(更好地传达意图)。 不同之处在于:
上面的查询将返回所有记录,下面的查询将返回空记录。
号 试一下,观察输出。 其原因是,现有的操作器是基于"至少找到"原则工作的。它返回true并在找到至少一个匹配行后停止扫描表。 另一方面,当in操作符与子查询组合时,mysql必须首先处理子查询,然后使用子查询的结果处理整个查询。
号 哪个更快取决于内部查询获取的查询数:
"存在"对"真"或"假"进行计算,但在"比较多个值"中进行计算。当您不知道记录是否存在时,应选择"存在"。 据我所知,当一个子查询返回一个 我的理解是,只要我们不处理空值,两者都应该是相同的。 查询不返回=空vs的值的原因相同,是空的。http://sqlinwild.co.za/index.php/2010/02/18/not-exists-vs-not-in/ 至于boolean vs comparator参数,要生成一个boolean,两个值都需要比较,这就是任何if条件的工作方式,所以我无法理解in和existing的行为是如何不同的。. 如果子查询返回多个值,则可能需要执行外部查询-如果条件中指定的列中的值与子查询结果集中的任何值匹配。要执行此任务,需要使用 可以使用子查询检查是否存在一组记录。为此,需要在子查询中使用 江户十一〔七〕号 https://docs.oracle.com/cd/b19306_01/server.102/b14211/sql_1016.htm_i28403 我相信这是一个直截了当的答案。为什么你不从那些在他们的系统中开发这个功能的人那里检查它呢? 如果您是MS SQL开发人员,下面是直接从Microsoft得到的答案。
号
号 我发现使用exists关键字通常非常慢(在Microsoft Access中是如此)。我使用join操作符的方式是:应该-i-use-the-keyword-exists-in-sql 存在的性能比存在的快。如果大多数筛选条件都在子查询中,那么最好在中使用;如果大多数筛选条件都在主查询中,那么最好在存在时使用。 如果使用in运算符,则SQL引擎将扫描从内部查询中提取的所有记录。另一方面,如果我们正在使用exists,SQL引擎将在找到匹配项后立即停止扫描进程。 |
最新内容
相关内容
Python与c#的区别
Python与c#的区别,代码,平台,名称,培训,系统,设计,技术,标准,脚本,变量,现在来看下c#。它们的技术差异很大,但都适用于web开发。Python对c#的Ruby和Python的区别
Ruby和Python的区别,公司,项目,数据,巨头,第一,培训,技术,灵活,区别,语言,就第一语言而言,Ruby和Python是最受欢迎的。Ruby和PythonRuby和PythPython之__init__和__new__的区别
Python之__init__和__new__的区别是什么,工厂,设计,代码,生产,函数,灵活,培训,对外,实例,模式,真假构造函数如果你去面试Python工程师的岗位,Python进程、线程、协程的区别
Python进程、线程、协程的区别,地址,单位,线程,入口,状态,培训,进程,区别,资源,空间,简述进程、线程、协程的区别以及应用场景?线程是指进程python内置函数:map、reduce、filte
python内置函数:map、reduce、filter的用法和区别,数据,培训,数字,函数,序列,内容,元素,参数,列表,个数,map:根据函数对指定序列做映射map参数python 命名关键字参数
python 命名关键字参数,位置,参数,名字,培训,关键字,函数,后面,定义,方式,上面,对于关键字参数,函数的调用者可以传入任意不受限制的关键字参python中pop()与remove()使用区别
python中pop()与remove()使用区别,培训,元素,区别,实例,列表,原位,序列号,以上,操作,方法,python中删除列表有pop()与remove()两种方法,而且他python什么时候加self?
python什么时候加self?,培训,变量,方法,作用,参数,示例,函数,实例,前面,下面,想要知道python什么时候加self就需要知道self的作用。下面我们Python库与模块的区别是什么?
Python库与模块的区别是什么?,名称,概念,标准,机构,培训,名字,代码,模块,区别,函数,python库与模块的区别是:模块、库主要区别在于他们的定义Python静态函数和普通方法的区别
Python静态函数和普通方法的区别,培训,方法,静态,区别,实例,函数,属性,结果,例子,下面,下面通过一个例子,讲解Python静态函数、普通方法、类方python中类对象和方法的区别是什么
python中类对象和方法的区别是什么,地址,数据,培训,对象,函数,类型,字符串,方法,表示,身份,python使用对象模型来存储数据,也就是说构造任何类python对象与方法的区别是什么
python对象与方法的区别是什么,地址,数据,培训,对象,函数,类型,字符串,方法,表示,身份,python使用对象模型来存储数据,也就是说构造任何类型的