Las operaciones de conjunto en SQL son un tipo de operaciones que permiten combinar los resultados de múltiples consultas en un único conjunto de resultados . [1]
Los operadores de conjuntos en SQL incluyen UNION
, INTERSECT
, y EXCEPT
, que corresponden matemáticamente a los conceptos de unión , intersección y diferencia de conjuntos .
En SQL, la UNION
cláusula combina los resultados de dos consultas SQL en una única tabla con todas las filas coincidentes . Las dos consultas deben tener como resultado la misma cantidad de columnas y tipos de datos compatibles para poder unirse. Todos los registros duplicados se eliminan automáticamente a menos que UNION ALL
se utilice .
UNION
Puede ser útil en aplicaciones de almacenamiento de datos donde las tablas no están perfectamente normalizadas . [2] Un ejemplo simple sería una base de datos que tiene tablas sales2005
que sales2006
tienen estructuras idénticas pero están separadas por consideraciones de rendimiento. Una UNION
consulta podría combinar resultados de ambas tablas.
Tenga en cuenta que UNION ALL
no se garantiza el orden de las filas. Las filas del segundo operando pueden aparecer antes, después o mezcladas con las filas del primer operando. En situaciones en las que se desea un orden específico, ORDER BY
se debe utilizar .
Tenga en cuenta que UNION ALL
puede ser mucho más rápido que el simple UNION
.
Dadas estas dos tablas:
Ejecutando esta declaración:
SELECCIONAR * DE ventas2005 UNIÓN SELECCIONAR * DE ventas2006 ;
produce este conjunto de resultados, aunque el orden de las filas puede variar porque no ORDER BY
se proporcionó ninguna cláusula:
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 en ambas columnas.
UNION ALL
da resultados diferentes, porque no eliminará los duplicados. Ejecutando esta sentencia:
SELECCIONAR * DE ventas2005 UNIÓN TODOS SELECCIONAR * DE ventas2006 ;
daría estos resultados, permitiendo nuevamente la variación por la falta de una ORDER BY
declaración:
La discusión de uniones externas completas también tiene un ejemplo que utiliza UNION
.
El operador SQL INTERSECT
toma los resultados de dos consultas y devuelve solo las filas que aparecen en ambos conjuntos de resultados. Para fines de 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á veces en el conjunto de resultados.
La siguiente INTERSECT
consulta de ejemplo devuelve todas las filas de la tabla Pedidos donde la Cantidad está entre 50 y 100.
SELECCIONAR * DE Pedidos DONDE Cantidad ENTRE 1 Y 100 INTERSECARSESELECCIONAR * DE Pedidos DONDE Cantidad ENTRE 50 Y 200 ;
El operador SQL EXCEPT
toma las filas distintas de una consulta y devuelve las filas que no aparecen en un segundo conjunto de resultados. Para fines de eliminación de filas y eliminación de duplicados, el EXCEPT
operador no distingue entre NULLs
. El EXCEPT ALL
operador no elimina duplicados, pero si una fila aparece X veces en la primera consulta e Y veces en la segunda, aparecerá veces en el conjunto de resultados.
En particular, la plataforma Oracle proporciona un MINUS
operador que es funcionalmente equivalente al operador estándar SQL EXCEPT DISTINCT
. [3]
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.
SELECCIONAR * DE Pedidos DONDE Cantidad ENTRE 1 Y 100 EXCEPTOSELECCIONAR * DE Pedidos DONDE Cantidad ENTRE 50 Y 75 ;
El siguiente ejemplo es equivalente al ejemplo anterior pero sin utilizar el EXCEPT
operador.
SELECCIONAR o1 . * DE ( SELECCIONAR * DE Pedidos DONDE Cantidad ENTRE 1 Y 100 ) o1 IZQUIERDA UNIRSE ( SELECCIONAR * DE Pedidos DONDE Cantidad ENTRE 50 Y 75 ) o2 EN o1 . id = o2 . id DONDE o2 . id ES NULO
UNION ALL
técnica de visualización para gestionar el mantenimiento y el rendimiento en su entorno de almacenamiento de datos de gran tamaño... Esta UNION ALL
técnica ha salvado a muchos de mis clientes de problemas relacionados con diseños de bases de datos sensibles al tiempo. Estas bases de datos suelen tener un marco temporal, mes o día actual extremadamente volátil y los datos más antiguos rara vez se actualizan. Mediante el uso de diferentes asignaciones DASD de contenedores, espacios de tablas, tablas y definiciones de índices, las configuraciones se pueden ajustar para las consideraciones de rendimiento específicas para estos diferentes niveles de volatilidad y situaciones de frecuencia de actualización ". Opciones de diseño de tablas de almacenamiento de datos de terabytes - Parte 2 (consultado el 25 de julio de 2006)EXCEPT DISTINCT
operador de tabla: utilizar MINUS
en lugar de EXCEPT DISTINCT
" "Oracle Compliance To Core SQL:2003". Docs.oracle.com . Consultado el 7 de julio de 2022 .