它使太大的差別,如果我在任何一個WHERE
條款以下的使用:在關鍵詞與關鍵字OR
WHERE [Process Code] = 1 AND ([Material ID] = 'PLT' OR [Material ID] = 'BMI')
--or
WHERE [Process Code] = 1 AND [Material ID] IN ('PLT', 'BMI')
會不會有一段時間,我會用一個,而不是其他?
它使太大的差別,如果我在任何一個WHERE
條款以下的使用:在關鍵詞與關鍵字OR
WHERE [Process Code] = 1 AND ([Material ID] = 'PLT' OR [Material ID] = 'BMI')
--or
WHERE [Process Code] = 1 AND [Material ID] IN ('PLT', 'BMI')
會不會有一段時間,我會用一個,而不是其他?
在你提供的例子中,他們正在做同樣的事情(他們會得到相同的執行計劃)。然而,與後者的語法(除了是更簡潔),你可以這樣做:
WHERE [Process Code] = 1 AND [Material ID] IN (SELECT ID FROM Material WHERE Type = @type)
我想不出的時候,我會用第一個選項。第二種選擇更清潔,更有表現力。如果需要將其轉換爲子選擇,則會更容易。
IN
只是一堆OR's
的語法糖。通常最好使用IN
,因爲它更容易閱讀:它不重複變量名稱,因此您不必考慮AND
或OR
是否具有更高的運算符優先級。
查詢執行計劃通常都是相同的。在運行比較之前,您可能會檢查您的表達式爲空(ISNULL(@parm,'')
或ISNULL([fieldname],'')
等)。
微軟警告:由子查詢或表達式返回比較
的任何NULL值使用IN或不圖回報未知與test_expression。在IN或NOT IN中使用空值 可能會產生意想不到的結果。