MySQL UNIÓN – Tutorial Completo

⚡ Resumen inteligente

MySQL UNION combina los resultados de dos o más consultas SELECT en un único conjunto de resultados consolidado. Esta explicación abarca las reglas de columna que validan una unión, la diferencia entre UNION DISTINCT y UNION ALL, y ejemplos prácticos ejecutados en la base de datos myflixdb.

  • 🔗 Propósito principal: UNION apila las filas devueltas por varias consultas SELECT en un único conjunto de resultados, una consulta debajo de la otra.
  • 📐 Regla de columna: Cada sentencia SELECT debe devolver el mismo número de columnas, en el mismo orden y con tipos de datos compatibles.
  • 🧹 DISTRITO DE LA UNIÓN: Se eliminan las filas duplicadas y solo se devuelven las filas únicas, y este es el comportamiento. MySQL Se aplica por defecto.
  • 📚 UNIÓN DE TODOS: Se devuelven todas las filas, incluidas las duplicadas, lo que resulta más rápido porque no se requiere ningún paso de eliminación de duplicados.
  • 🏷️ Nombres de columna: El conjunto de resultados toma los nombres de las columnas de la primera instrucción SELECT, por lo que los alias deben estar en esa consulta.
  • 🛠️ Uso típico: Consolidar dos tablas que contienen el mismo tipo de registro, sin permitir filas duplicadas en el resultado combinado.

MySQL UNIÓN Operator

¿Qué es un SINDICATO en MySQL?

UNIÓN es un MySQL Operador que combina los resultados de varias consultas SELECT en un conjunto de resultados consolidado. Las filas devueltas por la segunda consulta se colocan debajo de las filas devueltas por la primera, lo que produce una lista vertical en lugar de dos separadas.

El único requisito para que esto funcione es que el número de columnas sea el mismo en todas las consultas SELECT que deban combinarse.

Supongamos que tenemos dos tablas como las siguientes.

MySQL UNIÓNMySQL UNIÓN

Ambas tablas contienen dos columnas del mismo tipo, por lo que pueden combinarse. Los ejemplos que siguen combinan precisamente estas dos tablas.

¿Por qué usar UNION?

Supongamos que hay un fallo en el diseño de su base de datos y está utilizando dos tablas diferentes destinadas al mismo propósito. Desea consolidar estas dos tablas en una sola, omitiendo cualquier registro duplicado.ping en la nueva tabla. En estos casos, puede usar UNION.

El operador también resulta útil en las tareas cotidianas de elaboración de informes:

  • ArchiDatos verificados y en tiempo real: Se puede generar un informe sobre una tabla actual y una tabla de archivo que compartan las mismas columnas de forma conjunta, sin necesidad de fusionarlas físicamente.
  • Varias fuentes, un informe: Para una auditoría rápida, se pueden listar los miembros y las películas, o las ventas de dos regiones, en un único informe.
  • Comprobaciones de migración: Las filas de la tabla antigua y de la tabla nueva se pueden apilar y comparar antes de eliminar la tabla antigua.

Una unión no sustituye a una unión. La unión agrega filas debajo de otras filas, mientras que la unión agrega columnas al lado de otras columnas, y esa distinción determina qué operador requiere la tarea.

MySQL Sintaxis y reglas de UNION

Ahora que el propósito está claro, observe la estructura de la declaración y las reglas que aplica la base de datos.

SELECT column1, column2 FROM `table1`
UNION [DISTINCT | ALL]
SELECT column1, column2 FROM `table2`;

Tres reglas rigen todo sindicato:

  1. Igual número de columnas. Cada Instrucción SELECT debe devolver el mismo número de columnas, de lo contrario MySQL genera el error 1222.
  2. Tipos de datos compatibles en el mismo orden. La primera columna de la primera consulta se compara con la primera columna de la segunda, por lo que un número debe coincidir con un número y un texto debe coincidir con un texto.
  3. Los nombres provienen de la primera consulta. El encabezado del conjunto de resultados se toma de la primera instrucción SELECT, por lo que cualquier alias debe ir allí.

An ORDER BY LIMIT La cláusula colocada al final se aplica al resultado combinado en lugar de a una rama del mismo, y debe hacer referencia a los nombres de las columnas producidas por la primera instrucción SELECT.

UNION DISTINCT vs UNION ALL

Una vez establecidas las reglas, la decisión restante es si deben conservarse las filas duplicadas.

Combinar tablas usando DISTINCT

Ahora vamos a crear una consulta UNION para combinar ambas tablas usando DISTINCT.

SELECT column1, column2 FROM `table1`
UNION DISTINCT
SELECT column1, column2 FROM `table2`;

Aquí se eliminan las filas duplicadas y solo se devuelven filas únicas.

Unión distinta

Nota: MySQL utiliza la cláusula DISTINCT como predeterminada al ejecutar consultas UNION si no se especifica nada.

Combinar tablas usando TODOS

Ahora vamos a crear una consulta UNION para combinar ambas tablas usando ALL.

SELECT `column1`, `column2` FROM `table1`
UNION ALL
SELECT `column1`, `column2` FROM `table2`;

Aquí se incluyen filas duplicadas, ya que usamos ALL.

Unión-Todos

Las dos imágenes permiten apreciar fácilmente la diferencia, y la tabla que aparece a continuación la resume.

Punto de comparación UNIÓN DISTINTO UNION TODO
Filas duplicadas Eliminado del resultado Se mantuvo en el resultado
Comportamiento predeterminado Sí, se aplica cuando no se especifica nada. No, la palabra clave ALL debe estar escrita
Velocidad Más lento, se requiere una pasada de eliminación de duplicados. Más rápido, las filas se devuelven a medida que se leen.
Mejores usados ​​cuando La lista combinada debe contener filas únicas. Cada fila importa, de lo contrario no puede haber duplicados.

💡 Consejo: Si las dos ramas no pueden generar filas duplicadas, elija UNION ALL. De esta forma, la base de datos omite el trabajo de ordenación y comparación que requiere DISTINCT, lo que supone un ahorro considerable en tablas grandes.

Ejemplo práctico utilizando MySQL Banco de trabajo

Los ejemplos mostrados hasta ahora utilizaban tablas de muestra. Ahora, la misma consulta se ejecuta en la base de datos real de myflixdb, donde las dos tablas contienen registros bastante diferentes.

En nuestro myFlixDB, combinemos los membership_number y full_names columnas de la tabla de miembros con el movie_id y title columnas de la tabla películas. Ambas consultas devuelven dos columnas, por lo que la unión es válida.

Podemos utilizar la siguiente consulta.

SELECT `membership_number`, `full_names` FROM `members`
UNION
SELECT `movie_id`, `title` FROM `movies`;

Ejecutando el script anterior en MySQL banco de trabajo La consulta a myflixdb nos proporciona los siguientes resultados. Observe que los encabezados provienen de la primera consulta SELECT, aunque las filas inferiores corresponden a registros de películas.

membership_number full_names
1 Janet Jones
2 Janet Smith Jones
3 Robert Phil
4 Gloria Williams
5 Leonard Hofstadter
6 Sheldon Cooper
7 Rajesh Koothrappali
8 Leslie Winkle
9 Howard Wolowitz
16 67% Guilty
6 Angels and Demons
4 Code Name Black
5 Daddy's Little Girls
7 Davinci Code
2 Forgetting Sarah Marshal
9 Honey mooners
19 movie 3
1 Pirates of the Caribean 4
18 sample movie
17 The Great Dictator
3 X-Men

Preguntas Frecuentes

UNION apila las filas de una consulta debajo de otra, por lo que el resultado se vuelve más alto. ÚNETE La función UNION compara filas relacionadas y coloca sus columnas una al lado de la otra, lo que hace que el resultado sea más ancho. Utilice UNION para filas similares y JOIN para tablas relacionadas.

Coloca uno solo ORDEN POR Cláusula después del último SELECT. Ordena el resultado combinado y debe usar los nombres de columna generados por el primer SELECT. Una cláusula LIMIT colocada allí se comporta de la misma manera.

El error 1222 aparece cuando las ramas SELECT devuelven recuentos de columnas desiguales. Cuente las columnas en cada rama y añada un literal o un marcador de posición NULL a la rama con el número de columnas más corto para que ambas ramas queden alineadas en el mismo orden.

Sí. Asistentes de texto a SQL, incluidos los integrados en MySQL Banco de trabajoGenera sentencias UNION a partir de una solicitud simple. Verifica tú mismo el orden de las columnas, ya que un modelo puede alinear columnas que simplemente se parecen.

Un asistente puede sugerir la operación UNION ALL cuando no haya duplicados, lo que suele ser una mejora en la velocidad. La decisión aún depende de los datos, así que confirme que las ramas realmente no pueden superponerse antes de eliminar el paso de deduplicación.

Resumir este post con: