使用EXISTS关键字引入的子查询与IN关键字引入的子查询在语法上有哪些不同?

SQL Server 2005

EXISTS存在一个所谓的’短路功能‘,也就是这个谓词只关系是否存在记录
如客户表
TCustomer
订单表
TOrders
关联关系FCustomerId

那么要检测存在有订单的客户可以

SELECT * FROM TCustomer WHERE FCustomerID IN(SELECT FCustomerID FROM TOrders)

SELECT * FROM TCustomer WHERE FCustomerID EXISTS(SELECT * FROM TOrders WHERE TCustomer.FCustomerId=TOrders.FCustomerId)

用IN的话 每一次扫猫TOrders都需要扫描完表的数据
而EXISTS 当遇到存在的FCustomerId 会返回true或flase 然后就不继续扫表下面的数据了

希望对你有帮助
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-06-26
EXISTS存在一个所谓的短路功能’,也就是这个谓词只关系是否存在记录
如客户表
TCustomer
订单表
TOrders
关联关系FCustomerId

那么要检测存在有订单的客户可以

SELECT * FROM TCustomer WHERE FCustomerID IN(SELECT FCustomerID FROM TOrders)

SELECT * FROM TCustomer WHERE FCustomerID EXISTS(SELECT * FROM TOrders WHERE TCustomer.FCustomerId=TOrders.FCustomerId)

用IN的话 每一次扫猫TOrders都需要扫描完表的数据
而EXISTS 当遇到存在的FCustomerId 会返回true或flase 然后就不继续扫表下面的数据了。本回答被网友采纳
第2个回答  2009-10-18
EXISTS
指定一个子查询,检测行的存在。

IN是对结果值进行比较,判断一个字段是否存在于几个值的范围中,

所以 EXISTS 比 IN 快

使用EXISTS关键字引入的子查询与IN关键字引入的子查询在语法上有哪些...
EXISTS存在一个所谓的’短路功能‘,也就是这个谓词只关系是否存在记录 如客户表 TCustomer 订单表 TOrders 关联关系FCustomerId 那么要检测存在有订单的客户可以 SELECT * FROM TCustomer WHERE FCustomerID IN(SELECT FCustomerID FROM TOrders)或 SELECT * FROM TCustomer WHERE FCustomerID EXISTS(SE...

exists和in有什么区别
如果改成“select 2 from grade where ...”,那么返回的字段就是2,这个数字没有意义。所以exists子句不在乎返回什么,而是在乎是不是有结果集返回。

面试官:Mysql中EXISTS与IN的使用有哪些差异
在数据库查询优化中,IN和EXISTS作为常见的子查询操作符,广泛应用于SQL查询语句。然而,它们在执行效率上有所不同,主要在于IN与EXISTS的工作原理与应用情境。IN子查询首先执行子查询生成一个临时表,然后与主查询进行比较,确定符合条件的行。IN子查询在子查询结果集较小的情况下效率较高,因为它能缓存...

SQL中IN和EXISTS用法的区别
IN的一般语法格式为:列(或表达式) IN(子查询),带IN的子查询只能返回一列值,如果IN前面的列(或表达式)和子查询返回的集合中的一个或一个以上的值相等,则条件为真;如果IN前面的列(或表达式)和子查询返回的集合中的所有值均不相等,则条件为假.EXISTS子查询的一般格式为EXISTS(子查询),如果子查询包...

sql exist和in的区别及查询效率比较
EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False。EXISTS 指定一个子查询,检测行的存在。语法: EXISTS subquery 参数: subquery 是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INTO 关键字)。结果类型: Boolean 如果子查询包含行,则返回 ...

关于查询语句中的in和exists的区别
1、适用表的类型不同。in是子查询为驱动表,外面的表为被驱动表,故适用于子查询结果集小而外面的表结果集大的情况。exists是外面的表位驱动表,子查询里面的表为被驱动表,故适用于外面的表结果集小而子查询结果集大的情况。2、子查询关联不同。exists一般都是关联子查询。对于关联子查询,必须先...

SQL中IN和EXISTS用法的区别
总的来说in和exists在得到结果上差不太多,如果只有一个字段 where a.co1 in (select co1 from b) 和 where exists(select 1 from b where co1=a.co1)这两个效果真的是一样一样的,但是用exists有个好处,它可以写更加复杂的逻辑判断,而in用起来就显得不那么好用了(同时判断多个字段,...

oracle exists和in的区别
In和exists对比:若子查询结果集比较小,优先使用in,若外层查询比子查询小,优先使用exists。因为若用in,则Oracle会优先查询子查询,然后匹配外层查询,若使用exists,则oracle会优先查询外层表,然后再与内层表匹配。最优化匹配原则,拿最小记录匹配大记录2、关于在 Oracle8i 之后 时代中in和exists的区别in 是把外表和内...

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

SQL中IN和EXISTS用法的区别
.用EXISTS替代IN、用NOT EXISTS替代NOT IN 在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率. 在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的...

相似回答