Combining Results Sets with UNION

L'operatore UNION consente di combinare i risultati di due o più istruzioni SELECT in un unico set di risultati. I set di risultati combinati con l'operatore UNION devono avere la stessa struttura, ovvero includere lo stesso numero di colonne, e i tipi di dati delle colonne corrispondenti dei set di risultati devono essere compatibili tra di loro. Per ulteriori informazioni, vedere Linee guida per l'utilizzo dell'operatore UNION.

La sintassi dell'operatore UNION è la seguente:

select_statement UNION [ALL] select_statement

Le tabelle Table1 e Table2, ad esempio, hanno la stessa struttura a due colonne.

TABLE1

 

 

TABLE2

 

COLUMNA

COLUMNB

 

COLUMNC

COLUMND

CHAR(4)

INT

 

CHAR(4)

INT

-------

---

 

-------

---

ABC

  1

 

GHI

  3

DEF

  2

 

JKL

  4

GHI

  3

 

MNO

  5

La query seguente unisce le due tabelle mediante l'operatore UNION:

SELECT * FROM Table1
UNION
SELECT * FROM Table2

Set di risultati:

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

I nomi delle colonne di un set di risultati ottenuto con l'operatore UNION corrispondono a quelli delle colonne del set di risultati della prima istruzione SELECT utilizzata dall'operatore stesso. I nomi delle colonne del set di risultati delle altre istruzioni SELECT vengono ignorati.

Per impostazione predefinita, l'operatore UNION rimuove le righe duplicate dal set di risultati. Se si utilizza la parola chiave ALL, nel set di risultati vengono incluse tutte le righe, comprese le righe duplicate.

I risultati di un'operazione UNION variano in base alle regole di confronto selezionate durante l'installazione e all'impostazione della clausola ORDER BY. Per ulteriori informazioni sugli effetti delle diverse regole di confronto, vedere Utilizzo delle regole di confronto.

Un'istruzione Transact-SQL può includere un numero qualsiasi di operatori UNION, ad esempio:

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

Per impostazione predefinita, in SQL Server 2005 le istruzioni contenenti operatori UNION vengono valutate da sinistra a destra. Per modificare l'ordine di valutazione, utilizzare le parentesi. Le istruzioni seguenti, ad esempio, non sono equivalenti:

/* 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

Osservazioni

Nella prima istruzione vengono eliminati i duplicati nell'unione di TableB e TableC, mentre nell'unione tra il set ottenuto e TableA i duplicati non vengono eliminati. Nella seconda istruzione i duplicati vengono inclusi nell'unione di TableA e TableB, ma eliminati nella successiva unione con TableC. La parola chiave ALL non influisce in alcun modo sul risultato finale di questa espressione.

Quando si utilizza l'operatore UNION, non è possibile includere clausole ORDER BY o COMPUTE nelle singole istruzioni SELECT. È possibile specificare una sola clausola ORDER BY o COMPUTE dopo l'ultima istruzione SELECT. Tale clausola viene applicata al set di risultati finale combinato. Le clausole GROUP BY e HAVING possono essere specificate solo nelle singole istruzioni SELECT.