大多數SQL查詢對where子句沒有數學操作。爲什麼'MS SQL中的數學函數在Where子句中'?
讓他們在'where子句'上有什麼問題? 是否有任何性能問題?
例如:
SELECT * FROM僱員薪水WHERE * 3 = 5000
大多數SQL查詢對where子句沒有數學操作。爲什麼'MS SQL中的數學函數在Where子句中'?
讓他們在'where子句'上有什麼問題? 是否有任何性能問題?
例如:
SELECT * FROM僱員薪水WHERE * 3 = 5000
如果where子句可以利用一個索引,它通常(但不總是)更快。在字段上使用數學運算將停止使用索引。例如,如果您有一個包含一百萬行的表和一個已編制索引的日期列,則查詢1在此遠遠超出查詢2(它們都會檢索所有日期在過去7天內的行) :
查詢1:
select date from table where date > dateadd(d, -7, getdate())
查詢2:
select date from table where dateadd(d, 7, date) > getdate()
在您的例子,第e查詢會好得多:
select * from employee where salary = (5000/3)
對於一個很好的樣本+1 ... – Lucero 2009-04-21 10:48:58
咦?不,在一個where子句中有數學是沒有問題的。 where子句可以包含任何使用列名稱,函數或常量的表達式,只要表達式是合法謂詞即可。
CK提供了以下兩個例子:
選擇日期從表,其中日期> DATEADD(d,-7,GETDATE())
從表選擇日期其中DATEADD(d,7,日期)> getdate()
並解釋第一個可能更快,因爲它可以使用索引。
ck的正確,但也應該注意,第一個可以更快,因爲dateadd(d, -7, getdate())
是一個常量表達式(只需要計算一次,無論行數是多少),而dateadd(d, 7, date)
需要評估爲每一行。
但是都是 ck的例子是在where子句中使用的「數學」(表達式)的例子,這是OP所要求的。
你能舉個例子......你可以用某些功能
SELECT filter, count(*) FROM Test GROUP BY filter HAVING count(*) > 1
,如果你想在MAX
,MIN
等使用HAVING
條款同樣的邏輯也適用於在WHERE子句後使用HAVING
條款..
爲了您的例子中,你需要圍繞工資* 3括號
WHERE (Salary * 3) > 5000
你問什麼類型的數學運算的? – 2009-04-21 10:43:18
請舉個例子,你的問題現在太模糊了,不能回答。 – 2009-04-21 10:43:30