SQL查询 - INNER JOIN - WHERE与AND

时间:2017-07-16 15:19:02

标签: sql join inner-join where-clause

我正在练习SQL查询,而我对问题的解决方案是:

SELECT C.* 
FROM customer C  
INNER JOIN salesman S  ON C.salesman_id = S.salesman_id 
WHERE S.commission > .12 
  AND C.city <> S.city;

这个问题的解决方案是:

WHERE

然而,两个输出之间没有区别。

所以我想了解何时应将AND子句和INNER JOIN子句与------ Discover test started ------ NUnit Adapter 3.7.0.0: Test discovery starting Dependent Assembly nunit.framework of c:\users\paul\documents\visual studio 2017\Projects\bankAccount\bankAccount\bin\Debug\bankAccount.dll not found. Can be ignored if not a NUnit project. NUnit Adapter 3.7.0.0: Test discovery complete ========== Discover test finished: 0 found (0:00:00.0540843) ========== 一起使用?

两个给定的查询之间是否存在任何性能差异?

2 个答案:

答案 0 :(得分:2)

两个查询之间没有任何区别。作为惯例,两个查询之间的条件通常放在on子句中:

select C.*
from customer C inner join
     salesman S 
     on C.salesman_id = S.salesman_id and S.city <> C.city
where S.commission > 0.12;

但从功能上讲,on子句或where子句中可以包含其他条件 - 结果和性能应该相同。注意:外部联接不是这样。在这种情况下,条件通常应该放在on子句中。

答案 1 :(得分:1)

Gordon Linoff的回答是正确的,然而,我是提出处理这种关系的条件的主要倡导者,即。连接表的(外部)键,进入&#34; on子句&#34;其余的进入where子句。这给了一个很好的关注点 - 特别是当你有一个复合键时。

如果您保持该模式并且表结构发生变化而影响连接条件,则只需更改on-clause,无需担心where部分。