逗号分隔的连接和MySQL中的语法连接有什么区别?

例如,如果我有一个表“Person”的列“id”引用列表“工作人员”列“id”

这两个查询之间的区别是什么? 他们产生相同的结果。

SELECT * FROM Person JOIN Worker ON Person.id = Worker.id; 

 SELECT * FROM Person, Worker WHERE Person.id = Worker.id; 

谢谢

根本没有区别

第二种表示方式使得查询更具可读性,并且使得它看起来非常清楚哪个连接对应于哪个条件。

查询在逻辑上是等效的。 逗号运算符相当于[INNER] JOIN运算符。

逗号是旧式的连接运算符。 JOIN关键字后来被添加,并且因为它也允许OUTER连接操作而受到青睐。

它还允许将连接谓词(条件)从WHERE子句分离为ON子句。 这可以提高(人类)的可读性。

除了更好的可读性之外,还有一种情况是显式连接表更好,而不是逗号分隔表。

我们来看一个例子:

 Create Table table1 ( ID int NOT NULL Identity(1, 1) PRIMARY KEY , Name varchar(50) ) Create Table table2 ( ID int NOT NULL Identity(1, 1) PRIMARY KEY , ID_Table1 INT NOT NULL ) 

以下查询将给我所有列和两个表中的行

 SELECT * FROM table1, table2 

下面的查询将给我第一个表的列与表别名称为'table2'

 SELECT * FROM table1 table2 

如果在逗号分隔的连接中误忘了逗号,则第二个表将自动转换为第一个表的表别名。 不是所有情况下,但有这样的机会

The SELECT * FROM table1, table2, etc.适用于几个表格,但随着表格数量的增加,它变得成倍地增加。

JOIN语法使得它明确哪些标准影响哪个表(给出一个条件)。 另外,第二种方法是较旧的标准。

尽pipe对数据库来说, 它们最终是一样的

使用JOINS使得代码更易于阅读,因为它是不言自明的。

速度没有什么区别(我testing过),执行计划是一样的

如果查询优化器正在做它的工作,这些查询应该没有区别。 他们只是两种方式来指定相同的预期结果。