SQL-Exists与IN用法比较

sql中exists的用法 sql server中exists的用法简介 立即下载

一、EXISTS用法说明
EXITS谓词代表 存在量词,带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值TRUE或逻辑假值FALSE。只要EXITS引导的子句有结果集返回,该条件即成立,EXITS不在乎返回的是什么内容,只在乎是否有结果集返回。
如:

select * from customer
where not exists(
  select 0 from customer_goods where customer_id=I)

以及

#表A
ID NAME
1  A1
2  A2
3  A3

#表B
ID  AID  NAME
1   1    B1
2   2    B2
3   2    B3

#表A/B关系是一对多:A.ID --> B.AID
SELECT ID,NAME FROM A
WHERE EXISTS(SELECT * FROM B WHERE A.ID=B.AID)
>>>
>1  A1
>2  A2

可以理解为:

SELECT ID , NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID = 1) 
-->SELECT * FROM B WHERE B.AID = 1有值返回真所以有数据 

SELECT ID , NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID = 2) 
-->SELECT * FROM B WHERE B.AID = 2有值返回真所以有数据 

SELECT ID , NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID = 3) 
-->SELECT * FROM B WHERE B.AID = 3无值返回真所以没有数据 

二、EXISTS与IN 的用法异同
1、IN只能返回一个字段值,但EXITS允许返回多个字段。
2、exists是对外表做loop循环,每次loop循环再对内表做查询;IN是将外表和内表做hash连接,相当于多个or条件叠加。exists需要查询数据库,in是内存里遍历比较。

三、EXISTS与IN 的效率比较
对于表A,表B:

#用法1
select * from a where cc in(select cc from b)
#用法2
select * from a where exists (select * from b where cc=a.cc)

1、若表A/B大小相当,那运行效率差异不大;
2、若表A(外表)更大,则用法1即in()效率更高;
3、若表B(内表)更大,则用法2即exists()效率更高。

参考:
https://www.jianshu.com/p/df614c2c901b
http://www.cnblogs.com/highriver/archive/2011/05/30/2063461.html
https://blog.youkuaiyun.com/qq_34514415/article/details/79599194

AutoSAR EcuM系列01- EcuM模块的功能概述和变体类型 在【ECU的软硬件架构】文章中我们了解ECU的功能和组成,那么ECU具体是怎么启动的呢?我们知道,AutoSAR标准架构有三层,即APPL应用层、RTE层和BSW层。而这些层又被进一步划分为更多单独的组件,如BSW层可能有80多个组件。在ECU启动时,这些组件必须相互交互,有时也必须以某种顺序交互。这些组件的启动顺序由ECU管理器模块或EcuM处理。EcuM负责整个ECU的初始化和去初始化,包括对一些系统模块如。...... 阅读详情

相关推荐

大华事件检测智能服务器,大华股份:高速公路智能事件检测 解决方案

1方案背景随着我国基础设施建设的飞速发展,公路尤其是高速公路的总里程数年年攀升。交通运输部统计数据显示,截止2017年底全国公路总里程477.35万公里,其中高速公路13.65万公里,位居世界第一。高速公路的运营和管理作为全国交通管理的重要组成部分日益受到严峻挑战,交通拥堵和事故频发已成为高速公路上非常突出的问题。抛洒物、行人、车辆不规则行驶等事件是导致以上结果的重要原因。基于视频分析的高速公路智...

weixin_39523887的博客 1822

Sql中in和exists详解

Sql中in和exists详解

皮卡丘的情绪 1万+

卷积神经网络-猫狗识别(附源码)

利用python实现一个卷积神经网络,训练猫狗数据集,实现对猫狗图片的预测识别

m0_63223213的博客 2万+

SQL语句中EXISTS的详细用法大全

SQL语句中EXISTS的详细用法大全

qq_27480007的博客 5万+

【ZYNQ驱动双AD9361实战】(一)从官方参考设计到自定义移植

本文详细介绍了如何将ADI官方的单AD9361参考设计移植到ZYNQ平台以驱动双AD9361射频板卡。内容涵盖从环境搭建、官方工程架构解析,到硬件HDL工程修改(包括顶层设计、引脚分配及TCL脚本适配)以及Linux设备树软件配置的全流程实战指南,帮助开发者实现自定义双通道射频收发系统。

weixin_29170327的博客 362

别再手动拆解字节了!用博图这个功能指令,5分钟搞定ARRAY转BOOL数组

本文详细介绍了西门子博图中`ARRAY_TO_BOOL`功能指令的高效应用,帮助工程师快速实现ARRAY到BOOL数组的转换。通过实战案例和参数配置指南,展示了如何5分钟内完成传统方法需半小时的任务,大幅提升PLC编程效率,特别适用于通信报文解析和设备状态监控。

weixin_42653691的博客 260

SqlServer中Exists的使用

1、简介 不相关子查询:子查询的查询条件不依赖于父查询的称为不相关子查询 相关子查询:子查询的查询条件依赖于外层父查询的某个属性值的称为相关子查询。带Exists的子查询就是相关子查询 Exists表示存在量词:带有Exists的子查询不返回任何记录的数据,只返回逻辑值“True”或“False” 2、表结构 选课表:学号StudentNo、课程号CourseNo 学生表:学号Stude...

xiaouncle的博客 7万+

钉钉开发(三)——Java推送钉钉待办任务

之前一篇博文中,讲解了如何推送钉钉群消息,感兴趣的可以点击查看。 钉钉开发(一)——Java给钉钉群推送消息

Monten_Cristo的博客 6408

SQL中EXISTS的用法

SQL中EXISTS的用法 比如在Northwind数据库中有一个查询为 SELECT c.CustomerId,CompanyName FROM Customers c WHERE EXISTS( SELECT OrderID FROM Orders o WHERE o.CustomerID=c.CustomerID) 这里面的EXISTS是如何运作呢?子查询返回的是OrderId字段,可是外面的查询要找的是CustomerID和CompanyName字段,这两个字段肯定不在OrderID里面啊,这是

Yangsir_java的博客 1万+

从零开始:使用VMOS Pro和Xposed绕过APP环境检测的完整指南

本文详细解析了使用VMOS Pro和Xposed框架绕过APP环境检测的完整技术方案,包括模拟器检测、Root环境检测和Hook框架检测的对抗方法。通过实战案例和代码示例,展示了如何利用Xposed Hook技术拦截检测逻辑,特别针对360加固等保护技术提供了解决方案。

ee345的博客 733

一文读懂AI协同办公领域发展和趋势

协同办公,又称OA,是指企业内部或外部各类人员之间利用信息技术来进行协作工作的一种形式。这种协作工作既可以由直接员工进行,也可以来自外部的咨询机构、合作伙伴或联营企业。协同办公的优势在于可以对资源进行有效管理和配置,各部门之间可以建立良好的协作关系,跨部门更好地实现资源共享。

女王の专属领地 2356

sql中exists用法

exists关键字介绍 exists强调的是 是否返回结果集,不要求知道返回什么,比如: SELECT * FROM AM_USER WHERE EXISTS (SELECT 1 FROM AM_ROLE WHERE NAME = 'admin') 只要exists引导的子句有结果集返回,那么exist的条件就成立。SELECT 1 FROM AM_ROLE 返回的数字没有意义,exists子句不在乎返回什么,而是在乎有没有结果返回。 而exists与in最大的区别在于in引导的子句只能返回一个字段,比如

安夜的cookie 2万+

099、LLC谐振变换器的大信号建模

摘要:LLC谐振变换器的小信号模型在大信号工况(如启动、负载突变)下会失效,导致保护失灵、过冲等问题。通过状态空间平均法和分段线性化建立大信号模型,需关注谐振腔能量转移、模态切换条件及离散化实现。实际应用中,该模型可优化启动策略、精确设定保护阈值并验证环路补偿,但需注意变压器饱和等非线性因素。经验表明,大信号建模能显著提升设计可靠性,但需结合实验验证(误差<15%)和工具适配(如MATLAB离线仿真与C语言嵌入式调试)。三颗炸裂的MOSFET警示:深入掌握大信号建模是避免关键故障的必要手段。

Jack010169的博客 45

sql中exists的用法及与in的比较

EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False 有一个查询如下: 复制代码 代码如下: SELECT c.CustomerId, CompanyName FROM Customers c WHERE EXISTS( SELECT OrderID FROM Orders o WHERE o.Cu

zisongjia的博客 3590

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SQL关于IN和EXISTS的用法和区别的比较

1.exist,not exist一般都是与子查询一起使用. In可以与子查询一起使用,也可以直接in (a,b.....)。2.exist会针对子查询的表使用索引. not exist会对主子查询都会使用索引. in与子查询一起使用的时候,只能针对主查询使用索引. not in则不会使用任何索引. 注意,一直以来认为exists比in效率高的说法是不准确的。in 是把外表和内表作has...

dichengyan0013的博客 263

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SQL中IN与EXISTS的用法比较

作为子查询:IN:1、SELECT * FROM family WHERE id IN (SELECT [id] FROM p_info)返回结果为所有id包含在p_info表中的Paples_Info结果集.EXISTS:2、SELECT * FROM family WHERE EXISTS (SELECT [id] FROM p_info)返回结果为p_info存在相同数据的family结果集

wangmj518的专栏 723

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

sql中exists和not exists用法,并和in的比较

推荐:https://www.cnblogs.com/ThreeStone007/p/6589633.html 首先头脑中有三点概念: 1 。 EXISTS子查询找到的提交 NOT EXISTS 子查询中 找不到的提交 说明:不要去翻译为存在和不存在,把脑袋搞晕。 2 。 建立程序循环的概念,这是一个动态的查询过程。如 FOR循环 。 3 。 Exis...

大柚的博客 624

SQL中Exists用法

SQL中Exists用法

秉持Love and share的态度去学习和生活 1万+

sql中的exists和in的区别

IN` 是一个比较运算符,它允许你在 `WHERE` 子句中将一个值与一个列表或子查询返回的结果集进行比较。如果子查询返回至少一行与外部查询中的值匹配的行,那么 `IN` 子句的结果为 `TRUE`。在SQL中,`EXISTS` 和 `IN` 都用于子查询,但它们的用法和目的有所不同。选择使用 `EXISTS` 还是 `IN` 取决于你的具体需求和查询的性能考虑。- `EXISTS` 返回布尔值(`TRUE` 或 `FALSE`)。- `IN` 需要子查询返回可以与外部查询中的列进行比较的值。

Hello World 1247

in与exists区别(转)

select * from Awhere id in(select id from B) 以上查询使用了in语句,in()只执行一次,它查出B表中的所有id字段并缓存起来.之后,检查A表的id是否与B表中的id相等,如果相等则将A表的记录加入结果集中,直到遍历完A表的所有记录.它的查询过程类似于以下过程 List resultSet=[];Array A=(select * from A);A...

zhuchengzzcc的专栏 208

Oracle 中关键字 ‘exists‘ 与 ‘in’ 详解

IN(list) 和 NOT IN(list) 等于列表其一和不等于列表其一,IN(list) 还常用于判断一个子查询的结果集; EXISTS(): 用在where中作为过滤条件,其后跟一个子查询,只要子查询可以查出至少一条数据,那么EXISTS就返回TRUE; 举例对比效率问题: select * from T1 where exists(select b from T2 where T1.a =

技术宝库 4645

exists的用法 python_sql-exists、not exists的用法

exists : 强调的是是否返回结果集,不要求知道返回什么, 比如:select name from student where sex = 'm' and mark exists(select 1 from grade where ...) ,只要exists引导的子句有结果集返回,那么exists这个条件就算成立了,大家注意返回的字段始终为1,如果改成“select2 from grade...

weixin_33763709的博客 622

SQL中EXISTS与IN的区别

网上查了很多关于这两个单词的用法,说法很多,但大同小异,现在归纳如下:       关于EXISTS与IN的区别:   EXISTS检查是否有结果,判断是否有记录,返回的是一个布尔型(TRUE/FALSE)。   IN是对结果值进行比较,判断一个字段是否存在于几个值的范围中,所以 EXISTS 比 IN 快。         主要区别是:   exists主要用于片面的,有满足一个

xmlxh的专栏 624

oracle中的exists 和not exists 用法

exists (sql 返回结果集为真) not exists (sql 不返回结果集为真) 如下: 表A ID NAME 1    A1 2    A2 3  A3 表B ID AID NAME 1    1 B1 2    2 B2 3    2 B3 表A和表B是1对多的关系 A.ID => B.AID

binyao02123202的专栏 781
上一篇: Python-配对函数zip()
下一篇: 读书笔记-《Don't make me think》第三版
ckSpark
博客等级 码龄14年 273粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值