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 nombre apellido compra_total
Pedro Pérez 135
Marie Bernardo 75
Sofía Dupond 27
Marcelo Martín 39

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

primer nombre apellido compra_total
Marion Leroy 285
Pablo Moreau 133
Marie Bernardo 75
Marcelo Martín 39

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 nombre apellido compra_total
Pedro Pérez 135
Marie Bernardo 75
Sofía Dupond 27
Marcelo Martín 39
Marie Leroy 285
Pablo Moreay 133

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:

Tipo Nombre Ciudad País
Empleado Manuel Madrid España
Empleado Raúl Tijuana México
Empleado Ana Nueva York EE.UU
Empleado John Londres España
Empleado pedro Nueva York EE.UU
Proyecto Proyecto 1 Madrid España
Proyecto Proyecto 2  Tijuana México
Proyecto Proyecto 3 Acapulco México
Proyecto Proyecto 4  Tijuana México
Proyecto Proyecto 5 Madrid Españ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:

Ciudad Código Postal País
Acapulco 110006 México
 Tijuana 400015 Mé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

ProyID Días_laborables EmpID CostodelProyecto
11 12 4 38000
22 14 3 82000
33 15 1 80000
44 16 3 90000
55 21 1 55000
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:

EmpleID Nombre CostodelProyecto
1 Manuel 80000
1 Manuel 55000
2 Raúl NULO
3 Ana 82000
3 Ana 90000
4 John 38000
5 Pedro NULO

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