В чем разница между JOIN и INNER JOIN?
У меня есть вопрос по поводу двух SQL-запросов, которые дают одинаковые результаты:
SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK
в сравнении с
SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK
Есть ли какая-то разница между этими запросами с точки зрения производительности или других аспектов? Может быть, это различие проявляется в разных реализациях SQL?
3 ответ(ов)
Они функционально эквивалентны, но INNER JOIN
может быть немного проще для восприятия, особенно если в запросе имеются и другие типы соединений (например, LEFT
, RIGHT
или CROSS
).
INNER JOIN = JOIN
- INNER JOIN является умолчательным вариантом, если вы не указываете тип при использовании слова JOIN.
Вы также можете использовать LEFT OUTER JOIN или RIGHT OUTER JOIN, в этом случае слово OUTER является необязательным, или можно указать CROSS JOIN.
ИЛИ
Синтаксис для INNER JOIN:
SELECT ... FROM TableA [INNER] JOIN 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
Такое предпочтение использования "OUTER"
и'JOIN'
может быть связано с желанием быть более ясным в выражении типа соединения, что может помочь в дальнейшем чтении и сопровождении кода.
В чем разница между "INNER JOIN" и "OUTER JOIN"?
В чем разница между INNER JOIN, LEFT JOIN, RIGHT JOIN и FULL JOIN?
INNER JOIN ON vs WHERE: что выбрать?
Обновление данных в одной таблице из другой на основе совпадения ID
Как удалить с использованием INNER JOIN в SQL Server?