Las operaciones de conjuntos 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 .
operador SINDICAL
En SQL, la UNIONcláusula combina los resultados de dos consultas SQL en una sola tabla con todas las filas coincidentes. Para que se combinen, las dos consultas deben generar el mismo número de columnas y tipos de datosUNION ALL compatibles. Los registros duplicados se eliminan automáticamente a menos que se utilice la cláusula .
UNIONpuede 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 con tablas sales2005que sales2006tienen estructuras idénticas pero están separadas debido a consideraciones de rendimiento. Una UNIONconsulta podría combinar los resultados de ambas tablas.
Tenga en cuenta que esto UNION ALLno 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 donde se desea un orden específico, ORDER BYdebe utilizarse.
Tenga en cuenta que UNION ALLpuede ser mucho más rápido que lo normal UNION.
Ejemplos
Dadas estas dos tablas:
Ejecutando esta instrucción:
SELECCIONAR * DE sales2005 UNIÓN SELECCIONAR * DE sales2006 ;produce este conjunto de resultados, aunque el orden de las filas puede variar porque no ORDER BYse 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 ALLda resultados diferentes, porque no eliminará los duplicados. Ejecutar esta instrucción:
SELECCIONAR * DE sales2005 UNIÓN TODOS SELECCIONAR * DE sales2006 ;daría estos resultados, permitiendo nuevamente la variación por la falta de una ORDER BYdeclaración:
La discusión sobre las uniones externas completas también tiene un ejemplo que utiliza UNION.
operador INTERSECT
El operador SQL INTERSECTtoma los resultados de dos consultas y devuelve solo las filas que aparecen en ambos conjuntos de resultados. Para efectos de eliminación de duplicados, el INTERSECToperador no distingue entre NULLs. El INTERSECToperador elimina las filas duplicadas del conjunto de resultados final. El INTERSECT ALLoperador no elimina las 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.
Ejemplo
La siguiente INTERSECTconsulta de ejemplo devuelve todas las filas de la tabla Pedidos donde la Cantidad está entre 50 y 100.
SELECCIONAR * DE Pedidos DONDE CANTIDAD ESTÉ ENTRE 1 Y 100INTERSECARSESELECCIONAR * DE Pedidos DONDE CANTIDAD ESTÉ ENTRE 50 Y 200 ;EXCEPTO operador
El operador SQL EXCEPTtoma las filas distintas de una consulta y devuelve las filas que no aparecen en un segundo conjunto de resultados. Para efectos de eliminación de filas y eliminación de duplicados, el EXCEPToperador no distingue entre NULLs. El EXCEPT ALLoperador 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.
Cabe destacar que la plataforma Oracle proporciona un MINUSoperador que es funcionalmente equivalente al operador estándar SQLEXCEPT DISTINCT . [ 3 ]
Ejemplo
La siguiente EXCEPTconsulta 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 ESTÉ ENTRE 1 Y 100EXCEPTOSELECCIONAR * DE Pedidos DONDE CANTIDAD ESTÉ ENTRE 50 Y 75 ;Ejemplo
El siguiente ejemplo es equivalente al ejemplo anterior pero sin utilizar el EXCEPToperador.
SELECCIONAR o1 . * DE ( SELECCIONAR * DE Pedidos DONDE Cantidad ENTRE 1 Y 100 ) o1 UNIÓN IZQUIERDA ( SELECCIONAR * DE Pedidos DONDE Cantidad ENTRE 50 Y 75 ) o2 EN o1.id = o2.id DONDE o2.id ES NULOVéase también
Referencias
- ↑ "Los operadores UNION [ ALL ] , INTERSECT, MINUS" . Oracle . Consultado el 14 de julio de 2016 .
- ↑ " Una
UNION ALLtécnica de vistas para gestionar el mantenimiento y el rendimiento en su entorno de almacenamiento de datos a gran escala... EstaUNION ALLtécnica ha ayudado a muchos de mis clientes con problemas relacionados con diseños de bases de datos sensibles al tiempo. Estas bases de datos suelen tener un período de tiempo, mes o día extremadamente volátil, y los datos más antiguos rara vez se actualizan. Mediante diferentes asignaciones de DASD de contenedores, espacios de tablas, tablas y definiciones de índices, la configuración se puede ajustar para las consideraciones de rendimiento específicas de estos diferentes niveles de volatilidad y frecuencias de actualización. " Opciones de diseño de tablas para almacenes de datos de terabytes - Parte 2 (consultado el 25 de julio de 2006) - ↑ "E071-03,
EXCEPT DISTINCToperador de tabla: usarMINUSen lugar deEXCEPT DISTINCT" "Oracle Compliance To Core SQL:2003" . Docs.oracle.com . Consultado el 7 de julio de 2022 .
Enlaces externos
- Documentación de MSDN sobre UNION en Transact-SQL para SQL Server
- Nomenclatura de elementos de listas seleccionadas en operaciones de conjuntos
- UNION en MySQL con ejemplos
- UNIÓN en MySQL
- Cláusula UNION en PostgreSQL
- SQL UNION y UNION ALL
- Orden de clasificación dentro de la instrucción UNION
- Diseñar un flujo de datos que cargue una tabla de almacén.
- Documentación de Oracle 11g para UNION (ALL), INTERSECT y MINUS.
- Operadores de conjuntos SQL
- Palabras clave SQL