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.
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).