SQL 查询 - INNER JOIN - WHERE 与 AND

SQL Query - INNER JOIN - WHERE vs AND

我在练习 SQL 个查询,我对一个问题的解答是:

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

这道题的答案是:

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

给定的两个查询之间会有任何性能差异吗?

两个查询之间没有任何区别。按照惯例,两个查询之间的条件通常放在 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 子句中。

Gordon Linoff 的回答是正确的,但是,我大力提倡放置处理关系的条件,即。连接 table 的(外)键进入 "on clause" ,其余进入 where 子句。这很好地分离了关注点——尤其是当你有一个复合键时。

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