可能重复:
INNER JOIN
查询和 隐式连接 查询(即在 FROM
关键字之后列出多个表)之间有什么区别?
例如,给定以下两个表:
CREATE TABLE Statuses(
id INT PRIMARY KEY,
description VARCHAR(50)
);
INSERT INTO Statuses VALUES (1, 'status');
CREATE TABLE Documents(
id INT PRIMARY KEY,
statusId INT REFERENCES Statuses(id)
);
INSERT INTO Documents VALUES (9, 1);
以下两个 SQL 查询有什么区别?
根据我所做的测试,它们返回相同的结果。他们做同样的事情吗?是否存在它们将返回不同结果集的情况?
-- Using implicit join (listing multiple tables)
SELECT s.description
FROM Documents d, Statuses s
WHERE d.statusId = s.id
AND d.id = 9;
-- Using INNER JOIN
SELECT s.description
FROM Documents d
INNER JOIN Statuses s ON d.statusId = s.id
WHERE d.id = 9;
原文由 Michael 发布,翻译遵循 CC BY-SA 4.0 许可协议
没有理由使用隐式连接(带有逗号的连接)。是的,对于内部连接,它将返回相同的结果。但是,它容易受到无意的交叉连接的影响,尤其是在复杂的查询中,并且更难维护,因为左/右外连接语法(在 SQL Server 中已弃用,它现在无论如何都不能正常工作)因供应商而异。由于您不应该在同一个查询中混合隐式和显式连接(您可能会得到错误的结果),因此需要将某些内容更改为左连接意味着重写整个查询。