如果您将INNER JOIN
替换为OUTER JOIN
,将有所不同。
否则,这些查询:
SELECT ...
FROM A
INNER JOIN
B
ON A.PK = B.FK
WHERE A.Name = "Foo"
AND B.Title = "Bar"
SELECT ...
FROM A
INNER JOIN
B
ON A.PK = B.FK
AND B.Title = "Bar"
WHERE A.Name = "Foo"
SELECT *
FROM A, B
WHERE B.Title = "Bar"
AND A.Name = "Foo"
AND A.PK = B.FK
是相同的。
Oracle
,MySQL
,PostgeSQL
和SQL Server
将对待他们完全一样,并使用完全相同的计划为他们所有。如果在B.FK
单列关键,而这一次
SELECT ...
FROM A
INNER JOIN
B
ON B.FK = A.PK
WHERE A.Name = "Foo"
AND B.Title = "Bar"
:
SELECT ...
FROM A
INNER JOIN
B
ON B.FK = A.PK
AND B.Title = "Bar"
WHERE A.Name = "Foo"
如果在(B.FK, B.title)
复合键
我会用这一个。
在这种情况下,连接条件更直观。
我会认为查询优化器并不在乎;但我不是大师...... – balpha 2009-08-05 16:29:46
@balpha:只适用于* INNER *连接。外部连接有区别。确切地说,是 – Sung 2009-08-06 05:09:08