Разница между соединением и внутренним соединением


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

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

vs

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

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

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

7 798

7 ответов:

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

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

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

Enter image description here

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


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

ВНУТРЕННЕЕ СОЕДИНЕНИЕ = ПРИСОЕДИНЯЙТЕСЬ К:

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

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

или

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

выбрать ...
Из таблицы 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и требуются. При указании подсказки соединения.

Смотрите пример ниже

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