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

来源:百度知道 编辑:UC知道 时间:2024/09/24 13:46:17
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 然后就不继续扫表下面的数据了。

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 然后就不继续扫表下面的数据了

希望对你有帮助

EXISTS
指定一个子查询,检测行的存在。

IN是对结果值进行比较,判断一个字段是