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

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

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

vs

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

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

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

7 ответов


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


просто введя JOIN выполняет INNER JOIN по умолчанию.

для всех остальных, одна картинка иногда стоит больше, чем сотни слов:

Enter image description here

Изображение предоставлено Проект Код.



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


ВНУТРЕННЕЕ СОЕДИНЕНИЕ = JOIN:

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

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

или

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

выбрать ...
Из таблицы tablea
[ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таблицы tableb

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


аналогично и с OUTER JOINs слово "OUTER" является необязательным. Это LEFT или RIGHT ключевое слово, которое делает JOIN an "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

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

Да Microsoft Access не только join. Это требует inner join.


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

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

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

показывая, что все являются необязательными. На странице далее уточняется, что

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

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

см. пример ниже

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