LEFT JOIN或只选择其他表


LEFT JOIN or just select additional tables?

我想知道显式地说LEFT JOIN和简单地连接彼此的值之间的速度。这里,我们有:

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

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

我几乎可以肯定第一种更快,但我找不到一个答案来证明这一点。(实际上我甚至不确定如何"称呼"第二个,我只是称之为软连接)

这两个查询在语义上是有区别的。

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

如果您编写的是JOIN而不是LEFT JOIN,那么这两个查询将是相同的,只是第一种语法在可读性和可维护性方面更受欢迎。

实际上我甚至不确定如何"称呼"第二个,我只是称之为软连接)

第二种语法使用MySQL所说的"逗号操作符"。它有时被称为隐式连接。它也被称为ANSI-89连接

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

例如,如果有example记录#3,但没有finals记录,account_id为3,则两个记录都不会显示

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

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

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

第二个查询使用CROSS JOIN(与mysql中的JOIN没有区别)。