SQL Server: Каково различие между ПЕРЕКРЕСТНЫМ ОБЪЕДИНЕНИЕМ и ПОЛНЫМ ВНЕШНИМ ОБЪЕДИНЕНИЕМ?

Каково различие между ПЕРЕКРЕСТНЫМ ОБЪЕДИНЕНИЕМ и ПОЛНЫМ ВНЕШНИМ ОБЪЕДИНЕНИЕМ в SQL Server?

Действительно ли они - то же, или нет? Объясните. Когда можно было бы использовать любой из них?

177
задан marc_s 12 July 2010 в 13:58
поделиться

3 ответа

Перекрестное соединение производит декартово произведение между двумя таблицами, возвращая все возможные комбинации всех строк. В нем нет пункта в , потому что вы просто присоединяете все ко всему.

Полное внешнее соединение представляет собой комбинацию левого внешнего и правого внешнего соединения. Он возвращает все строки в обеих таблицах, которые соответствуют предложению запроса where , а в случаях, когда условие on не может быть выполнено для этих строк, оно помещает null значения в незаполненных полях.

В этой статье википедии объясняются различные типы объединений с примерами вывода для образца набора таблиц.

231
ответ дан 23 November 2019 в 20:19
поделиться

Перекрестное соединение : http://www.dba-oracle.com/t_garmany_9_sql_cross_join.htm

TL; DR; Создает все возможные комбинации между 2 таблицами (Картезианское произведение)

(Полное) Внешнее соединение : http://www.w3schools.com/Sql/sql_join_full.asp

TL; DR; Возвращает каждую строку в обеих таблицах, а также результаты с одинаковыми значениями (совпадают в УСЛОВИИ)

5
ответ дан 23 November 2019 в 20:19
поделиться

Перекрестное соединение :Перекрестное соединение дает результаты, состоящие из каждой комбинации строк из двух или более таблиц. Это означает, что если таблица A содержит 3 строки, а таблица B - 2 строки, то в результате перекрестного соединения будет получено 6 строк. Между двумя таблицами не устанавливается никакой связи - вы буквально просто получаете все возможные комбинации.

Полное внешнее соединение: ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ не является ни "левым", ни "правым" - оно является и тем, и другим! Оно включает все строки из обеих таблиц или наборов результатов, участвующих в объединении. Если для строк на "левой" стороне JOIN не существует совпадающих строк, вы видите нулевые значения из набора результатов на "правой" стороне. И наоборот, когда для строк с "правой" стороны JOIN нет совпадающих строк, вы видите Null-значения из набора результатов "слева".

14
ответ дан 23 November 2019 в 20:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: