sql - 为什么我们需要 SQL 中的“WHERE EXISTS”运算符?
问题描述
我找到 了关于 SQL EXISTS Operator 的教程。我试图理解为什么我们需要它。总是可以用另一个表达式替换 'EXISTS'(如下所示)
例如,这个 SQL:
SELECT count(SupplierName)
FROM Suppliers
WHERE EXISTS (SELECT * FROM Products WHERE SupplierId = Suppliers.supplierId AND Price < 20);
可以替换为此 SQL:
SELECT count(SupplierName)
FROM Suppliers
WHERE (SELECT count(*) FROM Products WHERE SupplierId = Suppliers.supplierId AND Price < 20) > 0;
我测试了它,得到了相同的结果。
是否有任何情况下我们必须使用 'EXISTS' ?
解决方案
好吧,在您的示例中,EXISTS
效率更高。子查询需要读取所有匹配的行才能进行计数。
EXISTS
,根据合同,可以(并且确实!)在第一个匹配行处停止。
您可能会争辩说 SQL 引擎可以识别这种情况。但是,对于更复杂的查询,这将非常非常困难。
与您的观点相反,我发现EXISTS
它比聚合的子查询或相关子查询更有用。IN
这是表达这种逻辑的首选方法。
推荐阅读
- css - 从特定 file.css 中排除 css 表单特定元素
- json - 解析 [object Object] Angular 6
- oracle - Oracle 12c sales_history 示例模式安装
- autohotkey - 为什么热字符串会出人意料?
- web-services - 没有布局的 Odoo v9 Webservice 报告
- odoo - 我可以更改 Odoo 中的“员工”标签吗?
- javascript - 在 unsubscribe 函数中异步处理资源
- php - 需要使用 postfix 减少响应时间
- javascript - 在 Node 中关闭 MSSQL 连接
- shortcut - 无效的 Siri 支持 - 自定义意图的本地化描述