La comprensión de las uniones está rota. Continuará Intento de visualización alternativa

Muchos de ustedes han leído el artículo anterior sobre cómo la visualización incorrecta para explicar cómo funcionan las UNIONES puede ser confusa en algunos casos. Los círculos de Venn no pueden ilustrar completamente ciertos puntos, por ejemplo, si los valores de la tabla se repiten.

En preparación para grabar el sexto número del podcast Zinc Prod (donde acordamos discutir el artículo), parece que logré encontrar una versión interesante de la visualización. Además, también se ofreció una opción similar en los comentarios sobre el artículo original.


Todos están invitados bajo el corte


Entonces, visualización. Como descubrimos en los comentarios al artículo anterior, unirse es más un producto cartesiano que una intersección. Si observa cómo se ilustra el producto cartesiano, notará que a menudo es una tabla rectangular, donde la primera relación va a lo largo de un eje y la segunda a lo largo del otro. Por lo tanto, los elementos de la tabla serán todas las combinaciones de todo.


Es difícil dibujarlo de manera abstracta, por lo que tendrá que ser un ejemplo.


Digamos que tenemos dos tablas. En uno de ellos


id -- 1 1 6 5 

En otro:


 id -- 1 1 2 3 5 

Descargo de responsabilidad inmediato: llamé al campo la palabra "id" solo para abreviar. Muchos en el último artículo estaban indignados, tal como están - repitió, desgracia. No te preocupes demasiado, bueno
Imagine, por ejemplo, que esta es una tabla con estadísticas diarias, donde para cada día y cada usuario hay datos sobre la visita a un sitio. En general, no es el punto.


Por lo tanto, queremos saber qué sucede con las distintas combinaciones de tablas. Comencemos con CROSS JOIN:


CROSS JOIN


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

CROSS JOIN es todas las combinaciones posibles que se pueden recibir de dos tablas.


Esto se puede visualizar de la siguiente manera: en el eje x - una tabla, en el eje y - otra, todas las celdas dentro (resaltadas en naranja) - este es el resultado



ÚNETE INTERIOR


INNER JOIN (o simplemente JOIN) es la misma CROSS JOIN que tiene solo aquellos elementos que satisfacen la condición escrita en la construcción "ON". Preste atención a la situación cuando los registros están duplicados: habrá cuatro resultados con unidades.


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


IZQUIERDA UNIRSE


LEFT OUTER JOIN (o simplemente LEFT JOIN) es lo mismo que INNER JOIN, pero además agregamos nulo para las filas de la primera tabla, para lo cual no se encontró nada en la segunda


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


UNIRSE A LA DERECHA


RIGHT OUTER JOIN (o RIGHT JOIN) es lo mismo que LEFT JOIN, todo lo contrario. Es decir esto es INNER JOIN + nulo para las filas de la segunda tabla, para las cuales no se encontró nada en la primera


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


→ Puedes jugar con solicitudes aquí


Conclusiones


Parece ser una simple visualización. Aunque hay limitaciones: muestra el caso cuando la igualdad se escribe en ON, y no es algo complicado (cualquier expresión booleana). Además, no se ha considerado el caso donde nulo está entre los valores de la tabla. Es decir Esto sigue siendo una simplificación, pero parece haber resultado mejor y más preciso que los círculos de Venn.


Suscríbase a nuestro podcast Zinc Prod , donde discutimos bases de datos, desarrollo de software y otras cosas interesantes.

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


All Articles