Разница между ВНУТРЕННИМ СОЕДИНЕНИЕМ и ГДЕ? - PullRequest
6 голосов
/ 06 июня 2011

Первый запрос:

Select * from table1 inner join table2 on table1.Id = table2.Id

Второй запрос:

Select * from table1, table2 where table1.Id = table2.Id

В чем разница между этими запросами относительно производительности, которая должнаиспользовать?

Ответы [ 2 ]

13 голосов
/ 06 июня 2011

Два опубликованных вами заявления логически идентичны. Там на самом деле не практическая причина, чтобы предпочесть одно над другим, это в значительной степени вопрос личный стиль и удобочитаемость. Некоторые люди предпочитают синтаксис INNER JOIN и некоторые предпочитают просто использовать ГДЕ .

Ссылаясь на Использование внутренних соединений :

В стандарте ISO внутренние соединения могут быть указан либо в ОТ ГДЕ оговорка. Это единственный тип присоединяйтесь к тому, что ISO поддерживает в ГДЕ пункт. Внутренние соединения, указанные в ГДЕ пункт известен как старый стиль внутренние соединения.

Ссылаясь на Основы объединения :

Указание условий соединения в Предложение FROM помогает отделить их от любые другие условия поиска, которые могут быть указан в предложении WHERE и является рекомендуемый метод для указания соединения.

Лично я предпочитаю использовать INNER JOIN. Я нахожу это намного более понятным, поскольку я могу отделить условия соединения от условий фильтра и использовать отдельный блок соединения для каждой объединенной таблицы.

1 голос
/ 06 июня 2011

Чтобы усилить ответ @ Akram - многие люди предпочитают синтаксис inner join, поскольку он позволяет легче различать условия соединения (как различные таблицы в предложении FROM связаны друг с другом) от условий фильтра (те условия, которые следует использовать для сокращения общего результирующего набора. В этом случае нет никакой разницы между ними, но при более крупных запросах с большим количеством таблиц это может улучшить удобочитаемость при использовании формы inner join.

ВКроме того, как только вы начнете рассматривать внешние объединения, вам вполне нужно использовать синтаксис объединения инфиксов (left outer join, right outer join), поэтому многие находят форму симметрии в использовании того же стиля для inner join.устаревший синтаксис для выполнения внешних объединений в предложении WHERE (с использованием *=), но поддержка таких объединений не работает.

...