Академический Документы
Профессиональный Документы
Культура Документы
UNION
Convenciones de sintaxis de Transact-SQL
Sintaxis
{ <query_specification> | ( <query_expression> ) }
UNION [ ALL ]
<query_specification | ( <query_expression> )
[ UNION [ ALL ] <query_specification> | ( <query_expression> )
[ ...n ] ]
Argumentos
<query_specification> | ( <query_expression> )
Es una especificacin o expresin de consulta que devuelve datos que se van a
combinar con los datos de otra especificacin o expresin de consulta. No es
preciso que las definiciones de las columnas que forman parte de una operacin
UNION sean iguales, pero deben ser compatibles a travs de una conversin
implcita. Cuando los tipos de datos difieren, el tipo de datos resultante se
determina segn las reglas de prioridad de tipos de datos. Cuando los tipos son
los mismos pero varan en cuanto a precisin, escala o longitud, el resultado se
determina segn las mismas reglas para combinar expresiones. Para obtener
ms informacin, vea Precisin, escala y longitud (Transact-SQL).
Las columnas del tipo de datos xml deben ser equivalentes. Todas las columnas
deben tener un tipo de esquema XML o no tener tipo. Si tienen tipo, debe ser el
de la misma coleccin de esquemas XML.
UNION
Especifica que se deben combinar varios conjuntos de resultados para ser
devueltos como un solo conjunto de resultados.
ALL
Agrega todas las filas a los resultados. Incluye las filas duplicadas. Si no se
especifica, las filas duplicadas se quitan.
Ejemplos
A.Usar una instruccin UNION simple
En el siguiente ejemplo, el conjunto de resultados incluye el contenido de las
columnas ProductModelID y Name de las tablas ProductModel y Gloves.
USE AdventureWorks2012;
GO
IF OBJECT_ID ('dbo.Gloves', 'U') IS NOT NULL
DROP TABLE dbo.Gloves;
GO
-- Create Gloves table.
SELECT ProductModelID, Name
INTO dbo.Gloves
FROM Production.ProductModel
WHERE ProductModelID IN (3, 4);
GO
-- Here is the simple union.
USE AdventureWorks2012;
GO
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves
ORDER BY Name;
GO
GO
SELECT ProductModelID, Name
FROM dbo.ProductResults;
En los siguientes ejemplos se utiliza UNION para combinar los resultados de tres tablas
que tienen las mismas 5 filas de datos. En el primer ejemplo se utiliza UNION ALL para
mostrar los registros duplicados y se devuelven las 15 filas. En el segundo ejemplo se
utiliza UNION sin ALL para eliminar las filas duplicadas de los resultados combinados de
las tres instrucciones SELECT y se devuelven 5 filas.
En el tercer ejemplo se utiliza ALL con el primer UNION y los parntesis incluyen al
segundo UNION que no utiliza ALL. El segundo UNION se procesa en primer lugar
porque se encuentra entre parntesis. Devuelve 5 filas porque no se utiliza la
opcin ALL y se quitan los duplicados. Estas 5 filas se combinan con los resultados del
primer SELECTmediante las palabras clave UNION ALL. Esto no quita los duplicados
entre los dos conjuntos de 5 filas. El resultado final es de 10 filas.
USE AdventureWorks2012;
GO
IF OBJECT_ID ('dbo.EmployeeOne', 'U') IS NOT NULL
DROP TABLE dbo.EmployeeOne;
GO
IF OBJECT_ID ('dbo.EmployeeTwo', 'U') IS NOT NULL
DROP TABLE dbo.EmployeeTwo;
GO
IF OBJECT_ID ('dbo.EmployeeThree', 'U') IS NOT NULL
DROP TABLE dbo.EmployeeThree;
GO
SELECT pp.LastName, pp.FirstName, e.JobTitle
INTO dbo.EmployeeOne
FROM Person.Person AS pp JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = pp.BusinessEntityID
WHERE LastName = 'Johnson';
GO
SELECT pp.LastName, pp.FirstName, e.JobTitle
INTO dbo.EmployeeTwo
FROM Person.Person AS pp JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = pp.BusinessEntityID
WHERE LastName = 'Johnson';
GO
SELECT pp.LastName, pp.FirstName, e.JobTitle
INTO dbo.EmployeeThree
FROM Person.Person AS pp JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = pp.BusinessEntityID
WHERE LastName = 'Johnson';
GO
-- Union ALL
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeOne
UNION ALL
SELECT LastName, FirstName ,JobTitle
FROM dbo.EmployeeTwo
UNION ALL
SELECT LastName, FirstName,JobTitle
FROM dbo.EmployeeThree;
GO
SELECT LastName, FirstName,JobTitle
FROM dbo.EmployeeOne
UNION
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeTwo
UNION
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeThree;
GO
SELECT LastName, FirstName,JobTitle
FROM dbo.EmployeeOne
UNION ALL
(
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeTwo
UNION
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeThree
);
GO