¿Qué es un sindicato?
Los sindicatos combinan los resultados de varias consultas SELECT en un conjunto de resultados consolidado.
Los únicos requisitos para que esto funcione es que el número de columnas debe ser el mismo de todas las consultas SELECT que deben combinarse.
Supongamos que tenemos dos tablas como sigue
Creemos ahora una consulta UNION para combinar ambas tablas usando DISTINCT
SELECT column1, column2 FROM `table1`UNION DISTINCTSELECT column1,column2 FROM `table2`;
Aquí se eliminan las filas duplicadas y solo se devuelven filas únicas.
Nota: MySQL usa la cláusula DISTINCT por defecto al ejecutar consultas UNION si no se especifica nada.
Ahora creemos una consulta UNION para combinar ambas tablas usando ALL
SELECT `column1`,` column1` FROM `table1`UNION ALLSELECT ` column1`,` column1` FROM `table2`;
Aquí se incluyen filas duplicadas y como usamos TODOS.
Por que usar sindicatos
Suponga que hay una falla en el diseño de su base de datos y está utilizando dos tablas diferentes diseñadas para el mismo propósito. Desea consolidar estas dos tablas en una mientras evita que los registros duplicados se arrastren en la nueva tabla. Puede utilizar UNION en tales casos.
Resumen
- El comando UNION se utiliza para combinar más de un resultado de la consulta SELECT en una sola consulta que contiene filas de todas las consultas seleccionadas.
- El número de columnas y tipos de datos en las sentencias SELECT debe ser el mismo para que funcione el comando UNION.
- La cláusula DISTINCT se utiliza para eliminar valores duplicados del conjunto de resultados de la consulta UNION. MySQL usa la cláusula DISTINCT como predeterminada al ejecutar consultas UNION si no se especifica nada.
- La cláusula ALL se usa para devolver todas, incluso las filas duplicadas en la consulta UNION.
Ejemplos prácticos usando MySQL workbench
En nuestro myFlixDB vamos a combinar
número_de_membresía y nombres_completos de la tabla de miembros
con
movie_id y título de la tabla de películas
Podemos utilizar la siguiente consulta
SELECT `membership_number`,`full_names` FROM `members`UNIONSELECT `movie_id`,`title` FROM `movies`;
La ejecución del script anterior en MySQL workbench contra myflixdb nos da los siguientes resultados que se muestran a continuación.
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 |