逻辑运算符的优先顺序

当一个语句中使用了多个逻辑运算符时,计算顺序依次为:NOT、AND 和 OR。算术运算符和位运算符优先于逻辑运算符处理。

在以下示例中,颜色条件适用于 Product Model 21 而不是 Product Model 20,因为 AND 优先于 OR。

USE AdventureWorks;
GO
SELECT ProductID, ProductModelID
FROM AdventureWorks.Production.Product
WHERE ProductModelID = 20 OR ProductModelID = 21
  AND Color = 'Red'

可以通过添加括号强制先计算 OR 来改变查询的含义。以下查询只查找模型 20 和 21 中红色的产品。

SELECT ProductID, ProductModelID
FROM AdventureWorks.Production.Product
WHERE (ProductModelID = 20 OR ProductModelID = 21)
  AND Color = 'Red'

因为运算符存在优先级,所以使用括号(即使不要求)可以提高查询的可读性,并减少出现细微错误的可能性。使用括号不会造成重大的性能损失。下面的示例比原始示例更可读,虽然它们在语义上是相同的。

SELECT ProductID, ProductModelID
FROM AdventureWorks.Production.Product
WHERE ProductModelID = 20 OR (ProductModelID = 21
  AND Color = 'Red')