Combinación de conjuntos de resultados con UNION

El operador UNION permite combinar los resultados de varias instrucciones SELECT en un único conjunto de resultados. Todos los conjuntos de resultados combinados mediante UNION deben tener la misma estructura. Deben tener el mismo número de columnas y las columnas del conjunto de resultados deben tener tipos de datos compatibles. Para obtener más información, vea Directrices para usar UNION.

UNION se especifica como:

select_statement UNION [ALL] select_statement

Por ejemplo, Table1 y Table2 tienen la misma estructura de dos columnas.

TABLE1

 

 

TABLE2

 

COLUMNA

COLUMNB

 

COLUMNC

COLUMND

CHAR(4)

INT

 

CHAR(4)

INT

-------

---

 

-------

---

ABC

  1

 

GHI

  3

DEF

  2

 

JKL

  4

GHI

  3

 

MNO

  5

En esta consulta se crea un operador UNION entre las tablas:

SELECT * FROM Table1
UNION
SELECT * FROM Table2

El conjunto de resultados es el siguiente:

ColumnA  ColumnB
-------  --------
abc      1
def      2
ghi      3
jkl      4
mno      5

Los nombres de columna del conjunto de resultados de UNION son los mismos que los nombres de columna del conjunto de resultados de la primera instrucción SELECT de UNION. Los nombres de columna del conjunto de resultados de las demás instrucciones SELECT se omiten.

De forma predeterminada, el operador UNION quita las filas duplicadas del conjunto de resultados. Si se usa ALL, se incluyen todas las filas en los resultados y no se quitan los duplicados.

Los resultados exactos de una operación UNION dependen de la intercalación elegida durante la instalación y de la cláusula ORDER BY. Para obtener más información acerca de los efectos de diferentes intercalaciones, vea Trabajar con intercalaciones.

En una instrucción Transact-SQL puede aparecer un número indeterminado de operadores UNION. Por ejemplo:

SELECT * FROM TableA
UNION
SELECT * FROM TableB
UNION
SELECT * FROM TableC
UNION
SELECT * FROM TableD

De forma predeterminada, SQL Server 2005 analiza una instrucción que contiene operadores UNION de izquierda a derecha. Use paréntesis para especificar el orden de evaluación. Por ejemplo, las siguientes instrucciones no son equivalentes:

/* First statement. */
SELECT * FROM TableA
UNION ALL
(   SELECT * FROM TableB
   UNION
   SELECT * FROM TableC
)
GO

/* Second statement. */
(SELECT * FROM TableA
 UNION ALL
 SELECT * FROM TableB
)
UNION
SELECT * FROM TableC)
GO

Notas

En la primera instrucción, se eliminan los duplicados de la unión entre TableB y TableC. En la unión entre ese conjunto y TableA, los duplicados no se eliminan. En la segunda instrucción, los duplicados se incluyen en la unión entre TableA y TableB, pero se eliminan en la unión posterior con TableC. ALL no tiene ningún efecto en el resultado final de esta expresión.

Cuando se usa UNION, las instrucciones SELECT individuales no pueden tener sus propias cláusulas ORDER BY o COMPUTE. Sólo puede haber una cláusula ORDER BY o COMPUTE detrás de la última instrucción SELECT; esta cláusula se aplica al conjunto combinado final de los resultados. GROUP BY y HAVING sólo se pueden especificar en las instrucciones SELECT individuales.