当在主键列上连接两个简单表并放置附加相等条件时,可以在连接本身或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
这是样式问题。通常,您需要将定义结果集的“形状”的条件放在FROM子句中(即那些控制每个表的哪些行应连接在一起以产生结果的条件),而那些条件将对结果进行 过滤 set应该在WHERE子句中。对于INNER JOIN,效果是相同的,但是一旦包含OUTER JOIN(左,右),感觉就会更加清晰。
在您的第一个示例中,我剩下的问题是“这与表B有什么关系?” 当我在JOIN中遇到这种奇怪的情况时。而在第二个中,如果我不感兴趣,则可以跳过FROM子句(和所有JOIN),只是在WHERE子句中看到确定行是否要返回的条件。