通过以下两种方式完成的子句有什么区别?

SELECT * FROM table1 INNER JOIN table2 ON (
    table2.col1 = table1.col2 AND
    table2.member_id = 4
)

我已经将它们与基本查询和EXPLAIN EXTENDED进行了比较,没有发现任何区别。我想知道这里是否有人发现了在更复杂/处理强度更高的环境中的区别。
SELECT * FROM table1 INNER JOIN table2 ON (
    table2.col1 = table1.col2
)
WHERE table2.member_id = 4

最佳答案

使用INNER联接,这两种方法将给出相同的结果,并且应产生相同的查询计划。

但是,JOIN(描述两个表之间的关系)和WHERE子句(从结果集中删除行)之间在语义上存在差异。这种语义上的差异应告诉您使用哪个。尽管对结果或性能没有影响,但选择正确的语法将帮助您的代码的其他读者更快地理解它。

请注意,如果您使用外部联接而不是内部联接,可能会有所不同。例如,如果将INNER更改为LEFT并且联接条件失败,则使用第一种方法仍将获得一行,但是如果使用第二种方法,则它将被过滤掉(因为NULL不等于4)。

关于mysql - MySQL Join子句与WHERE子句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4160637/

10-16 00:28