Если вы замените 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
будут относиться к ним точно так же, и использовать точно такие же план для всех из них.
Я хотел бы использовать этот один:
SELECT ...
FROM A
INNER JOIN
B
ON B.FK = A.PK
WHERE A.Name = "Foo"
AND B.Title = "Bar"
если есть ключ один столбец на B.FK
, и это одна:
SELECT ...
FROM A
INNER JOIN
B
ON B.FK = A.PK
AND B.Title = "Bar"
WHERE A.Name = "Foo"
если есть составной ключ на (B.FK, B.title)
.
В этом случае условия соединения более визуальны.
Я бы подумал, что запрос optimzier не может волновать; но я не гуру ... – balpha
@balpha: это верно только для * INNER *. Для соединений OUTER существует разница. – Sung