Di: Greg Robidoux / Aggiornato: 2019-10-29 / Commenti (4) / Correlati: 1 | 2 | 3 | 4 | 5 | More > JOIN Tables
Problem
A volte è necessario combinare dati da più tabelle o viste in un set di dati completo. Questo può essere per tabelle con dati simili all’interno di samedatabase o forse è necessario combinare dati simili tra database o server evenacross.
In questo suggerimento daremo un’occhiata a come usare i comandi UNION vs. UNIONALL e come differiscono.,
Soluzione
In SQL Server è possibile combinare più set di dati in un set completo utilizzando gli operatori UNION o UNION ALL. C’è una grande differenza inhow questi funzionano così come il set di risultati finali che viene restituito, ma fondamentalmente thesecommands uniscono più set di dati che hanno strutture simili in un set di dati combinato.
UNION
Questa operazione consente di unire multipledatasets in un set di dati e rimuovere eventuali duplicati esistenti. Basicallyit sta eseguendo un’operazione DISTINTA su tutte le colonne del set di risultati.,
UNION ALL
Questa operazione consente nuovamente di unire più set di dati in un set di dati, ma non rimuove alcuna riga duplicata.Poiché questo non rimuove le righe duplicate, questo processo è più veloce, ma se non vuoi record duplicati dovrai invece utilizzare l’operatore UNION.,h query deve avere lo stesso numero di colonne
Suggerimento: Se non si hanno esattamente la stessa colonne in tutte le query, utilizzare il valore predefinito o un valore NULL come:
SELECT firstName, lastName, company FROM businessContactsUNIONSELECT firstName, lastName, NULL FROM nonBusinessContactsorSELECT firstName, lastName, createDate FROM businessContactsUNION ALLSELECT firstName, lastName, getdate() FROM nonBusinessContacts
UNION vs, UNION TUTTI gli esempi
Diamo un’occhiata ad alcuni semplici esempi di come funzionano questi comandi e comesi differenziano. Come vedrai i risultati finali saranno diversi, ma ci sono alcune informazioni interessanti su come SQL Server completa effettivamente il processo.
UNION ALL
In questo primo esempio stiamo usando l’operatore UNION ALL contro Employeetable dal database AdventureWorks. Questo probabilmente non è qualcosa che faresti, ma questo aiuta a illustrare le differenze di questi due operatori.
Ci sono 290 righe nella tabella dbo.Dipendente.,
SELECT * FROM HumanResources.EmployeeUNION ALLSELECT * FROM HumanResources.EmployeeUNION ALLSELECT * FROM HumanResources.Employee
Quando viene eseguita questa query, il set di risultati ha 870 righe. Questa è la 290 righe restituite3 volte. I dati sono solo messi insieme un set di dati sopra l’altro set di dati.
Ecco il piano di esecuzione per questa query. Possiamo vedere che la tabella è stata interrogata 3 volte e SQL Server ha eseguito una fase di concatenazione per concatenare tutti i dati.
UNION
In questo prossimo esempio stiamo usando l’operatore UNION contro la tabella Employee del database AdventureWorks.,
SELECT * FROM HumanResources.EmployeeUNIONSELECT * FROM HumanResources.EmployeeUNIONSELECT * FROM HumanResources.Employee
Quando viene eseguita questa query, il set di risultati ha 290 righe. Anche se abbiamo combinato i dati tre volte l’operatore dell’UNIONE ha rimosso i record duplicati e quindi restituisce solo le 290 righe univoche.
Ecco il piano di esecuzione per questa query. Possiamo vedere che SQL Server ha prima interrogato 2 delle tabelle, quindi ha eseguito un’operazione di unione per combinare le prime due tabelle e quindi ha eseguito un’altra unione insieme all’interrogazione della terza tabella nella query.,Quindi possiamo vedere che c’era molto più lavoro che doveva essere eseguito per ottenere questo risultato rispetto all’UNIONE.
UNION vs. UNION TUTTI gli esempi Con Sort on Clustered Index Column
Se facciamo un ulteriore passo avanti e facciamo una SORTA di dati usando la colonna ClusteredIndex otteniamo questi piani di esecuzione. Da ciò possiamo vedere che il piano di esecuzione utilizzato da SQL Server è identico per ciascuna di queste operazioni, anche se i set di risultati finali conterranno ancora 870 righe per l’UNIONE e 290 righe per l’UNIONE.,
UNIONE esecuzione di un piano con l’ordinamento indice cluster colonna
UNIONE esecuzione di un piano con l’ordinamento indice cluster colonna
UNION vs UNIONE TUTTI gli Esempi Con una Sorta di Non-Colonna indicizzata
Ecco un altro esempio di fare la stessa cosa, ma questa volta facendo un ORDINAMENTO anon colonna indicizzata. Come puoi vedere i piani di esecuzione sono di nuovo identici per questidue query, ma questa volta invece di utilizzare un JOIN di UNIONE, vengono utilizzate una CONCATENAZIONE e SORToperations.,
- date un’occhiata a questi altri suggerimenti che possono essere utili per l’utilizzo di unione operatori
- Confronto Più set di dati con la INTERSECTand EXCEPT
- SQL Server denominazione in Quattro parti
- Confronto SQL Server Risultati di Due Query utilizzando UNIONE
Ultimo Aggiornamento: 2019-10-29
Circa l’autore
Visualizza tutti i miei consigli
Leave a Reply