SQLShack (Español)
Este artículo proporcionará una inmersión profunda en el operador de SQL Union, describiendo sus muchos usos junto con ejemplos y explorando algunas preguntas comunes como las diferencias entre Union vs Union All.
para abordar los requisitos de datos del mundo real, es posible que necesitemos combinar conjuntos de resultados de múltiples fuentes de datos para poder realizar análisis de datos o crear nuevos conjuntos de datos. Los conjuntos de datos pueden ser idénticos, pero hay posibilidades de que hagan referencia a tablas diferentes., ¿Hay alguna forma de combinar los datos en una sola consulta? ¿Son los operadores Set una opción viable? Comencemos y veamos cómo se pueden usar algunos de los operadores existentes para ayudarnos a abordar estos desafíos comunes.,N vs Union All
operadores
un operador es un símbolo o una palabra clave que define una acción que se realiza en una o más expresiones de la instrucción SELECT.,
establecer operador
vamos a entrar en los detalles de los operadores de conjunto en SQL Server, y cómo usarlos
Hay cuatro operadores de conjunto básico en SQL Server:
- Union
- Union All
- excepto
- INTERSECT
Union
El operador de unión combina los resultados de dos o más consultas en una sola conjunto de resultados que incluye todas las filas que pertenecen a todas las consultas de la Unión. En esta operación, combina dos consultas más y elimina los duplicados.,
por ejemplo, la tabla ‘A’ tiene 1,2, y 3 y la tabla ‘B’ tiene 3,4,5.,
en la salida, puede ver una lista distinta de los registros de los dos conjuntos de resultados
en Union vs Union todos encontramos que son bastante similares, pero tienen algunas diferencias importantes desde una perspectiva de resultados de rendimiento.,
el operador de unión combina los resultados de dos o más consultas en un único conjunto de resultados que incluye todas las filas que pertenecen a todas las consultas de la Unión. En términos simples, combina los dos o más conjuntos de filas y mantiene duplicados.
por ejemplo, la tabla ‘A’ tiene 1,2, y 3 y la tabla ‘B’ tiene 3,4,5.,iv>
En la salida, usted puede ver todas las filas que de la repetición de los registros.,>4
La fila ‘3’ es común entre los dos conjuntos de resultados.,
EXCEPT
el operador EXCEPT enumera las filas de la primera que no están en la segunda.,/div>
Lista el nombre de la común de las filas de la primera serie.,
nota: es muy fácil visualizar un operador de conjunto utilizando un diagrama de Venn, donde cada una de las tablas se representa mediante la intersección de formas. Las intersecciones de las formas, donde las tablas se superponen, son las filas donde se cumple una condición.,las olumns que se definen en cada consulta deben tener el mismo orden
Nota:
- Establecer operadores eliminar duplicados, excepto para el operador UNION ALL
- Los nombres de las columnas de salida se refieren desde la primera consulta i.,e. cuando ejecutamos las instrucciones SELECT con cualquiera de los operadores Set y el conjunto de resultados de cada una de las consultas puede tener diferentes nombres de columna, por lo que el resultado de la instrucción SELECT se refiere a los nombres de columna de la primera consulta en la operación.
- SQL JOIN se usa más a menudo para combinar columnas de varias tablas relacionadas, mientras que SET Operators combina filas de varias tablas.,
- cuando los tipos de expresión son los mismos pero difieren en precisión, escala o longitud, el resultado se determina en función de las mismas reglas para combinar expresiones
ejemplos:
las siguientes consultas de T-SQL se preparan y se ejecutan en la base de datos Adventureworks2014. Puede descargar la base de datos Adventreworks2014 de muestra aquí
-
Cómo usar la cláusula simple SQL Union en la instrucción select
en este ejemplo, el conjunto de resultados incluye un conjunto distinto de filas del primer conjunto y el segundo conjunto.,El siguiente ejemplo se basa en la Regla 1, 3 & 5.,
SELECCIONE 1UNIÓNSELECCIONE 2UNIÓNSELECCIONE 3)UNIÓN(SELECCIONE 3 BUNIÓNSELECCIONE 4UNIÓNSELECCIONE 5)UNIÓN(SELECCIONE 8 cUNIÓNSELECCIONE 9UNIÓNSELECCIONE 1)) T;El resultado es la combinación de Unión y de Todos los operadores que utilicen paréntesis.,
-
Cómo Usar SQL Union con las consultas que tienen la cláusula WHERE
el siguiente ejemplo muestra el uso de Union en dos sentencias SELECT con una cláusula WHERE y una cláusula ORDER BY.,
The following example is based on the rule 1,2 and 3
12345678910SELECT P1.ProductModelID,P1.NameFROM Production.ProductModel P1WHERE ProductModelID IN(3, 4)UNIONSELECT P2.ProductModelID,P2.,Nombrede producción.ProductModel P2DONDE P2.Modelo de producto en (3, 4)Ordenar por P1.Name; -
Cómo usar la cláusula SELECT INTO con SQL Union
el siguiente ejemplo crea un nuevo dbo.tabla ficticia que utiliza la cláusula INTO en la primera instrucción SELECT que contiene el conjunto de resultados finales de la Unión de las columnas ProductModel y name de dos conjuntos de resultados diferentes., En este caso, se deriva de la misma tabla, pero en una situación del mundo real, esto también puede ser dos tablas diferentes. El siguiente ejemplo se basa en las reglas 1 , 2 y 4.
12345678910111213141516DROP TABLE IF EXISTS dbo.,dummy;SELECT P1.ProductModelID,P1.NameINTO dummyFROM Production.ProductModel P1WHERE ProductModelID IN(3, 4)UNIONSELECT P2.ProductModelID,P2.NameFROM Production.ProductModel P2WHERE P2.ProductModelID IN(3, 4)ORDER BY P1.Name;GOSELECT *FROM dbo.,Dummy; -
Cómo Usar SQL Union con las consultas que tienen una cláusula WHERE y una cláusula ORDER BY
funciones top o aggregate en cada declaración SELECT del operador de la Unión. En este caso, las 10 primeras filas se enumeran de cada conjunto de resultados y combinan las filas usando la cláusula Union para obtener un resultado final. También verá que la cláusula order by se coloca en toda la instrucción select.,
123456789101112131415161718192021SELECCIONE el.ModelID,the.,NameFROM(SELECT TOP 10 ProductModelID ModelID,NameFROM Production.ProductModelWHERE ProductModelID NOT IN(3, 4)ORDER BY Name DESC) aUNIONSELECT b.ProductModelID,b.NameFROM(SELECT TOP 10 ProductModelID,NameFROM Production.,ProductModelDONDE ProductModelID EN(5, 6)ORDENAR POR Nombre DESC) b; -
Cómo utilizar de la Unión de SQL y SQL Pivote
En el siguiente ejemplo, estamos tratando de combinar más de un conjunto de resultados. En una situación del mundo real, puede tener números financieros de varias regiones o departamentos y las tablas pueden tener las mismas columnas y tipos de datos, pero desea colocarlos en un conjunto de filas y en un solo informe., En tal escenario, utilizaría la cláusula Union y es muy fácil combinar resultados y transformar los datos en un informe más significativo.
en este ejemplo, el ProductModel se clasifica en Top10, Top100, Top 100 y transforma las filas como un conjunto agregado de los valores en las columnas respectivas. El siguiente ejemplo se basa en la Regla 2.,/div>
23456789101112131415161718192021222324SELECT MAX(Top10) Top10,MAX(Top100) Top100,MAX(Top1000) Top100DE la(SELECT COUNT(*) Top10,0 Top100,0 Top1000DE la Producción.,ProductModelWHERE ProductModelID < 10UNIONSELECT 0,COUNT(*),0FROM Production.ProductModelWHERE ProductModelID > 11AND ProductModelID < 100UNIONSELECT 0,0,COUNT(*)FROM Production.,ProductModeldonde ProductModelID > 101) t;los valores nulos son muy importantes con los operadores de conjunto y se tratan como ciudadanos de la base de datos. Debido a que los nulos se consideran únicos y si dos filas tienen un nulo en la misma columna, entonces se considerarían idénticos, por lo que en ese caso, en realidad se está comparando un nulo a un nulo y obtener la igualdad. En el siguiente ejemplo, verá el uso de valores NULL. En este caso, se opera con la función aggregate, max.,
23456789101112131415161718192021222324SELECT MAX(Top10) Top10,MAX(Top100) Top100,MAX(Top1000) Top100DE la(SELECT COUNT(*) Top10,NULL Top100,NULL Top1000DE la Producción.,ProductModelWHERE ProductModelID < 10UNIONSELECT NULL,COUNT(*),NULLFROM Production.ProductModelWHERE ProductModelID > 11AND ProductModelID < 100UNIONSELECT NULL,NULL,COUNT(*)FROM Production.,ProductModeldonde ProductModelID > 101) t;
cómo usar SQL union con cláusulas GROUP y having
los siguientes ejemplos usan el operador UNION para combinar el resultado de la tabla que todas tienen la cláusula condicional definida usando la cláusula GROUP BY y having.
el apellido se analiza especificando las condiciones en la cláusula having.
El siguiente ejemplo se basa en la regla 5.,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
SELECCIONE el pp.apellidos,
COUNT(*) repeatedtwice,
0 Repeatedthrice
DE la Persona.Persona como pp
unirse a Recursos Humanos.Empleado como e ON E. BusinessEntityID = pp.,BusinessEntityID
grupo por pp.lastname
HAVING COUNT ( * ) = 2
UNION
seleccione pp.Apellidos,
0,
COUNT(*) NtoZRange
DE la Persona.Persona como pp
unirse a Recursos Humanos.Empleado como e ON E. BusinessEntityID = pp.BusinessEntityID
grupo por pp.,LastName
HAVING COUNT(*) > 2;
|
podemos ver que los apellidos se derivan en dos columnas diferentes utilizando el operador de unión
eso es todo por ahora
resumen
hasta ahora, hemos abordado varias opciones y reglas disponibles para usar operadores de conjunto y entender cuándo usarlos. Al determinar si usar Union vs Union All, hay algunos puntos a considerar., Use Union All si sabe que los conjuntos de resultados de múltiples consultas no se superponen ni generan duplicados y recuerde, si necesita usar paréntesis, puede hacerlo. También puede pivotar y transformar la salida.
solo asegúrese de que sus tipos de datos coincidan y si necesita hacer un pedido, hágalo al final después de ejecutar todas las consultas establecidas. Por naturaleza, cuando se trata de Union vs Union All, Union All es más rápido que Union; como los operadores sindicales incurren en gastos generales adicionales para eliminar duplicados.
espero que haya disfrutado de este artículo sobre el operador SQL Union., Siéntase libre de hacer cualquier pregunta en los comentarios a continuación.
- Autor
- mensajes Recientes
Mi especialidad es diseñar & implementar soluciones de alta disponibilidad y migración de bases de datos multiplataforma., Las tecnologías en las que se trabaja actualmente son SQL Server, PowerShell, Oracle y MongoDB.,
Ver todos los mensajes por Prashanth Jayaram
- Una rápida visión general de auditoría de base de datos en SQL – 28 de enero, 2021
- Cómo configurar Azure Sincronización de Datos entre bases de datos de SQL Azure y SQL Server local – 20 de enero de 2021
- Cómo realizar Azure SQL de la base de datos de Importación/Exportación de las operaciones con el uso de PowerShell – 14 de enero de 2021