Jaka jest różnica między CROSS JOIN a FULL OUTER JOIN w SQL Server?
Czy są takie same, czy nie? Proszę wytłumacz. Kiedy należy użyć któregokolwiek z nich?
sql-server
cross-join
full-outer-join
Saajid Ismail
źródło
źródło
FROM t1 FULL OUTER JOIN t2 ON t1.id=t2.id
zawsze będzie szybciej niżFROM t1,t2 WHERE t1.id=t2.id
?outer join
szybszy czycross join
?Jedną rzeczą, która nie zawsze może być oczywista dla niektórych, jest to, że połączenie krzyżowe z pustą tabelą (lub zestawem wyników) skutkuje pustą tabelą (M x N; stąd M x 0 = 0)
Pełne sprzężenie zewnętrzne zawsze będzie miało rzędy, chyba że zarówno M, jak i N są równe 0.
źródło
Chciałbym dodać jeden ważny aspekt do innych odpowiedzi, które faktycznie wyjaśniły mi ten temat w najlepszy sposób:
Jeśli 2 połączone tabele zawierają M i N wierszy, wówczas łączenie krzyżowe zawsze będzie dawało (M x N) wiersze, ale pełne łączenie zewnętrzne da wiersze od MAX (M, N) do (M + N) wierszy (w zależności od liczby faktycznie dopasuj predykat „on”).
EDYTOWAĆ:
Z logicznego punktu widzenia przetwarzania zapytań CROSS JOIN rzeczywiście zawsze generuje M x N wierszy. To, co dzieje się z FULL OUTER JOIN, polega na tym, że zarówno lewa, jak i prawa tabela są „zachowywane”, tak jakby nastąpiło połączenie LEWE i PRAWE. Tak więc wiersze, niespełniające predykatu ON, zarówno z lewej, jak i prawej tabeli są dodawane do zestawu wyników.
źródło
cross join
wielokrotność tabel; afull outer join
dodaje je w najgorszym przypadku, w zależności od liczby pasujących rzędów.Połączenia krzyżowe: Połączenia krzyżowe dają wyniki, które składają się z każdej kombinacji wierszy z dwóch lub więcej tabel. Oznacza to, że jeśli tabela A ma 3 wiersze, a tabela B ma 2 wiersze, połączenie krzyżowe da w wyniku 6 wierszy. Nie ma żadnej relacji między tymi dwiema tabelami - dosłownie tworzysz każdą możliwą kombinację.
Pełna zewnętrzna złączenie: PEŁNE ZŁĄCZE ZEWNĘTRZNE nie jest ani „lewe”, ani „prawe” - to jedno i drugie! Obejmuje wszystkie wiersze z obu tabel lub zestawów wyników uczestniczących w JOIN. Jeśli nie ma pasujących wierszy dla wierszy po „lewej” stronie DOŁĄCZ, zobaczysz wartości Null z zestawu wyników po „prawej”. I odwrotnie, gdy nie ma pasujących wierszy dla wierszy po „prawej” stronie JOIN, wartości Null z zestawu wyników znajdują się po „lewej” stronie.
źródło
Dla SQL Server
CROSS JOIN and FULL OUTER JOIN
są różne.CROSS JOIN
jest po prostu produktem kartezjańskim dwóch tabel, niezależnie od kryteriów filtrowania lub warunków.FULL OUTER JOIN
daje unikalny zestawLEFT OUTER JOIN and RIGHT OUTER JOIN
wyników dwóch tabel. Potrzebuje również klauzuli ON, aby odwzorować dwie kolumny tabel.źródło
Są to te same pojęcia, z wyjątkiem zwracanej wartości NULL.
Patrz poniżej:
źródło
Cross Join : http://www.dba-oracle.com/t_garmany_9_sql_cross_join.htm
TLDR; Generuje wszystkie możliwe kombinacje między 2 tabelami (produkt kartezjański)
(Pełny) Dołącz zewnętrzny : http://www.w3schools.com/Sql/sql_join_full.asp
TLDR; Zwraca każdy wiersz w obu tabelach, a także wyniki, które mają te same wartości (dopasowania w WARUNKU)
źródło
Pełne połączenie zewnętrzne łączy lewe połączenie zewnętrzne i prawe połączenie zewnętrzne. Zestaw wyników zwraca wiersze z obu tabel, w których warunki są spełnione, ale zwraca kolumny null, w których nie ma zgodności.
Łączenie krzyżowe jest produktem kartezjańskim , który nie wymaga żadnego warunku do łączenia tabel. Zestaw wyników zawiera wiersze i kolumny będące zwielokrotnieniem obu tabel.
źródło
Oto przykład, w którym zarówno FULL OUTER JOIN, jak i CROSS JOIN zwracają ten sam zestaw wyników bez zwracanej wartości NULL. Zwróć uwagę na 1 = 1 w klauzuli ON dla PEŁNEGO DOŁĄCZENIA DO ZEWNĘTRZNEGO:
źródło
DOŁĄCZ DO PEŁNEGO ZEWNĘTRZNEGO SQL
FULL OUTER JOIN zwraca wszystkie wiersze z lewej tabeli (tabela 1) i z prawej tabeli (tabela 2) niezależnie od dopasowania.
Słowo kluczowe FULL OUTER JOIN łączy wynik zarówno LEFT OUTER JOIN, jak i RIGHT OUTER JOIN
Odniesienie: http://datasciencemadesimple.com/sql-full-outer-join/
ŁĄCZENIE KRZYŻA SQL
W SQL CROSS JOIN Każdy wiersz w pierwszej tabeli jest odwzorowany na każdy wiersz w drugiej tabeli.
Liczba wierszy wygenerowanych przez zestaw wyników operacji CROSS JOIN jest równa liczbie wierszy w pierwszej tabeli pomnożonej przez liczbę wierszy w drugiej tabeli.
CROSS JOIN jest również znany jako produkt kartezjański / połączenie kartezjańskie
Liczba wierszy w tabeli A wynosi m, Liczba wierszy w tabeli B wynosi n, a wynikowa tabela będzie miała m * n wierszy
Odniesienie: http://datasciencemadesimple.com/sql-cross-join/
źródło