Ответ 1
Между ними нет никакой разницы. Обратитесь визуальное представление объединений
Я видел соединения, называемые LEFT OUTER JOIN или RIGHT OUTER JOIN. В некоторых местах я видел ЛЕВОЕ ПРИСОЕДИНЕНИЕ ИЛИ ПРАВОЕ СОЕДИНЕНИЕ. Я смущен этим.
Я отправил вопрос 2 дня назад, но я не могу понять ссылки, которые предоставляют решения.
Являются ли эти типы объединений одинаковыми или есть какая-то разница между двумя?
Между ними нет никакой разницы. Обратитесь визуальное представление объединений
Первая ссылка, которую они цитируют, дает вам:
INNER JOIN
: возвращает строки, когда есть совпадение в обеих таблицах.
LEFT JOIN / LEFT OUTER JOIN
: возвращает все строки из левой таблицы, даже если в правой таблице нет совпадений.
RIGHT JOIN / RIGHT OUTER JOIN
: возвращает все строки из правой таблицы, даже если в левой таблице нет совпадений.
FULL JOIN / FULL OUTER JOIN / OUTER JOIN
: возвращает строки, когда есть совпадение в одной из таблиц.
SELF JOIN
: используется для объединения таблицы в себя, как если бы в таблице были две таблицы, временно переименовывая по крайней мере одну таблицу в инструкции SQL.
CARTESIAN JOIN
: возвращает декартово произведение наборов записей из двух или более объединенных таблиц.
SELF JOIN
на самом деле не a special join
. Он просто отражает тот факт, что вы можете присоединиться к таблице с собой. При этом вы должны использовать его, чтобы устранить тот факт, что он появляется несколько раз в одном и том же выражении.
CARTESIAN JOIN
можно рассматривать как INNER JOIN
без ограничивающего условия. Или вы можете просмотреть INNER JOIN
как CARTESIAN JOIN
с добавленным ограничением (условие соединения).
Если вы посмотрите на странице руководства JOIN, вы увидите следующие строки:
join_table:
table_reference [INNER | CROSS] JOIN table_factor [join_condition]
| table_reference STRAIGHT_JOIN table_factor
| table_reference STRAIGHT_JOIN table_factor ON conditional_expr
| table_reference {LEFT | RIGHT} [OUTER] JOIN table_reference join_condition
| table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor
Жирная линия ясно показывает, что ключевое слово OUTER является необязательным.
В синтаксисе MySQL LEFT OUTER JOIN
и LEFT JOIN
идентичны: (из http://dev.mysql.com/doc/refman/5.0/en/join.html)
| table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_condition
| table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor
Обратите внимание, что ключевое слово OUTER
является необязательным для LEFT/RIGHT JOIN.
ВЛЕВО и ВРАЩАЮТ соединения являются внешними соединениями. Я считаю, что есть некоторые особенности SQL, для которых может потребоваться ключевое слово OUTER
, но MySQL этого не делает. То есть, временами LEFT JOIN
может быть недействительным.
Я работаю на SQL Server, и по моему использованию и опыту нет никакой разницы между LEFT JOIN
и LEFT OUTER JOIN
. То же самое верно для RIGHT JOIN
и RIGHT OUTER JOIN
. Когда вы используете ключевое слово LEFT JOIN
в SQL Server, это означает только LEFT OUTER JOIN
.
Так что, по моему мнению, это общее правило, которое одинаково для всех двигателей баз данных.