使用EXISTS关键字引入的子查询与IN关键字引入的子查询在语法上有哪些不同?
来源:百度知道 编辑:UC知道 时间:2024/09/24 13:46:17
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是对结果值进行比较,判断一个字段是