Qual é a diferença entre CROSS JOIN e FULL OUTER JOIN no SQL Server?
Eles são iguais ou não? Por favor explique. Quando alguém usaria um desses?
sql-server
cross-join
full-outer-join
Saajid Ismail
fonte
fonte
FROM t1 FULL OUTER JOIN t2 ON t1.id=t2.id
sempre será mais rápido do queFROM t1,t2 WHERE t1.id=t2.id
?outer join
mais rápido oucross join
?Uma coisa que nem sempre pode ser óbvia para alguns é que uma junção cruzada com uma tabela vazia (ou conjunto de resultados) resulta em tabela vazia (M x N; portanto, M x 0 = 0)
Uma junção externa completa sempre terá linhas, a menos que M e N sejam 0.
fonte
Gostaria de acrescentar um aspecto importante a outras respostas, que na verdade me explicaram esse tópico da melhor maneira:
Se duas tabelas unidas contiverem M e N linhas, a junção cruzada sempre produzirá (M x N) linhas, mas a junção externa completa produzirá das linhas MAX (M, N) a (M + N) (dependendo de quantas linhas realmente corresponder ao predicado "on").
EDITAR:
Do ponto de vista lógico do processamento de consultas, o CROSS JOIN realmente sempre produz M x N linhas. O que acontece com FULL OUTER JOIN é que as tabelas esquerda e direita são "preservadas", como se as associações ESQUERDA e DIREITA tivessem acontecido. Portanto, as linhas, que não satisfazem o predicado ON, das tabelas esquerda e direita são adicionadas ao conjunto de resultados.
fonte
cross join
multiplica as tabelas; afull outer join
adiciona-los no pior dos casos, dependendo de quantas linhas corresponder ..Junção cruzada: as junções cruzadas produzem resultados que consistem em todas as combinações de linhas de duas ou mais tabelas. Isso significa que se a tabela A tiver 3 linhas e a tabela B tiver 2 linhas, um CROSS JOIN resultará em 6 linhas. Não existe um relacionamento estabelecido entre as duas tabelas - você literalmente produz apenas todas as combinações possíveis.
Junção externa completa: uma junção externa completa não é "esquerda" nem "direita" - são as duas coisas! Ele inclui todas as linhas de ambas as tabelas ou conjuntos de resultados que participam do JOIN. Quando não existem linhas correspondentes para as linhas no lado "esquerdo" do JOIN, você vê valores nulos do conjunto de resultados no "direito". Por outro lado, quando não existem linhas correspondentes para as linhas no lado "direito" de JOIN, você vê valores nulos do conjunto de resultados na "esquerda".
fonte
Para o SQL Server,
CROSS JOIN and FULL OUTER JOIN
são diferentes.CROSS JOIN
é simplesmente um produto cartesiano de duas tabelas, independentemente de qualquer critério de filtro ou condição.FULL OUTER JOIN
fornece um conjunto de resultados exclusivoLEFT OUTER JOIN and RIGHT OUTER JOIN
de duas tabelas. Ele também precisa da cláusula ON para mapear duas colunas de tabelas.fonte
Eles são os mesmos conceitos, além do valor NULL retornado.
Ver abaixo:
fonte
Junção cruzada : http://www.dba-oracle.com/t_garmany_9_sql_cross_join.htm
TLDR; Gera todas as combinações possíveis entre 2 tabelas (produto cartesiano)
Junção externa (completa) : http://www.w3schools.com/Sql/sql_join_full.asp
TLDR; Retorna todas as linhas das duas tabelas e também resultados com os mesmos valores (corresponde a CONDITION)
fonte
Uma junção externa completa combina uma junção externa esquerda e uma junção externa direita. O conjunto de resultados retorna linhas de ambas as tabelas em que as condições são atendidas, mas retorna colunas nulas onde não há correspondência.
Uma junção cruzada é um produto cartesiano que não requer nenhuma condição para associar tabelas. O conjunto de resultados contém linhas e colunas que são uma multiplicação de ambas as tabelas.
fonte
Aqui está um exemplo em que a junção externa completa e a junção cruzada retornam o mesmo conjunto de resultados sem a devolução de NULL. Observe o 1 = 1 na cláusula ON para a junção externa completa:
fonte
JUNÇÃO EXTERNA CHEIA DO SQL
O JOGO EXTERNO COMPLETO retorna todas as linhas da tabela esquerda (tabela1) e da tabela direita (tabela2), independentemente da correspondência.
A palavra-chave FULL OUTER JOIN combina o resultado de LEFT OUTTER JOIN e RIGHT OUTTER JOIN
Referência: http://datasciencemadesimple.com/sql-full-outer-join/
SQL CROSS JOIN
No SQL CROSS JOIN Cada linha da primeira tabela é mapeada com cada linha da segunda tabela.
O número de linhas produzidas por um conjunto de resultados da operação CROSS JOIN é igual ao número de linhas na primeira tabela multiplicado pelo número de linhas na segunda tabela.
CROSS JOIN também é conhecido como produto cartesiano / união cartesiana
Número de linhas na tabela A é m, Número de linhas na tabela B é n e a tabela resultante terá m * n linhas
Referência: http://datasciencemadesimple.com/sql-cross-join/
fonte