邏輯運算子優先順序

當陳述式中使用一個以上的邏輯運算子,NOT 會第一個計算,接下來是 AND,最後才是 OR。先處理算術以及位元運算子,接著才處理邏輯運算子。

在下面的範例中,色彩 (Color) 條件與產品型號 (Product Model) 21 相關,但不與產品型號 20 相關,因為 AND 的優先順序高於 OR。

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

您可以加上括號,強迫陳述式先執行 OR 來變更查詢的意義。下列查詢只會尋找型號 20 和 21 下的紅色 (Red) 產品。

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

即使不是必要的,也建議您使用括號,可以改善查詢的可讀性,及減少因為運算子優先順序而不小心犯錯的機會。使用括號對效能不會有太大的負面影響。下面的範例與原始範例雖然在句法上並無不同,但其可讀性更高。

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