Подтвердить что ты не робот

Оставлены ли внешние соединения и левые соединения одинаковыми?

Я видел соединения, называемые LEFT OUTER JOIN или RIGHT OUTER JOIN. В некоторых местах я видел ЛЕВОЕ ПРИСОЕДИНЕНИЕ ИЛИ ПРАВОЕ СОЕДИНЕНИЕ. Я смущен этим.

Я отправил вопрос 2 дня назад, но я не могу понять ссылки, которые предоставляют решения.

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

4b9b3361

Ответ 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 с добавленным ограничением (условие соединения).

Ответ 3

Если вы посмотрите на странице руководства 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 является необязательным.

Ответ 4

В синтаксисе 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 может быть недействительным.

Ответ 5

Я работаю на SQL Server, и по моему использованию и опыту нет никакой разницы между LEFT JOIN и LEFT OUTER JOIN. То же самое верно для RIGHT JOIN и RIGHT OUTER JOIN. Когда вы используете ключевое слово LEFT JOIN в SQL Server, это означает только LEFT OUTER JOIN. Так что, по моему мнению, это общее правило, которое одинаково для всех двигателей баз данных.

см. здесь и здесь