Каково различие между ПЕРЕКРЕСТНЫМ ОБЪЕДИНЕНИЕМ и ПОЛНЫМ ВНЕШНИМ ОБЪЕДИНЕНИЕМ в SQL Server?
Действительно ли они - то же, или нет? Объясните. Когда можно было бы использовать любой из них?
Перекрестное соединение производит декартово произведение между двумя таблицами, возвращая все возможные комбинации всех строк. В нем нет пункта в
, потому что вы просто присоединяете все ко всему.
Полное внешнее соединение
представляет собой комбинацию левого внешнего
и правого внешнего
соединения. Он возвращает все строки в обеих таблицах, которые соответствуют предложению запроса where
, а в случаях, когда условие on
не может быть выполнено для этих строк, оно помещает null
значения в незаполненных полях.
В этой статье википедии объясняются различные типы объединений с примерами вывода для образца набора таблиц.
Перекрестное соединение : 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; Возвращает каждую строку в обеих таблицах, а также результаты с одинаковыми значениями (совпадают в УСЛОВИИ)
Перекрестное соединение :Перекрестное соединение дает результаты, состоящие из каждой комбинации строк из двух или более таблиц. Это означает, что если таблица A содержит 3 строки, а таблица B - 2 строки, то в результате перекрестного соединения будет получено 6 строк. Между двумя таблицами не устанавливается никакой связи - вы буквально просто получаете все возможные комбинации.
Полное внешнее соединение: ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ не является ни "левым", ни "правым" - оно является и тем, и другим! Оно включает все строки из обеих таблиц или наборов результатов, участвующих в объединении. Если для строк на "левой" стороне JOIN не существует совпадающих строк, вы видите нулевые значения из набора результатов на "правой" стороне. И наоборот, когда для строк с "правой" стороны JOIN нет совпадающих строк, вы видите Null-значения из набора результатов "слева".