首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQL Exists返回的记录比IN多

是因为Exists是一个逻辑运算符,用于检查子查询是否返回任何行。当Exists子查询中的条件与外部查询中的条件匹配时,Exists返回true,否则返回false。因此,Exists返回的是一个布尔值,表示是否存在满足条件的记录。

相比之下,IN是一个比较运算符,用于检查某个值是否存在于一个给定的列表中。IN子句中的列表可以是一个值列表,也可以是一个子查询。当IN子查询返回的结果集中包含与外部查询中的条件匹配的值时,IN返回true,否则返回false。因此,IN返回的是一个布尔值,表示是否存在满足条件的值。

由于Exists是一个逻辑运算符,它只关心是否存在满足条件的记录,而不关心具体的值。因此,当Exists子查询中的条件与外部查询中的条件匹配时,Exists会返回true,即使子查询返回的结果集中有多个匹配的记录。

相反,IN是一个比较运算符,它关心具体的值是否存在于给定的列表中。因此,当IN子查询返回的结果集中有多个匹配的值时,IN只会返回一个true值,表示至少有一个匹配的值存在于列表中。

综上所述,SQL Exists返回的记录比IN多是因为Exists只关心是否存在满足条件的记录,而不关心具体的值。而IN关心具体的值是否存在于给定的列表中。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SQLEXISTS用法

如果外部查询返回100行,SQL 就将执行101次查询,一次执行外部查询,然后为外部查询返回 每一行执行一次子查询。...not in和not exists区别: not in 只有当子查询中,select 关键字后字段有not null约束或者有这种暗示时用not in,另外如果主查询中表大,子查询中表小但是记录...:是在表中一条记录一条记录查询(查询每条记录)符合要求返回结果集,不符合就继续查询下一条记录,直到把表中记录查询完。...也就是说为了证明找不到,所以只能查询全部记录才能证明。并没有用到索引。 not exists:如果主查询表中记录少,子查询表中记录,并有索引。...) not exists执行顺序是:在表中查询,是根据索引查询,如果存在就返回true,如果不存在就返回false,不会每条记录都去查询。

1.2K30

SQLEXISTS使用

相关子查询:子查询查询条件依赖于外层父查询某个属性值称为相关子查询,带EXISTS 子查询就是相关子查询 EXISTS表示存在量词:带有EXISTS子查询不返回任何记录数据,只返回逻辑值“True...普通SQL查询: SELECT 姓名 FROM 学生表 WHERE 学号 IN (SELECT 学号 FROM 选课表 WHERE 课程号 = 'C1'); 带EXISTSSQL查询: SELECT...); 相关子查询执行过程:先在外层查询中取“学生表”第一行记录,用该记录相关属性值(在内层WHERE子句中给定)处理内层查询,若外层WHERE子句返回“TRUE”值,则这条记录放入结果表中。...然后再取下一行记录;重复上述过程直到外层表记录全部遍历一次为止。 EXISTS语句不关心子查询具体内容,因此用“SELECT *”,“Exists + 子查询”用来判断该子查询是否返回记录。...Exists:若子查询结果集非空时,返回“True”;若子查询结果集为空时,返回“False” 。

1.1K10

SQLin与not in、exists与not exists区别以及性能分析

1、in 和 exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为existsin效率高说法是不准确。...如果子查询中返回任意一条记录含有空值,则查询将不返回任何记录。如果子查询字段有非空限制,这时可以使用not in,并且可以通过提示让它用hasg_aj或merge_aj连接。...end if  end loop  对于in 和 exists性能区别 ---- 如果子查询得出结果集记录较少,主查询中表较大且又有索引时应该用in,反之如果外层主查询记录较少,子查询中表大...对于not in 和 not exists性能区别: not in 只有当子查询中,select 关键字后字段有not null约束或者有这种暗示时用not in,另外如果主查询中表大,子查询中表小但是记录...如果主查询表中记录少,子查询表中记录,并有索引,可以使用not exists,另外not in最好也可以用/*+ HASH_AJ */或者外连接+is null NOT IN 在基于成本应用中较好

1.6K00

SQLin与not in、exists与not exists区别以及性能分析

1、in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为existsin效率高说法是不准确。...如果子查询中返回任意一条记录含有空值,则查询将不返回任何记录。如果子查询字段有非空限制,这时可以使用not in,并且可以通过提示让它用hasg_aj或merge_aj连接。...其实我们区分in和exists主要是造成了驱动顺序改变(这是性能变化关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表快速返回为目标,那么就会考虑到索引及结果集关系了...,子查询中表小但是记录,则应当使用not in,并使用anti hash join....如果主查询表中记录少,子查询表中记录,并有索引,可以使用not exists,另外not in最好也可以用/*+ HASH_AJ */或者外连接+is null NOT IN 在基于成本应用中较好

2.3K20

SQLin与not in、exists与not exists区别以及性能分析

1、in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为existsin效率高说法是不准确。...如果子查询中返回任意一条记录含有空值,则查询将不返回任何记录。如果子查询字段有非空限制,这时可以使用not in,并且可以通过提示让它用hasg_aj或merge_aj连接。...其实我们区分in和exists主要是造成了驱动顺序改变(这是性能变化关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表快速返回为目标,那么就会考虑到索引及结果集关系了...,子查询中表小但是记录,则应当使用not in,并使用anti hash join....如果主查询表中记录少,子查询表中记录,并有索引,可以使用not exists,另外not in最好也可以用/*+ HASH_AJ */或者外连接+is null NOT IN 在基于成本应用中较好

65010

SQLin与not in、exists与not exists区别以及性能分析

1、in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为existsin效率高说法是不准确。...如果子查询中返回任意一条记录含有空值,则查询将不返回任何记录。如果子查询字段有非空限制,这时可以使用not in,并且可以通过提示让它用hasg_aj或merge_aj连接。...其实我们区分in和exists主要是造成了驱动顺序改变(这是性能变化关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表快速返回为目标,那么就会考虑到索引及结果集关系了...,子查询中表小但是记录,则应当使用not in,并使用anti hash join....如果主查询表中记录少,子查询表中记录,并有索引,可以使用not exists,另外not in最好也可以用/*+ HASH_AJ */或者外连接+is null NOT IN 在基于成本应用中较好

56230

SQL Server 返回最后插入记录自动编号ID

IDENT_CURRENT 返回为任何会话和任何作用域中特定表最后生成标识值。IDENT_CURRENT 不受作用域和会话限制,而受限于指定表。...IDENT_CURRENT 返回为任何会话和作用域中特定表所生成值。 @@IDENTITY 返回为当前会话所有作用域中任何表最后生成标识值。...SCOPE_IDENTITY 返回为当前会话和当前作用域中任何表最后生成标识值 SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中任何表内所生成最后一个标识值。...IDENT_CURRENT(‘TableName’) –返回指定表中生成最后一个标示值 SELECT IDENT_INCR(‘TableName’)–返回指定表标示字段增量值 SELECT...IDENT_SEED(‘TableName’)–返回指定表标示字段种子值 返回最后插入记录自动编号 SELECT IDENT_CURRENT(‘TableName’) 返回下一个自动编号

2.2K40

一对场景下exists子查询join连表查询快这么

两张表连表查询可以使用join、exists和in等方式,其中exists和in都属于依赖子查询。参考博客1给出了三种方式使用场景。...本文记录一次将join查询转换成exists查询后,性能得到了20倍以上提升。 现有送货单(delivery_order)和送货商品明细(delivery_sku)两张表。...其实仔细分析我们sql语句,导致使用临时表和filesort原因是我们使用了group by,因为我们使用了join查询,为了避免重复,我们必须要使用group by或distinct来去重。...再分析我们业务场景:在我们业务场景中,一个送货单对应多个商品,属于典型一对,使用exists就可以避免使用group by或distinct,其性能肯定能好于join。.../104798190  MySQL总结(五)——Explain坑以及如何分析SQL 6、https://segmentfault.com/a/1190000021815758 彻底搞懂MySQL索引优化

1.1K30

SQL语句中existsnot exists用法分析

,只要exists引导子句有结果集返回,这个条件就算成立。...外层查询一条 -》 判断子查询是否有返回 -》 有返回则为true -》 外层该条记录可显示 -》 继续外层遍历下一条 exists 和in 区别 这二者最大区别,是使用...in只能返回一个字段值 not exists sql返回结果集为真 例子 1、Student: Sno Sname Ssex Sage Sdept 200215121 李勇...查询过程:先在SCX表中选一条记录,比方说第一条,然后再看SCY表中,只有SCY表中全部不能输出,第一层查询where子句才返回true,第一条记录就可以输出;所以就要一次查看SCY表中每一个元组,...元组,经查看,有 ,则返回false,所以第四个也不能输出,第五个类似,所以,第一层查询not exists返回true。

3K30

数据库sql语句exists总结

in,反之如果外层主查询记录较少,子查询中表大,又有索引时使用exists。    ...性能区别:     not in只有当子查询中,select 关键字后字段有not null约束或者有这种暗示时用not in,另外如果主查询中表大,子查询中表小但是记录,则应当使用not in...如果主查询表中记录少,子查询表中记录,并有索引,可以使用not exists,另外not in最好也可以用/*+ HASH_AJ */或者外连接+is null NOT IN在基于成本应用中较好 比如...答案(请选中查看): 10000条 0条 原因: exists查询本质,只要碰到有记录,则返回true;所以limit根本就不会去管,或者说执行不到。 问题2: exists可以完全代替in吗?...d.dept_no = e.dept_no); exists使查询更为迅速,因为RDBMS核心模块将在子查询条件一旦满足后,立刻返回结果. 12、用表连接替换exists: 通常来说,采用表连接方式

70410

SQL优化——IN和EXISTS效率更高

IN和EXISTS被频繁使用在SQL中,虽然作用是一样,但是在使用效率谁更高这点上众说纷纭。下面我们就通过一组测试来看,在不同场景下,使用哪个效率更高。...EXISTS执行计划: (1)先将A表所有记录取到; (2)逐行针对A表记录,去关联B表,判断B表子查询是否有返回数据,5.5之后版本使用Block Nested Loop(Block 嵌套循环...); (3)如果子查询有返回数据,则将A当前记录返回到结果集。...(select * from B where B_id>100 and A.flag=B.flag); 19798 rows in set (0.06 sec) 可以看到本次EXISTS效率IN高。...A表有10000条记录,B表有1000000条记录, 那么exists()会执行10000次去判断A表中id是否与B表中id相等。

4.9K30

神奇 SQL 之谓词 → 难理解 EXISTS

谓词   SQL谓词指的是:返回值是逻辑值函数。我们知道函数返回值有可能是数字、字符串或者日期等等,但谓词返回值全部是逻辑值(TRUE/FALSE/UNKNOW),谓词是一种特殊函数。...-- IN SELECT * FROM tbl_student WHERE age IN(15,18,20);     IN 有一种其他谓词没有的使用方法:使用子查询作为其参数,这个在平时项目中也是用非常...EXISTS   EXISTS也是 SQL 谓词,但平时用不多,不是说适用场景少,而是它不好驾驭,我们用不好它。...SQL EXISTS 谓词实现了谓词逻辑中存在量词,然而遗憾是, SQL 却并没有实现全称量词。...实际工作中往往会舍弃 EXISTS,寻找它替代方式,可能是 SQL 替代,也可能是业务方面的转换,所以说,EXISTS 掌握不了没关系,当然,能掌握那是最好了; 参考   《SQL基础教程》   《

1.8K21

数据库 SQL中IN和EXISTS用法区别

实现,还有第三种方法 请看集合操作 : INTERSECT in方法: 大家都懂这里不做过多接释 exists实现: 他是通过子查询(为一个完整语句)返回数据是否为null,如果不为null,就会将当前数据加入结果集...exists语句,exists()会执行A.length次,它并不缓存exists()结果集,因为exists()结果集内容并不重要,重要是结果集中是否有记录,如果有则返回true,没有则返回false...如:A表有10000条记录,B表有1000000条记录,那么exists()会执行10000次去判断A表中id是否与B表中id相等....结论:exists()适合B表A表数据大情况 当A表数据与B表数据一样大时,in与exists效率差不多,可任选一个使用....结论 in()适合B表A表数据小情况 exists()适合B表A表数据大情况 当A表数据与B表数据一样大时,in与exists效率差不多,可任选一个使用. 参考文章链接

1.2K30

“预测”“解释”重要

,即数据不是用来解释,而是用来验证。...7-11假设验证法广为流传:店长站在消费者角度,结合数据与市场环境,对哪些商品会成为畅销品进行假设,然后按假设下单。到货后,按照POS数据记录销售状况验证假设是否正确。...过去已经发生,再去找一万个理由解释已经没有什么用处,预测解释重要。达里欧在《原则:应对变化中世界秩序》谈到,人们可以精确地复述历史,但未来绝对无法精确预测。...这样一对,就知道我们和主人公之间差距在哪里了。这样重复次数多了以后,处理问题水平自然而然提高。...我时常关注库存管理领域著作,很多书名都带有“预测”字样,从没有哪本是《库存暴涨一万个理由》 可视化领域也是这样,描述过去图表是主流,预测未来图表是稀缺,BI佐罗还提到一种行为驱动型图表,同样也是稀缺

23210

你真的会玩SQL吗?EXISTS和IN之间区别

查询指定节点及其所有父节点方法 你真的会玩SQL吗?让人晕头转向三值逻辑 你真的会玩SQL吗?EXISTS和IN之间区别 你真的会玩SQL吗?无处不在子查询 你真的会玩SQL吗?...Case也疯狂 你真的会玩SQL吗?表表达式,排名函数 你真的会玩SQL吗?简单 数据修改 你真的会玩SQL吗?你所不知道 数据聚合 你真的会玩SQL吗?透视转换艺术 你真的会玩SQL吗?...三值逻辑 而补充,那来探讨下为什么有人会建议有些地方用EXISTS代替in EXISTS和IN之间区别 1.EXISTS返回TRUE或FALSE,不会返回UNKNOWN。...2.IN当遇到包含NULL情况,那么就会返回UNKNOWN。 当查询列包含NULL时,NOT EXISTS正常返回TRUE或FALSE。...和orderdate在2008年至2009年值 4.执行not EXISTS,外查询根据子查询返回结果集得到满足条件行 */

80560

如何用外部程序优化SQL语句中IN和EXISTS

数据结构 IN 和 EXISTSSQL 中常见复杂条件,在将 SQL(存储过程)转换成库外计算获取高性能时也会面对这些问题。...如果常数集合元素数量特别可以用连接过滤,具体请参照下图代码。...集算器实现: 如果 A1 元素数量特别,则可以使用哈希连接方法来过滤,把第 3 行代码替换如下: IN子查询 子查询选出字段是主键 SQL 示例(2): select PS_SUPPKEY...,LINEITEM 表主键是 L_ORDERKEY、L_LINENUMBER,一个订单对应 LINEITEM 里多条记录,这些记录 L_ORDERKEY 是相同并且在数据文件中是相邻。...集算器实现: 总结 在没有空值时候带子查询 IN 都可以用 EXISTS 描述,同一个查询需求用 IN 描述和用 EXISTS 描述翻译成集算器代码是相同,所以我们只要弄清楚 EXISTS

97910

Sql 语句中 IN 和 EXISTS 区别及应用「建议收藏」

in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为existsin效率高说法是不准确。...语句,exists()会执行A.length次,它并不缓存exists()结果集,因为exists()结果集内容并不重要,重要是结果集中是否有记录,如果有则返回true,没有则返回false....结论:exists()适合B表A表数据大情况 当A表数据与B表数据一样大时,in与exists效率差不多,可任选一个使用....如果为假那么指针直接指向下一条记录,而不进行其它操作。一直检索完整个表,并把检索出来虚拟表返回给用户。EXISTS是条件表达式一部分,它也有一个返回值(true或false)。...d.dept_no = e.dept_no); exists使查询更为迅速,因为RDBMS核心模块将在子查询条件一旦满足后,立刻返回结果. 12、用表连接替换exists: 通常来说,采用表连接方式

81230

sql返回指定节点树形结构数据

背景 就是有这么一个需求,返回指定组织下组织机构,以及所在该组织机构下的人。(用sql) 简单描述就是如下: ?...请叫我树形图 使用sql返回部门1以及其子部门数据。 很明显就是一个树形递归嘛,用代码就比较好实现。 但是要用sql实现,就稍微麻烦点。...正文 创建符合上述思维导图表department,如下图: ? 请叫我数据表 我就不按网上百度sql树形递归思路讲了。我也去百度了,感觉一大扒拉,又不想看。...sql存储过程如下 DROP PROCEDURE IF EXISTS get_part_department; CREATE PROCEDURE get_part_department () BEGIN...返回指定节点以及其下子节点数据 到此,本文需求功能已实现。 知识点 1.数据库是mysql,所用函数也是mysql函数。 2.

2.5K31

Piglimit无效(返回所有记录)sample有效

pig中,limit可以取样少部分数据,但有很多问题,比如数据不能少于10条,否则返回全部。...今天又遇到另一个问题: group后数据,limit无效:也就是group后数据,不能用limit,估计是含group结构不行(没验证) 相比而言sample比较好,我试了一下是可以,对group...后数据也能有作用 测试代码如下: origin_cleaned_data = LOAD '$cleanedLog' as 省略; STORE  origin_cleaned_data INTO '/user...0,1,2,3, g_log = group test_data by (2,4);DESCRIBE g_log; alldata = limit g_log 10; dump alldata;--返回了全部数据...,limit 无效 返回group结构如下 origin_cleaned_data: { wizad_ad_id: chararray, guid: chararray, Android_id: chararray

1.5K20
领券