Разница между JOIN и INNER JOIN - PullRequest
       16

Разница между JOIN и INNER JOIN

886 голосов
/ 19 февраля 2009

Оба этих соединения дадут мне одинаковые результаты:

SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK

против

SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK

Есть ли разница между утверждениями в исполнении или иным образом?

Отличается ли это между различными реализациями SQL?

Ответы [ 6 ]

969 голосов
/ 19 февраля 2009

Они функционально эквивалентны, но INNER JOIN может быть немного понятнее для чтения, особенно если в запрос включены другие типы объединения (т.е. LEFT или RIGHT или CROSS).

219 голосов
/ 19 февраля 2009

Нет, разницы нет, чистый синтаксический сахар .

121 голосов
/ 28 февраля 2012

INNER JOIN = JOIN :

INNER JOIN - это значение по умолчанию , если вы не указываете тип при использовании слова JOIN.

Вы также можете использовать LEFT OUTER JOIN или RIGHT OUTER JOIN, в этом случае слово OUTER необязательно, или вы можете указать CROSS JOIN.

OR

Для внутреннего объединения синтаксис:

ВЫБРАТЬ ...
ИЗ таблицы A
[INNER] РЕЙТИНГ Таблица B

(другими словами, ключевое слово "INNER" - необязательно - результаты совпадают с или без)

47 голосов
/ 19 февраля 2009

Аналогично OUTER JOINs слово "OUTER" является необязательным. Это ключевое слово LEFT или RIGHT делает JOIN "OUTER" JOIN.

Однако по какой-то причине я всегда использую "OUTER" как в LEFT OUTER JOIN и никогда LEFT JOIN, но я никогда не использую INNER JOIN, а скорее просто "JOIN":

SELECT ColA, ColB, ...
FROM MyTable AS T1
     JOIN MyOtherTable AS T2
         ON T2.ID = T1.ID
     LEFT OUTER JOIN MyOptionalTable AS T3
         ON T3.ID = T1.ID
46 голосов
/ 15 мая 2012

Отличается ли он между различными реализациями SQL?

Да, Microsoft Access не позволяет просто join. Требуется inner join.

24 голосов
/ 02 августа 2015

Поскольку другие ответы уже заявляют, в вашем примере нет разницы.

Соответствующий бит грамматики задокументирован здесь

<join_type> ::= 
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
    JOIN

Показывает, что все необязательно. Страница дополнительно поясняет, что

INNER Указывает, что возвращаются все совпадающие пары строк. Выбрасывает непревзойденные строки из обеих таблиц. Когда тип соединения не указан, этот по умолчанию .

Грамматика также указывает, что есть один раз, когда INNER является обязательным . При указании подсказки о присоединении.

См. Пример ниже

CREATE TABLE T1(X INT);
CREATE TABLE T2(Y INT);

SELECT *
FROM   T1
       LOOP JOIN T2
         ON X = Y;

SELECT *
FROM   T1
       INNER LOOP JOIN T2
         ON X = Y;

enter image description here

...