我正在练习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) ==========
一起使用?
两个给定的查询之间是否存在任何性能差异?
答案 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部分。