Answers:
没有“更好”或“更差”的联接类型。它们具有不同的含义,因此必须根据它们使用。
在你的情况,你可能不会有任何work_log员工(该表中没有行),所以LEFT JOIN
并JOIN
会在结果等同。但是,如果您有这样的事情(没有注册work_log的新雇员),则将JOIN
省略该雇员,而左联接(其第一个表是雇员)将显示所有这些雇员,如果存在,则在work_log的字段中为null不匹配。
同样,性能是查询正确性的第二要务。有人说您不应使用LEFT JOIN
。的确,LEFT JOIN会强制优化器以一种特定顺序执行查询,从而在某些情况下阻止某些优化(表重新排序)。这是一个例子。但是,如果牺牲了正确性/含义,则不应选择一个,因为INNER JOIN本质上不会更糟。其余的常规优化将照常应用。
总而言之,LEFT JOIN
如果您确实要使用,请不要使用INNER JOIN
。
在MySQL中CROSS JOIN
,INNER JOIN
和JOIN
相同。在标准中,从语义上讲,a CROSS JOIN
是INNER JOIN
不带ON
子句的,因此您可以获取表之间行的所有组合。
您可以在Wikipedia上找到有关连接的所有语义类型的示例。实际上,在MySQL中,我们倾向于只编写JOIN
和LEFT JOIN
。