LEFT JOIN还是只选择其他表格?

时间:2011-10-27 22:27:06

标签: php mysql join left-join

我想知道明确说LEFT JOIN之间的速度,然后简单地加入彼此的值。所以在这里,我们有:

SELECT example.id FROM example
LEFT JOIN finals ON example.id = finals.account_id";

VS

SELECT example.id, finals.account_id
FROM example, finals
WHERE example.id = finals.account_id

我几乎可以肯定第一个更快,但我找不到建议的答案。 (我实际上甚至不确定要叫'第二个',我只称它为软连接)

4 个答案:

答案 0 :(得分:2)

这些查询之间存在 sematic 差异。

第一个连接是一个OUTER JOIN,它包含左表中的所有行。第二个是INNER JOIN,不包括匹配失败的行。

如果你写了JOIN而不是LEFT JOIN,那么两个查询将是相同的,除了第一个语法是可读性和可维护性的首选。

  

我实际上甚至不确定将第二个称为“呼叫”,我称之为软连接。

第二种语法使用MySQL称之为“逗号运算符”的语法。它有时被称为隐式连接。它也被称为 ANSI-89加入

答案 1 :(得分:2)

第二个是INNER JOIN(默认值),它不是速度问题而是输出 - 内连接只会返回两个表中指定字段存在的位置。

例如,如果example记录为#3但没有finals记录且account_id为3,则不会显示任何记录

即使没有匹配的LEFT JOIN记录,example也会列出来自finals的记录 - 缺少的字段将设置为NULL

答案 2 :(得分:0)

第二个示例执行INNER JOIN并返回可能不同的结果。

答案 3 :(得分:0)

你无法真正比​​较两者的速度,因为它们会给出不同的结果。第二个查询需要在两个表上都有一个条目。第一个查询只需要在第一个表上输入一个条目。

第二个查询是使用CROSS JOIN(与mysql中的JOIN没有区别。逗号是没有ON子句的JOIN的别名)。