一尘不染

在from子句或where子句中进行等值联接是否更好?

sql

当在主键列上连接两个简单表并放置附加相等条件时,可以在连接本身或where子句中完成。

例如,以下等价。 我的问题是-是否有理由使用一种样式而不是另一种样式?

SELECT * 
FROM A
INNER JOIN B ON A.A_ID = B.A_ID
            AND A.DURATION = 3.00

…对比:

SELECT * 
FROM A
INNER JOIN B ON A.A_ID = B.A_ID
WHERE A.DURATION = 3.00

阅读 198

收藏
2021-05-05

共1个答案

一尘不染

这是样式问题。通常,您需要将定义结果集的“形状”的条件放在FROM子句中(即那些控制每个表的哪些行应连接在一起以产生结果的条件),而那些条件将对结果进行
过滤 set应该在WHERE子句中。对于INNER JOIN,效果是相同的,但是一旦包含OUTER JOIN(左,右),感觉就会更加清晰。


在您的第一个示例中,我剩下的问题是“这与表B有什么关系?”
当我在JOIN中遇到这种奇怪的情况时。而在第二个中,如果我不感兴趣,则可以跳过FROM子句(和所有JOIN),只是在WHERE子句中看到确定行是否要返回的条件。

2021-05-05