`
- 浏览:
6650 次
- 性别:
- 来自:
北京
-
如说两张表一张是用户表TDefUser(userid,address,phone),一张是消费表TAccConsume(userid,time,amount),我要查消费超过5000的用户记录,那么我可以写
Java代码
select * from TDefUser where exists (select 1 from TAccConsume where TDefUser.userid=TAccConsume.userid and TAccConsume.amount> 5000)
也可以写
Java代码
select * from TDefUser where userid in (select userid from TAccConsume where TAccConsume.amount> 5000)
select 1 代表什么意思呢?
==============
师傅说因为exists只返回真或假,select 1 可以提高效率。
exists()后面的子查询被称做相关子查询 他是不返回列表的值的.只是返回一个ture或false的结果(这也是为什么子查询里是 "select 1 "的原因 当然也可以select任何东西)
其运行方式是先运行主查询一次 再去子查询里查询与其对应的结果 如果是ture则输出,反之则不输出.再根据主查询中的每一行去子查询里去查询.
in()后面的子查询 是返回结果集的,换句话说执行次序和exists()不一样.子查询先产生结果集,然后主查询再去结果集里去找符合要求的字段列表去.符合要求的输出,反之则不输出.
可是我不太知道exists的执行过程是怎么样的
------------------------------------------
执行顺序如下:
1.首先执行一次外部查询
2.对于外部查询中的每一行分别执行一次子查询,而且每次执行子查询时都会引用外部查询中当前行的值。
3.使用子查询的结果来确定外部查询的结果集。
如果外部查询返回100行,SQL 就将执行101次查询,一次执行外部查询,然后为外部查询返回的每一行执行一次子查询。但实际上,SQL的查询
优化器有可能会找到一种更好的方法来执行相关子查询,而不需要实际执行101次查询。
有人说:能用左连接做掉的事情,尽量不要去用exists,in之类的
又有人说:exists的性能比外连接更好,曾用过做数十万数据量的查询,exists大概比外连接快30%左右
还有人说:如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in;反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
### 经典SQL查询总结关于Exists, not Exists, IN, not IN 效率的说明 在数据库查询操作中,存在着多种方法来实现相似的功能,但不同的实现方式在性能上可能会有显著差异。本文将深入探讨 SQL 中 `EXISTS`, `NOT ...
标题和描述均聚焦于SQL语言中“IN”和“EXISTS”的区别,这是数据库查询语言中两种常用的子查询处理方式,它们在功能上虽然相似,但在执行效率、索引使用以及适用场景上存在显著差异。 ### IN关键字 “IN”主要...
在SQL语言中,not in和not exist查询是两个非常重要的查询操作,但是它们的效率非常低,会消耗大量的时间和系统资源。因此,需要找到一种替代算法来解决这个问题。 在本文中,作者提出了一个使用临时表来实现not in...
IN、EXISTS、NOT EXISTS、NOT IN 在 SQL 语句中的应用和区别 IN 语句和 EXISTS 语句都是 SQL 语句中用来判断是否存在某个值的语句,但是它们的实现机制和应用场景是不同的。 IN 语句是通过 hash 连接来实现的,它...
在数据库查询语言SQL中,“Exists”与“In”是两种常用的子查询方法,它们在实际应用中各有优势与局限。本文将深入探讨这两种方法的工作原理、应用场景以及性能差异,帮助读者更好地理解和选择合适的查询方式。 ###...
`EXISTS`和`IN`的区别在于,`IN`通常用于比较单个字段值,而`EXISTS`可以处理更复杂的查询,它关心的是子查询是否返回行,而不关心返回的具体值。`IN`通常用于获取特定值列表内的记录,而`EXISTS`则可以用于检查记录...
### MySQL多表查询和EXISTS查询性能对比 #### 测试环境 在进行MySQL多表查询与EXISTS查询的性能对比之前,首先需要了解测试环境的相关配置。虽然原文中并未给出具体的测试环境细节,但在实际操作中,这一步骤至关...
SQL语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的...通过使用EXISTS和NOT EXISTS,我们可以提高查询的效率,避免了使用NOT IN和IN的低效率。同时,EXISTS和NOT EXISTS也可以使查询语句变得更加简洁和易于理解。
本文将深入探讨如何利用WinCC与SQL数据库进行交互,包括读取和写入数据,以实现更高效的数据管理和分析。我们将结合VBScript脚本语言来实现这一功能,因为WinCC支持VBScript作为其内置脚本语言。 首先,我们需要...
IN和EXIST语句的使用可以提高数据库的性能和效率。 四、LIMIT语句 LIMIT语句是MySQL数据库中用于限制查询结果的语句。LIMIT语句可以帮助我们限制查询结果的数量,从而提高数据库的性能和效率。 五、RAND函数 ...
1. 尽量少用嵌套查询,使用 not exist 代替 not in 子句。 2. 用多表连接代替 EXISTS 子句。 3. 少用 DISTINCT,用 EXISTS 代替。 4. 使用 UNION ALL、MINUS、INTERSECT 提高性能。 5. 使用 ROWID 提高检索速度。 6....
在SQL Server中,`EXISTS` 和 `IN` 是两种常用的子查询操作符,用于比较一个查询结果是否与另一个查询结果相匹配。虽然它们在功能上相似,但在性能和优化方面存在一些差异,这在大数据处理时尤其显著。 1. **EXISTS...
通过这些实验,我们可以深入理解SQL中的子查询技巧和数据库管理基础,这对于软件开发人员来说是至关重要的,因为它们直接关系到数据的检索、分析和维护效率。熟悉这些概念和技术将有助于编写更高效、更准确的SQL查询...
"sql 书写规范" SQL 书写规范是为了确保 SQL 代码的可读性、可维护性和性能,以下是 SQL 书写规范的详细说明: ...遵守这些规范可以确保 SQL 代码的可读性、可维护性和性能,从而提高数据库的效率和稳定性。
本文将深入探讨四个关键的SQL优化策略:count、表的连接顺序、条件顺序以及in和exist的使用。 首先,让我们关注`count()`函数的优化。通常认为`count(*)`统计所有行,而`count(列名)`只计算指定列的非空值。许多人...
本文将深入探讨EXISTS谓词的工作原理、用法以及其与IN和JOIN操作符的区别。 一、EXISTS谓词的基本概念 EXISTS谓词用于测试一个子查询是否至少返回一行数据,而不是关心返回的具体数据内容。其基本语法结构如下: ...
通过这些命令,DBA可以快速地获取到关键的数据库信息,从而更好地管理数据库,提高系统的稳定性和效率。此外,这些命令也为数据库的安全审计和性能优化提供了基础数据支持。希望本文档能对从事金仓Kingbase数据库...
MySQL中的`NOT IN`, `LEFT JOIN`, `IS NULL`, 和 `NOT EXISTS` 是四种不同的SQL查询方式,它们在特定情况下可以实现相似的功能,但实际执行效率可能会有很大差异。本文主要探讨这四种方法在处理大数据量时的性能表现...
MySQL中的`EXISTS`和`IN`都是在SQL查询中用来检查某条记录是否符合特定条件的子查询操作符,但它们的工作原理和使用场景有所不同。 `EXISTS`子查询主要检查子查询是否能返回至少一行数据。在这个过程中,子查询的...