Ответ 1
Они функционально эквивалентны, но INNER JOIN
может быть более понятным для чтения, особенно если запрос содержит другие типы соединений (т.е. LEFT
или RIGHT
или CROSS
)).
Оба этих объединения дадут мне те же результаты:
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
выполняет операцию INNER JOIN
по умолчанию.
Для всех остальных одна картина иногда стоит более сотни слов:
Изображение предоставлено проектом Code.
Нет, нет разницы, чистый синтаксический сахар.
INNER JOIN = ПРИСОЕДИНЯЙТЕСЬ
INNER JOIN используется по умолчанию, если вы не указываете тип, когда используете слово JOIN.
Вы также можете использовать LEFT OUTER JOIN или RIGHT OUTER JOIN, в этом случае слово OUTER является необязательным, или вы можете указать CROSS JOIN.
ИЛИ ЖЕ
Для внутреннего объединения синтаксис:
ВЫБРАТЬ...
ИЗ таблицы А
[INNER] РЕЙТИНГ TableB(другими словами, ключевое слово "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;
INNER = INNER JOIN, но когда вы пишете INNER JOIN - вы можете провести аналогию с Sets From Math, поэтому INNER JOIN является пересечением в диаграмме Венна. Таким образом, INNER JOIN более интуитивно понятен, чем JOIN для новичка, в смысле того, что на самом деле делают ключевое слово INNER JOIN против ключевого слова JOIN, и вы можете узнать разницу между INNER JOIN и OUTER JOIN гораздо проще.
Пример ВНУТРЕННЕГО СОЕДИНЕНИЯ
Пример ПРАВИЛЬНОГО ВНЕШНЕГО СОЕДИНЕНИЯ