O entendimento de junções está quebrado. Para ser continuado. Tentativa de visualização alternativa

Muitos de vocês leram o artigo anterior sobre como a visualização incorreta para explicar como os JOINs funcionam pode ser confusa em alguns casos. Os círculos de Venn não podem ilustrar completamente determinados pontos, por exemplo, se os valores na tabela forem repetidos.

Em preparação para gravar a sexta edição do podcast Zinc Prod (onde concordamos em discutir o artigo), parece que consegui encontrar uma versão interessante da visualização. Além disso, uma opção semelhante também foi oferecida nos comentários do artigo original.


Todo mundo é convidado sob o corte


Então, visualização. Como descobrimos nos comentários do artigo anterior, a junção é mais um produto cartesiano do que uma interseção. Se você observar como o produto cartesiano é ilustrado, poderá ver que geralmente é uma tabela retangular, onde a primeira relação segue um eixo e a segunda ao longo do outro. Assim, os elementos da tabela serão todas as combinações de tudo.


É difícil desenhá-lo abstratamente, por isso terá que ser um exemplo.


Digamos que temos duas mesas. Em um deles


id -- 1 1 6 5 

Em outro:


 id -- 1 1 2 3 5 

Isenção imediata: chamei o campo de "id" apenas para abreviar. Muitos no último artigo ficaram indignados, como se repetiu, em desgraça. Não se preocupe muito, bem
Imagine, por exemplo, que esta é uma tabela com estatísticas diárias, onde para cada dia e cada usuário existem dados sobre a visita a um site. Em geral, não é o ponto.


Então, queremos descobrir o que acontece com as várias junções da tabela. Vamos começar com CROSS JOIN:


CROSS JOIN


 SELECT t1.id, t2.id FROM t1 CROSS JOIN t2 

CROSS JOIN são todas as combinações possíveis que podem ser recebidas de duas tabelas.


Isso pode ser visualizado da seguinte forma: no eixo x - uma tabela, no eixo y - em outra, todas as células internas (destacadas em laranja) - este é o resultado



INNER JOIN


INNER JOIN (ou apenas JOIN) é o mesmo CROSS JOIN que possui apenas os elementos que satisfazem a condição escrita na construção "ON". Preste atenção à situação em que os registros são duplicados - haverá quatro resultados com unidades.


 SELECT t1.id, t2.id FROM t1 INNER JOIN t2 ON t1.id = t2.id 


JUNTA ESQUERDA


LEFT OUTTER JOIN (ou apenas LEFT JOIN) é o mesmo que INNER JOIN, mas, além disso, adicionamos nulo para linhas da primeira tabela, para as quais nada foi encontrado na segunda


 SELECT t1.id, t2.id FROM t1 LEFT JOIN t2 ON t1.id = t2.id 


JUNTA DIREITA


JOIN EXTERIOR DIREITO (ou JOIN DIREITO) é o mesmo que JOIN ESQUERDO, exatamente o oposto. I.e. isso é INNER JOIN + null para linhas da segunda tabela, para as quais nada foi encontrado na primeira


 SELECT t1.id, t2.id FROM t1 RIGHT JOIN t2 ON t1.id = t2.id 


→ Você pode jogar com pedidos aqui


Conclusões


Parece ser uma visualização simples. Embora haja limitações: mostra o caso em que a igualdade é escrita em ON e não é algo complicado (qualquer expressão booleana). Além disso, o caso em que null está entre os valores da tabela não foi considerado. I.e. isso ainda é uma simplificação, mas parece ter se mostrado melhor e mais preciso do que os círculos de Venn.


Assine o nosso podcast Zinc Prod , onde discutimos bancos de dados, desenvolvimento de software e outras coisas interessantes.

Source: https://habr.com/ru/post/pt450528/


All Articles