Gra*_*tzy 27 sql sql-server join where-clause
我有一个相对简单的查询连接两个表."Where"标准可以在连接标准中表示,也可以表示为where子句.我想知道哪个更有效率.
查询是从一开始就查找推销员的最大销售额.
情况1
select salesman.salesmanid, max(sales.quantity)
from salesman
inner join sales on salesman.salesmanid =sales.salesmanid
and sales.salesdate < salesman.promotiondate
group by salesman.salesmanid
Run Code Online (Sandbox Code Playgroud)
案例2
select salesman.salesmanid, max(sales.quantity)
from salesman
inner join sales on salesman.salesmanid =sales.salesmanid
where sales.salesdate < salesman.promotiondate
group by salesman.salesmanid
Run Code Online (Sandbox Code Playgroud)
注意案例1完全没有where子句
RDBMS是Sql Server 2005
编辑 如果第二部分连接条件或where子句是sales.salesdate <某个固定日期,那么它实际上没有任何加入这两个表的条件会改变答案.
mar*_*c_s 28
我不会在这里使用性能作为决定因素 - 老实说,我认为这两种情况之间没有任何可衡量的性能差异.
我会一直使用案例#2 - 为什么?因为在我看来,您应该只将在两个表之间建立JOIN的实际条件放入JOIN子句中 - 其他所有内容都属于WHERE子句.
IMO,只是保持事情清洁,把事情放在他们所属的地方.
显然,有些情况下使用LEFT OUTER JOIN,标准的放置确实会对返回的结果产生影响 - 当然,这些情况会从我的建议中排除.
渣