假设我有以下T-SQL代码:
SELECT * FROM Foo f
INNER JOIN Bar b ON b.BarId = f.BarId;
WHERE b.IsApproved = 1;
Run Code Online (Sandbox Code Playgroud)
以下一行也返回相同的行集:
SELECT * FROM Foo f
INNER JOIN Bar b ON (b.IsApproved = 1) AND (b.BarId = f.BarId);
Run Code Online (Sandbox Code Playgroud)
这可能不是这里最好的案例样本,但这两者之间是否有任何性能差异?
在SQL中,我试图根据ID过滤结果,并想知道它们之间是否存在任何逻辑差异
SELECT value
FROM table1
JOIN table2 ON table1.id = table2.id
WHERE table1.id = 1
Run Code Online (Sandbox Code Playgroud)
和
SELECT value
FROM table1
JOIN table2 ON table1.id = table2.id AND table1.id = 1
Run Code Online (Sandbox Code Playgroud)
对我来说,它好像逻辑是不同的,虽然你总是会得到相同的结果集,但我不知道是否有下,你会得到两个不同的结果集(或将它们总是返回完全相同的两个结果集的任何条件)
我有一个相对简单的查询连接两个表."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 <某个固定日期,那么它实际上没有任何加入这两个表的条件会改变答案.
做某事之间是否有区别?
SELECT *
FROM table1 INNER JOIN table2 ON table2.ObjectId = table1.table2ObjectId
WHERE table2.Value = 'Foo'
Run Code Online (Sandbox Code Playgroud)
VS
SELECT *
FROM table1 INNER JOIN table2
ON table2.ObjectId = table1.table2ObjectId AND table2.Value = 'Foo'
Run Code Online (Sandbox Code Playgroud)