逗号分隔的连接和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过),执行计划是一样的
如果查询优化器正在做它的工作,这些查询应该没有区别。 他们只是两种方式来指定相同的预期结果。