Establecer operaciones (SQL) - Set operations (SQL)
Las operaciones de conjunto permiten combinar los resultados de varias consultas en un único conjunto de resultados . Set operadores incluyen UNION
, INTERSECT
y EXCEPT
.
Operador UNION
En SQL, la UNION
cláusula combina los resultados de dos consultas SQL en una sola tabla de todas las filas coincidentes . Las dos consultas deben dar como resultado el mismo número de columnas y tipos de datos compatibles para poder unir. Todos los registros duplicados se eliminan automáticamente a menos que UNION ALL
se utilicen.
UNION
puede ser útil en aplicaciones de almacenamiento de datos donde las tablas no están perfectamente normalizadas . Un ejemplo simple sería una base de datos que tiene tablas sales2005
y sales2006
que tienen estructuras idénticas pero están separadas debido a consideraciones de rendimiento. Una UNION
consulta podría combinar resultados de ambas tablas.
Tenga en cuenta que UNION ALL
no garantiza el orden de las filas. Las filas del segundo operando pueden aparecer antes, después o mezcladas con filas del primer operando. En situaciones en las que se desea un pedido específico, se ORDER BY
debe utilizar.
Tenga en cuenta que UNION ALL
puede ser mucho más rápido que simple UNION
.
Ejemplos de
Dadas estas dos tablas:
persona | Monto |
---|---|
José | 1000 |
Alex | 2000 |
Beto | 5000 |
persona | Monto |
---|---|
José | 2000 |
Alex | 2000 |
Zach | 35000 |
Ejecutando esta declaración:
SELECT * FROM sales2005
UNION
SELECT * FROM sales2006;
produce este conjunto de resultados, aunque el orden de las filas puede variar porque no ORDER BY
se proporcionó ninguna cláusula:
persona | Monto |
---|---|
José | 1000 |
Alex | 2000 |
Beto | 5000 |
José | 2000 |
Zach | 35000 |
Tenga en cuenta que hay dos filas para Joe porque esas filas son distintas en sus columnas. Solo hay una fila para Alex porque esas filas no son distintas para ambas columnas.
UNION ALL
da resultados diferentes, porque no eliminará los duplicados. Ejecutando esta declaración:
SELECT * FROM sales2005
UNION ALL
SELECT * FROM sales2006;
daría estos resultados, permitiendo nuevamente la variación por la falta de una ORDER BY
declaración:
persona | Monto |
---|---|
José | 1000 |
José | 2000 |
Alex | 2000 |
Alex | 2000 |
Beto | 5000 |
Zach | 35000 |
La discusión de combinaciones externas completas también tiene un ejemplo que usa UNION
.
Operador INTERSECT
El INTERSECT
operador SQL toma los resultados de dos consultas y devuelve solo las filas que aparecen en ambos conjuntos de resultados. A los efectos de la eliminación de duplicados, el INTERSECT
operador no distingue entre NULLs
. El INTERSECT
operador elimina filas duplicadas del conjunto de resultados final. El INTERSECT ALL
operador no elimina filas duplicadas del conjunto de resultados final, pero si una fila aparece X veces en la primera consulta e Y veces en la segunda, aparecerá min (X, Y) veces en el conjunto de resultados.
Ejemplo
La siguiente INTERSECT
consulta de ejemplo devuelve todas las filas de la tabla Pedidos donde la cantidad está entre 50 y 100.
SELECT *
FROM Orders
WHERE Quantity BETWEEN 1 AND 100
INTERSECT
SELECT *
FROM Orders
WHERE Quantity BETWEEN 50 AND 200;
EXCEPTO operador
El EXCEPT
operador SQL toma las distintas filas de una consulta y devuelve las filas que no aparecen en un segundo conjunto de resultados. Para propósitos de eliminación de filas y eliminación de duplicados, el EXCEPT
operador no distingue entre NULLs
. El EXCEPT ALL
operador no elimina los duplicados, pero si una fila aparece X veces en la primera consulta e Y veces en la segunda, aparecerá como máximo (X - Y, 0) veces en el conjunto de resultados.
En particular, la plataforma Oracle proporciona un MINUS
operador que es funcionalmente equivalente al operador estándar SQL [1] .
EXCEPT DISTINCT
Ejemplo
La siguiente EXCEPT
consulta de ejemplo devuelve todas las filas de la tabla Pedidos donde la Cantidad está entre 1 y 49, y aquellas con una Cantidad entre 76 y 100.
Dicho de otra manera; la consulta devuelve todas las filas donde la cantidad está entre 1 y 100, excepto las filas donde la cantidad está entre 50 y 75.
SELECT *
FROM Orders
WHERE Quantity BETWEEN 1 AND 100
EXCEPT
SELECT *
FROM Orders
WHERE Quantity BETWEEN 50 AND 75;
Ejemplo
El siguiente ejemplo es equivalente al ejemplo anterior pero sin utilizar el EXCEPT
operador.
SELECT o1.*
FROM (
SELECT *
FROM Orders
WHERE Quantity BETWEEN 1 AND 100) o1
LEFT JOIN (
SELECT *
FROM Orders
WHERE Quantity BETWEEN 50 AND 75) o2
ON o1.id = o2.id
WHERE o2.id IS NULL
Ver también
Referencias
enlaces externos
- Documentación de MSDN sobre UNION en Transact-SQL para SQL Server
- Nombramiento de elementos de lista seleccionados en operaciones de conjunto
- UNION en MySQL con ejemplos
- UNION en MySQL
- Cláusula UNION en PostgreSQL
- SQL UNION y UNION ALL
- Orden de clasificación dentro de la declaración UNION
- Diseñar un flujo de datos que carga una tabla de almacén
- Documentación de Oracle 11g para UNION (ALL), INTERSECT y MINUS
- Operadores de conjuntos SQL