SQL UNION: Operador de conjunto

El operador SQL UNION permite poner de extremo a extremo los resultados de varias consultas utilizando el comando SELECT. Se puede controlar combinando los conjuntos resultantes de dos o más instrucciones Select. Además, elimina el valor duplicado de las filas que se encuentran entre diferentes declaraciones de selección.

Nota: De forma predeterminada, el operador SQL UNION solo selecciona valores distintos. Sin embargo, para permitir valores duplicados, se pueden usar UNION ALL.

Sintaxis en SQL UNION

La sintaxis para SQL UNION es unir los resultados de 2 matrices sin mostrar duplicados es:

SELECT * FROM tablaA
UNION
SELECT * FROM tablaB

Diagrama explicativo:

Dos conjuntos A y B con SQL UNION, puede unir estos dos conjuntos eliminando los valores duplicados, como puede ver el espacio que genera la unión son los datos que genera la consulta.

sql union

Ejemplo del operador SQL unión 

Imaginemos una empresa que tiene varias tiendas y en cada una de estas tiendas hay una tabla que enumera los clientes.

La tabla de la tienda #1 se llama “tienda1_cliente” y contiene los siguientes datos:

primer nombreapellidocompra_total
PedroPérez 135
MarieBernardo75
SofíaDupond27
MarceloMartín39

La tabla de la tienda #2 se llama “tienda2_cliente” y contiene los siguientes datos:

primer nombreapellidocompra_total
MarionLeroy285
PabloMoreau133
MarieBernardo75
MarceloMartín39

Sabiendo que algunos clientes están presentes en las 2 tablas, para evitar devolver los mismos registros varias veces, se debe utilizar la consulta en SQL UNION. La consulta en SQL server es entonces la siguiente:

SELECT * FROM tienda1_cliente
UNION
SELECT * FROM tienda2_cliente

Resultados :

primer nombreapellidocompra_total
PedroPérez 135
MarieBernardo75
SofíaDupond27
MarceloMartín39
MarieLeroy285
PabloMoreay133

El resultado de esta consulta muestra claramente que los registros de las 2 consultas se colocan de extremo a extremo pero sin incluir las mismas filas varias veces.

Ejemplo del operador UNION con alias SQL

Las alias en SQL, se usan para nombrar a una tabla o columna temporalmente. Entonces, escribamos una consulta para enumerar todos los empleados y proyectos únicos.

SELECT 'Empleado' AS Tipo, Nombre, Ciudad, Pais
FROM Empleado
UNION
SELECT 'Proyecto', Nombre, Ciudad, pais FROM Proyecto;

Resutlados:

TipoNombreCiudadPaís
EmpleadoManuelMadridEspaña
EmpleadoRaúlTijuanaMéxico
EmpleadoAnaNueva YorkEE.UU
EmpleadoJohnLondresEspaña
EmpleadopedroNueva YorkEE.UU
ProyectoProyecto 1MadridEspaña
ProyectoProyecto 2 TijuanaMéxico
ProyectoProyecto 3AcapulcoMéxico
ProyectoProyecto 4 TijuanaMéxico
ProyectoProyecto 5MadridEspaña

Operador de conjunto SQL UNION con cláusula WHERE

Escriba una consulta para recuperar las distintas ciudades de México y sus códigos postales de la tabla Empleados y Proyectos.

SELECT Ciudad,codigo_postal, pais
 FROM Empleado
WHERE Pais='México'
UNION
SELECT Ciudad, codigo_postal, pais
 FROM Proyecto
WHERE pais='México'
ORDER BY Ciudad;

Resultados:

CiudadCódigo PostalPaís
Acapulco110006México
 Tijuana400015México

SQL UNION con nombres diferentes en la columna

En el siguiente ejemplo, las dos consultas se han establecido usando dos criterios y columnas diferentes. Las diferentes columnas en dos declaraciones son ‘VIDA’ y ‘qty’. Esta consulta funciona porque ambas columnas tienen el mismo tipo de datos. Por lo general, los campos de las columnas que retornan en el resultado, se toman de la primera consulta.

Código SQL:

SELECT prod_cod,prod_nombre,vida
FROM producto
WHERE vida>6
UNION
SELECT prod_cod,prod_nombre,qty
FROM compra
WHERE qty<20

Producción:
PROD_COD    PROD_NOMBRE   VIDA
---------- --------------- ----------  ----------
P001      Televisor                                7
P001       TV                                          15
P002       REPRODUCTOR  DVD     9
P002       REPRODUCTOR  DVD     10
P003        iPod                                       9
P004        SISTEMA DE SONIDO     8
P006        SISTEMA DE SONIDO     8
P007         PORTÁTIL                          6

Operador UNIÓN con joins

El operador SQL UNION se puede usar con SQL JOINS para recuperar datos de dos tablas diferentes. Voy a considerar la siguiente tabla junto con la tabla Empleados para el ejemplo.

Tabla de detalles del proyecto

ProyIDDías_laborablesEmpIDCostodelProyecto
1112438000
2214382000
3315180000
4416390000
5521155000
SELECT  EmpleID, Nombre, CostodelProyecto
FROM Empleado
LEFT JOIN Detalledelproyect
ON Empleado.EmpleID = Detalledelproyect.EmpleID
UNION  
SELECT  EmpleID, Nombre, CostodelProyecto
FROM Empleado
RIGHT JOIN Detalledelproyect
ON Empleado.EmpID = Detalledelproyect.EmpleID

Resultados:

EmpleIDNombreCostodelProyecto
1Manuel80000
1Manuel55000
2RaúlNULO
3Ana82000
3Ana90000
4John38000
5PedroNULO

Resumen

El operador de conjunto SQL UNION se usa para unir dos o más consulta en un resultado distinto. Un caso de uso típico para esto es cuando tenemos datos divididos en varias tablas y queremos fusionarlos.

Los operadores INTERSECT y EXCEPT son otro tipo de operadores de conjuntos en SQL que nos permiten encontrar duplicados en los resultados devueltos por dos consultas (INTERSECT) o resultados de una consulta que no aparecen en una segunda (EXCEPT).

Deja un comentario