Eu gostaria de uma rápida descrição dos tipos de junções do MySQL. Eu sei disso, o resto não tenho certeza do que eles significam.
- separado por vírgula (o que exatamente significa isso?):
SELECT * FROM a, b WHERE b.id = a.beeId AND ...
- mostre as informações de a, mesmo que não haja correspondências em b:
SELECT * FROM a LEFT OUTER JOIN b ON b.id = a.beeId WHERE ...
Eu já vi outras junções, mas quero saber o que as torna diferentes, o que é INNER
/ OUTER
, adicionando LEFT
coisas de mudança.
Eu já sei como as junções funcionam, só quero saber se existem outros tipos de junções ou se são apenas maneiras diferentes de obter o mesmo resultado.
Respostas:
(c) Encontrado no G + "Visualização de dados"
ou consulte os seguintes links para uma boa visão geral:
http://www.khankennels.com/blog/index.php/archives/2007/04/20/getting-joins/
http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html
fonte
cross join
, o que faz um produto cartesiano.There's also a cartesian product or cross join, which as far as I can tell, can't be expressed as a Venn diagram:
Com base no seu comentário, as definições simples de cada uma são encontradas melhor no W3Schools. A primeira linha de cada tipo fornece uma breve explicação do tipo de associação.
EDIT FIM
Em poucas palavras, o exemplo separado por vírgula que você deu
está selecionando todos os registros das tabelas aeb com as vírgulas separando as tabelas, isso também pode ser usado em colunas como
Em seguida, ele obtém as informações instruídas na linha em que a coluna b.id e a.beeId têm correspondência no seu exemplo. Portanto, no seu exemplo, ele obterá todas as informações das tabelas aeb, onde b.id é igual a a.beeId. No meu exemplo, ele obterá todas as informações da tabela be apenas as informações da coluna a.beeName quando o b.id for igual ao a.beeId. Observe que também há uma cláusula AND, isso ajudará a refinar seus resultados.
Para alguns tutoriais simples e explicações sobre as junções esquerda e esquerda do mySQL, veja os tutoriais mySQL da Tizag. Você também pode conferir o site de Keith J. Brown para obter mais informações sobre junções, o que também é bastante bom.
Espero que isso ajude você
fonte
Eu tenho 2 tabelas como esta:
INNER JOIN se preocupa com ambas as tabelas
INNER JOIN se preocupa com as duas tabelas, portanto, você só terá uma linha se ambas as tabelas tiverem uma. Se houver mais de um par correspondente, você obtém várias linhas.
Não faz diferença para INNER JOIN se você reverter a ordem, porque se importa com as duas tabelas:
Você obtém as mesmas linhas, mas as colunas estão em uma ordem diferente porque mencionamos as tabelas em uma ordem diferente.
LEFT JOIN se preocupa apenas com a primeira mesa
LEFT JOIN se preocupa com a primeira tabela que você fornece e não se importa muito com a segunda; portanto, você sempre obtém as linhas da primeira tabela, mesmo se não houver uma linha correspondente na segunda:
Acima, você pode ver todas as linhas da tabela_a, mesmo que algumas não correspondam a nada na tabela b, mas nem todas as linhas da tabela_b - somente aquelas que correspondem a algo na tabela_a.
Se revertermos a ordem das tabelas, LEFT JOIN se comportará de maneira diferente:
Agora temos todas as linhas de table_b, mas apenas as linhas correspondentes de table_a.
RIGHT JOIN se preocupa apenas com a segunda mesa
a RIGHT JOIN b
fornece exatamente as mesmas linhas queb LEFT JOIN a
. A única diferença é a ordem padrão das colunas.São as mesmas linhas
table_b LEFT JOIN table_a
que vimos na seção LEFT JOIN.Similarmente:
São as mesmas linhas que
table_a LEFT JOIN table_b
.Nenhuma junção oferece cópias de tudo
Cláusula No Join: Se você escrever suas tabelas sem nenhuma cláusula JOIN, apenas separadas por vírgulas, todas as linhas da primeira tabela serão escritas ao lado de todas as linhas da segunda tabela, em todas as combinações possíveis:
(Isto é da minha postagem no blog. Exemplos de tipos de junção SQL )
fonte
A junção externa completa não existe no mysql; talvez você precise usar uma combinação de junção esquerda e direita.
fonte