可能的重复:
INNER JOIN 与 WHERE 子句 — 有什么区别? https://stackoverflow.com/questions/1018822/inner-join-versus-where-clause-any-difference
和有什么区别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;
没有理由使用隐式连接(带逗号的连接)。是的,对于内部联接,它将返回相同的结果。然而,它会受到无意的交叉联接的影响,尤其是在复杂的查询中,并且维护起来更加困难,因为左/右外联接语法(在 SQL Server 中已弃用,现在无论如何都不能正常工作)因供应商而异。由于您不应该在同一查询中混合隐式连接和显式连接(您可能会得到错误的结果),因此需要将某些内容更改为左连接意味着重写整个查询。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)