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 部分。
我在练习 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 部分。