Что дает более быстрый запрос?Что чище?Присоединяйтесь или где - PullRequest
2 голосов
/ 08 октября 2010

Когда мне следует использовать JOIN ON или WHERE в сценарии, подобном приведенному ниже?

DECLARE
  @PhoneNumber int = 5551234

-- JOIN ON
SELECT *
FROM Persons
JOIN Employees ON Persons.DateOfBirth = Employees.DateOfBirth AND
Persons.PhoneNumber = Employees.PhoneNumber
WHERE Persons.PhoneNumber = @PhoneNumber

-- WHERE
SELECT *
FROM Persons
JOIN Employees ON Persons.DateOfBirth = Employees.DateofBirth
WHERE Persons.PhoneNumber = @PhoneNumber AND Employees.PhoneNumber = @PhoneNumber

Я знаю, что первый запрос будет иметь один столбец PhoneNumber, а второй - два.Это существенно повлияет на скорость запроса?

Ответы [ 3 ]

7 голосов
/ 08 октября 2010

Помимо синтаксических ошибок, вы сравниваете синтаксис ANSI-89 JOIN (критерии JOIN в предложении WHERE) с синтаксисом ANSI-92 JOIN (используется ключевое слово JOIN).

Они работают идентично друг другу, но в ANSI-89 отсутствует поддержка OUTER JOIN, поэтому во многих базах данных есть пользовательские средства указания соединений OUTER:

database     ANSI-89 OUTER JOIN syntax
------------------------------------
Oracle       t1.column = t2.column(+)
SQL Server   t1.column =* t2.column

Для переносимости и читабельности - используйтеСинтаксис ANSI-92.

3 голосов
/ 08 октября 2010

Для внутреннего объединения не имеет значения, будут ли предикаты помещены в условие соединения или где предложение.

Я бы поместил материал, связанный с объединением таблиц в предложении объединения, и материал, связанный с фильтрацией, в предложении where.

SELECT *
FROM Persons
JOIN Employee ON Persons.PhoneNumber = Employee.PhoneNumber
WHERE Persons.PhoneNumber = @PhoneNumber
0 голосов
/ 08 октября 2010

JOIN - правильный выбор для ... объединения таблиц, логически связанных с внешними ключами. Причина в том, что вы можете создавать различные виды объединений (левый, правый, внутренний, внешний).

ГДЕ больше логическая фильтрация строк.

В вашем простом примере нет никакой разницы между ними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...