Combina le righe della tabella Usando UNION
In questa lezione parleremo della clausola UNION. È possibile utilizzare la clausola UNION per combinare le righe della tabella da due query diverse in un unico risultato. A differenza di un join, che combina colonne da tabelle diverse, un’unione combina righe da tabelle diverse. Ecco un’illustrazione di come appare un’UNIONE
Unions
Tutti gli esempi di questa lezione sono basati su Microsoft SQL Server Management Studio e il database AdventureWorks2012., È possibile iniziare a utilizzare questi strumenti gratuiti utilizzando la mia guida Per iniziare a utilizzare SQL Server.
In SQL questa dichiarazione appare come
SELECT columnlistFROM table1UNIONSELECT columnlistFROM table2
per unione di due tabelle ci sono un paio di condizioni:
- Il numero di colonne deve essere la stessa per entrambe le istruzioni select.
- Le colonne, in ordine, devono essere dello stesso tipo di dati.
Quando le righe vengono combinate le righe duplicate vengono eliminate. Se si desidera mantenere tutte le righe da entrambi i risultati dell’istruzione select, utilizzare la parola chiave ALL.,
Esempi
Union two tables
Supponiamo che ti sia stato chiesto di fornire un elenco di tutte le categorie e sottocategorie di prodotti AdventureWorks2012. Per fare ciò è possibile scrivere due query separate e fornire due risultati separati, ad esempio due fogli di calcolo, oppure è possibile utilizzare la clausola UNION per fornire un risultato combinato:
SELECT C.NameFROM Production.ProductCategory AS CUNION ALLSELECT S.NameFROM Production.ProductSubcategory AS S
Da questo si ottiene un elenco combinato di nomi, ma si supponga di voler sapere quali nomi erano categorie rispetto alle sottocategorie., Per fare ciò è possibile aggiungere una nuova colonna che indica il tipo di categoria:
SELECT 'category', C.NameFROM Production.ProductCategory AS CUNION ALLSELECT 'subcategory', S.NameFROM Production.ProductSubcategory AS S
Union versus Union All
La differenza tra UNION e UNION ALL è che con UNION restituisce un set univoco di righe dal risultato union; mentre, UNION ALL restituisce ogni riga.
Esempio:
SELECT person.Address.CityFROM person.Address
Restituisce 19614 righe.
SELECT person.Address.CityFROM person.AddressUNIONSELECT person.Address.CityFROM person.Address
Restituisce 575 righe, ovvero il numero di nomi di città distinti all’interno della tabella. L’esecuzione di UNION All restituisce l’intero set di nomi di città due volte:
SELECT person.Address.CityFROM person.AddressUNION ALLSELECT person.Address.CityFROM person.Address
Restituisce 39228 righe.,
Come puoi vedere c’è una grande differenza con l’uso del qualificatore ALL. Quando non vengono utilizzati, i risultati sono valori distinti. I duplicati non vengono eliminati solo tra le righe di ciascun risultato, ma anche dall’interno.
Union three tables
Supponiamo che la gestione desideri un elenco combinato di persone, fornitori e nomi di negozi identificati dalla fonte.
Per fare ciò creiamo tre query separate e quindi usiamo la clausola union per metterle insieme. Ci sarà quindi ordinare la lista.,
A prima vista potresti pensare che la clausola ORDER BY si applicherebbe solo all’ultima istruzione select, ma in realtà si applica a tutti i risultati restituiti dall’unione. Il motore di database prima elabora tutte le istruzioni dell’unione, quindi ordina per.
Se hai dei dubbi sull’ordine di elaborazione, puoi usare la parentesi “()” per controllare l’ordine di valutazione proprio come puoi fare con le espressioni. Ecco come sarebbe l’istruzione, in generale, con parentesi: