Разница между СОЕДИНЕНИЕМ и ВНУТРЕННИМ СОЕДИНЕНИЕМ

StackOverflow https://stackoverflow.com/questions/565620

Вопрос

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

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

против

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

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

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

Это было полезно?

Решение

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

Другие советы

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

ВНУТРЕННЕЕ СОЕДИНЕНИЕ = JOIN ( ОБЪЕДИНЕНИЕ)

ВНУТРЕННЕЕ СОЕДИНЕНИЕ - это по умолчанию, если вы не укажете тип, когда вы используете слово ПРИСОЕДИНИТЬСЯ.

Вы также можете использовать ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ или ПРАВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ, в этом случае слово OUTER необязательно, или вы можете указать ПЕРЕКРЕСТНОЕ СОЕДИНЕНИЕ.

или

Для внутреннего соединения синтаксис следующий:

ВЫБЕРИТЕ ...
ИЗ таблицы
[ВНУТРЕННЯЯ] ТАБЛИЦА СОЕДИНЕНИЯ B

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

Аналогично с 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

Отличается ли это между различными реализациями 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top