Me gustaría un desglose rápido de los tipos de uniones MySQL. Sé de estos, el resto no estoy seguro de lo que significan.
- separados por comas (¿para qué es exactamente esta abreviatura?):
SELECT * FROM a, b WHERE b.id = a.beeId AND ...
- muestra información de a, incluso si no hay coincidencias en b:
SELECT * FROM a LEFT OUTER JOIN b ON b.id = a.beeId WHERE ...
He visto otras uniones, pero quiero saber qué las hace diferentes, qué es INNER
/ OUTER
, agregar LEFT
cosas cambiantes.
Ya sé cómo funcionan las uniones, solo quiero saber si hay otros tipos de uniones, o si son solo formas diferentes de obtener el mismo resultado.
Respuestas:
(c) Encontrado en G + "Visualización de datos"
o vea los siguientes enlaces para una buena visión general:
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
fuente
cross join
, lo que hace un producto 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:
Según su comentario, las definiciones simples de cada uno se encuentran mejor en W3Schools. La primera línea de cada tipo ofrece una breve explicación del tipo de unión
EDICIÓN FINAL
En pocas palabras, el ejemplo separado por comas que diste de
está seleccionando cada registro de las tablas ayb con las comas que separan las tablas, esto también se puede usar en columnas como
Luego obtiene la información instruida en la fila donde la columna b.id y la columna a.beeId coinciden en su ejemplo. Entonces, en su ejemplo, obtendrá toda la información de las tablas a y b donde b.id es igual a a.beeId. En mi ejemplo, obtendrá toda la información de la tabla b y solo la información de la columna a.beeName cuando b.id es igual a a.beeId. Tenga en cuenta que también hay una cláusula AND, esto ayudará a refinar sus resultados.
Para ver algunos tutoriales y explicaciones simples sobre las uniones mySQL y las combinaciones izquierdas, eche un vistazo a los tutoriales mySQL de Tizag. También puede consultar el sitio web de Keith J. Brown para obtener más información sobre las combinaciones que también es bastante buena.
Espero que esto te ayude
fuente
Tengo 2 tablas como esta:
INNER JOIN se preocupa por ambas tablas
INNER JOIN se preocupa por ambas tablas, por lo que solo obtendrá una fila si ambas tablas tienen una. Si hay más de un par coincidente, obtendrá varias filas.
INNER JOIN no hace ninguna diferencia si invierte el orden, porque se preocupa por ambas tablas:
Obtiene las mismas filas, pero las columnas están en un orden diferente porque mencionamos las tablas en un orden diferente.
IZQUIERDA UNIRSE solo se preocupa por la primera mesa
LEFT JOIN se preocupa por la primera tabla que le da, y no le importa mucho la segunda, por lo que siempre obtiene las filas de la primera tabla, incluso si no hay una fila correspondiente en la segunda:
Arriba puede ver todas las filas de la tabla_a a pesar de que algunas de ellas no coinciden con nada en la tabla b, pero no todas las filas de la tabla_b, solo las que coinciden con algo en la tabla_a.
Si invertimos el orden de las tablas, LEFT JOIN se comporta de manera diferente:
Ahora obtenemos todas las filas de table_b, pero solo las filas coincidentes de table_a.
A DERECHA ÚNICA solo le importa la segunda mesa
a RIGHT JOIN b
te da exactamente las mismas filas queb LEFT JOIN a
. La única diferencia es el orden predeterminado de las columnas.Estas son las mismas filas
table_b LEFT JOIN table_a
que las que vimos en la sección LEFT JOIN.Similar:
Es las mismas filas que
table_a LEFT JOIN table_b
.No unirse en absoluto te da copias de todo
Cláusula No Join: si escribe sus tablas sin ninguna cláusula JOIN, solo separadas por comas, obtendrá cada fila de la primera tabla escrita junto a cada fila de la segunda tabla, en todas las combinaciones posibles:
(Esto es de mi publicación de blog Ejemplos de tipos de unión SQL )
fuente
La unión externa completa no existe en mysql, es posible que deba usar una combinación de unión izquierda y derecha.
fuente