where执行顺序 - mysql right join




MySQL中逗号分隔的连接和语法连接之间有什么区别? (4)

这个问题在这里已有答案:

例如,如果我有一个表“Person”,其列“id”引用表“Worker”中的列“id”

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

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

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

谢谢


The SELECT * FROM table1, table2, etc.适用于几个表,但随着表数的增加,它会变得指数级更难。

JOIN语法明确了哪些条件会影响哪些表(给出条件)。 另外,第二种方式是较旧的标准。

虽然,对于数据库来说, 它们最终都是一样的


完全没有区别

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


查询在逻辑上是等效的。 逗号运算符相当于[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

如果您在逗号分隔的连接中错误地忘记了逗号,则第二个表会自动转换为第一个表的表别名。 并非在所有情况下,但有机会这样的事情







syntax