Combinazione dei set di risultati con l'operatore 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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
Vedere anche
Concetti
Utilizzo degli operatori UNION, EXCEPT e INTERSECT con altre istruzioni Transact-SQL