大多数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