什麼是在SQL查詢中檢查列的空值或值的有效方法。考慮具有索引的整數列column
的sql表table
。 @value
可以是一些整數或空例如:16或null。用於比較SQL中列的NULL或值的有效方法
查詢1:不確定,但似乎不應該依賴SQL中的短路。但是,當@value
是某個整數或null時,下面的查詢總是可以正常工作。
select * from
table
where (@value is null or column = @value)
以下查詢是上述查詢的擴展版本。它也可以正常工作。
select * from
table
where ((@value is null)
or (@value is not null and column = @value))
上述2個查詢會利用索引嗎?
查詢2:下面的查詢比較列與非空@value
否則將列column
與它自己進行比較,它總是爲真並返回所有內容。它也可以正常工作。這個查詢會利用索引嗎?
select * from
table
where (column = isnull(@value, column))
什麼是最好的方法?
注意:如果答案因數據庫而異,我對MS-SQL感興趣。
,以確定是否會有些使用索引或不就是最好的方法創建一個包含大量行的測試表,創建索引並檢查查詢的查詢計劃。 – 2010-06-24 14:42:45
請注意,由於條件null = null的計算結果爲null,因此Query 2 **不會返回表中列值爲null的值,而不是true。 – 2010-06-24 14:53:41
馬克,謝謝指出。該列不爲空,因此在這種情況下不會發生。 – hIpPy 2010-06-24 15:10:23