测试 MySQL 的一些命令时,我发现这两个命令在同一个表上产生。
命令 1:
select sales.relatory_code, sales.date, destiny.exportation_name from sales, destiny where sales.destiny_exportation_code = destiny.destiny_exportation_code;
命令 2:
select sales.relatory_code, sales.date, destiny.exportation_name from sales inner join destiny on sales.destiny_exportation_code = destiny.destiny_exportation_code;
基本上,我没有在“from”子句上使用两个表并使用“where”子句,而是使用“内部连接”。我想知道这两个命令之间的主要区别是什么,以及一个是否比另一个更好。
命令 1 是用于表间连接的 SQL-89 标准。
命令 2 是根据 ANSI-92 SQL 标准(是的,即 1992 年的 92)编写 JOIN 的正确方法。大约 23 年后,人们仍然不想遵守 ANSI 连接标准。
从理论上讲,两者在性能方面没有区别,这显然只是人们很难改掉的习惯,如果习惯于以这种方式编写查询,有些人会发现它更具可读性。
在这篇 Stack Overflow 帖子中,人们使用旧标准而不是新标准还有更多原因。
我似乎也一直在参考Aaron Bertrand 的帖子(尽管这篇文章是关于 SQL Server 的)。这可能会为您提供更多信息,说明为什么您应该使用 ANSI-92 标准样式连接。