В чем разница между CROSS JOIN и FULL OUTER JOIN в SQL Server?
Они одинаковые или нет? Пожалуйста, объясни. Когда можно использовать один из них?
sql-server
cross-join
full-outer-join
Саджид Исмаил
источник
источник
FROM t1 FULL OUTER JOIN t2 ON t1.id=t2.id
всегда будет быстрее, чемFROM t1,t2 WHERE t1.id=t2.id
?outer join
быстрее илиcross join
?Одной вещью, которая не всегда может быть очевидна для некоторых, является то, что перекрестное соединение с пустой таблицей (или набором результатов) приводит к пустой таблице (M x N; следовательно, M x 0 = 0)
Полное внешнее соединение всегда будет иметь строки, если только M и N не равны 0.
источник
Я хотел бы добавить один важный аспект к другим ответам, который фактически объяснил мне эту тему наилучшим образом:
Если 2 соединенные таблицы содержат M и N строк, то перекрестное объединение всегда будет производить (M x N) строк, а полное внешнее объединение будет производить от MAX (M, N) до (M + N) строк (в зависимости от того, сколько строк на самом деле совпадение предиката "on").
РЕДАКТИРОВАТЬ:
С точки зрения обработки логических запросов CROSS JOIN действительно всегда производит M x N строк. Что происходит с FULL OUTER JOIN, так это то, что и левая, и правая таблицы «сохраняются», как если бы произошло как левое, так и правое соединение. Таким образом, строки, не удовлетворяющие предикату ON, из левой и правой таблиц добавляются в набор результатов.
источник
cross join
таблица умножается; аfull outer join
добавляет их в худшем случае, в зависимости от того, сколько строк совпадает ..Перекрестное объединение: Перекрестное объединение дает результаты, которые состоят из каждой комбинации строк из двух или более таблиц. Это означает, что если таблица A имеет 3 строки, а таблица B имеет 2 строки, CROSS JOIN приведет к 6 строкам. Между этими двумя таблицами нет никакой связи - вы буквально просто производите каждую возможную комбинацию.
Полное внешнее соединение: ПОЛНОЕ НАРУЖНОЕ СОЕДИНЕНИЕ не является ни «левым», ни «правым» - это оба! Он включает в себя все строки из обеих таблиц или наборов результатов, участвующих в JOIN. Если для строк в левой части JOIN не существует подходящих строк, вы увидите нулевые значения из результирующего набора в правой части. И наоборот, если для строк на правой стороне JOIN не существует подходящих строк, вы увидите нулевые значения из результирующего набора на левой стороне.
источник
Для SQL Server
CROSS JOIN and FULL OUTER JOIN
разные.CROSS JOIN
это просто декартово произведение двух таблиц, независимо от каких-либо критериев фильтрации или каких-либо условий.FULL OUTER JOIN
дает уникальный результат набораLEFT OUTER JOIN and RIGHT OUTER JOIN
из двух таблиц. Также необходимо условие ON для сопоставления двух столбцов таблиц.источник
Это те же понятия, кроме возвращенного значения NULL.
Увидеть ниже:
источник
Перекрестное соединение : http://www.dba-oracle.com/t_garmany_9_sql_cross_join.htm
TLDR; Создает все возможные комбинации между 2 таблицами (продукт Carthesian)
(Полная версия) Внешнее присоединение : http://www.w3schools.com/Sql/sql_join_full.asp
TLDR; Возвращает каждую строку в обеих таблицах, а также результаты, которые имеют одинаковые значения (совпадения в СОСТОЯНИИ)
источник
Полное внешнее соединение объединяет левое внешнее соединение и правое внешнее соединение. Результирующий набор возвращает строки из обеих таблиц, в которых выполняются условия, но возвращает нулевые столбцы, в которых нет соответствия.
Перекрестное соединение - это декартово произведение, которое не требует каких-либо условий для объединения таблиц. Результирующий набор содержит строки и столбцы, которые являются умножением обеих таблиц.
источник
Вот пример, где и FULL OUTER JOIN, и CROSS JOIN возвращают один и тот же набор результатов без возврата NULL. Обратите внимание, что 1 = 1 в предложении ON для FULL OUTER JOIN:
источник
SQL FULL OUTER JOIN
FULL OUTER JOIN возвращает все строки из левой таблицы (table1) и из правой таблицы (table2) независимо от совпадения.
Ключевое слово FULL OUTER JOIN объединяет результаты как LEFT OUTER JOIN, так и RIGHT OUTER JOIN
Ссылка: http://datasciencemadesimple.com/sql-full-outer-join/
SQL CROSS JOIN
В SQL CROSS JOIN Каждая строка первой таблицы сопоставляется с каждой строкой второй таблицы.
Количество строк, созданных результирующим набором операции CROSS JOIN, равно количеству строк в первой таблице, умноженному на количество строк во второй таблице.
CROSS JOIN также известен как декартово произведение / декартово соединение
Количество строк в таблице A равно m, Количество строк в таблице B равно n, и в результирующей таблице будет m * n строк
Ссылка: http://datasciencemadesimple.com/sql-cross-join/
источник