首页 > 解决方案 > 为什么我们需要 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' ?

标签: sql

解决方案


好吧,在您的示例中,EXISTS效率更高。子查询需要读取所有匹配的行才能进行计数。

EXISTS,根据合同,可以(并且确实!)在第一个匹配行处停止。

您可能会争辩说 SQL 引擎可以识别这种情况。但是,对于更复杂的查询,这将非常非常困难。

与您的观点相反,我发现EXISTS它比聚合的子查询或相关子查询更有用。IN这是表达这种逻辑的首选方法。


推荐阅读