Разница между СОЕДИНЕНИЕМ и ВНУТРЕННИМ СОЕДИНЕНИЕМ
-
05-09-2019 - |
Вопрос
Оба этих соединения дадут мне одинаковые результаты:
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;