Av: Greg Robidoux | Uppdaterad: 2019-10-29 | Kommentarer (4) | Related: 1 | 2 | 3 | 4 | 5 | Mer > GÅ med Tabeller
Problem
Ibland är det nödvändigt att kombinera data från flera tabeller eller vyer intoone omfattande dataset. Detta kan vara för tabeller med liknande uppgifter inom samedatabase eller kanske det finns ett behov av att kombinera liknande data mellan databaser eller evenacross servrar.
i det här tipset tar vi en titt på hur du använder UNION vs UNIONALL-kommandon och hur de skiljer sig åt.,
lösning
i SQL Server har du möjlighet att kombinera flera datauppsättningar till en omfattande datauppsättning genom att använda unionen eller Unionen alla operatörer. Det finns en stor skillnad ihur dessa arbeten samt det slutliga resultatet som returneras, men i princip thesecommands går med i flera datauppsättningar som har liknande strukturer i en kombinerad datauppsättning.
UNION
med den här åtgärden kan du ansluta multipledataset till en datauppsättning och ta bort eventuella dubbletter som finns. Basicallyit utför en distinkt operation över alla kolumner i resultatuppsättningen.,
UNION ALL
med den här åtgärden kan du ansluta flera datauppsättningar till en datauppsättning, men det tar inte bort några dubbla rader.Eftersom detta inte tar bort dubbletter rader denna process är snabbare, men om du inte vill duplicera poster måste du använda Union operator istället.,h-frågan måste ha samma antal kolumner
tips: om du inte har exakt samma kolumner i alla frågor använd ett standardvärde eller ett NULL-värde som:
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 alla exempel
Låt oss ta en titt på några enkla exempel på hur dessa kommandon fungerar och hurde skiljer sig åt. Som du kommer att se de slutliga resultatenseten kommer att skilja sig, men det finns någraintressant information om hur SQL Server faktiskt slutför processen.
UNION ALL
i det här första exemplet använder vi UNION all operator mot Employeetable från AdventureWorks-databasen. Detta är förmodligen inte något du skullegör, men detta hjälper till att illustrera skillnaderna mellan dessa två operatörer.
det finns 290 rader i tabell dbo.Anställd.,
SELECT * FROM HumanResources.EmployeeUNION ALLSELECT * FROM HumanResources.EmployeeUNION ALLSELECT * FROM HumanResources.Employee
När den här frågan körs har resultatuppsättningen 870 rader. Detta är de 290 rader som returneras3 gånger. Data sätts bara ihop en datauppsättning ovanpå den andra datauppsättningen.
här är exekveringsplanen för den här frågan. Vi kan se att tabellen var queried3 gånger och SQL Server gjorde ett Sammankopplingssteg för att sammanfoga alla data.
UNION
i det här nästa exemplet använder vi unionsoperatören mot Employee tableagain från AdventureWorks-databasen.,
SELECT * FROM HumanResources.EmployeeUNIONSELECT * FROM HumanResources.EmployeeUNIONSELECT * FROM HumanResources.Employee
När den här frågan körs har resultatuppsättningen 290 rader. Även om vi kombinerade uppgifterna tre gånger tog unionsoperatören bort dubblettposterna och därför bara de 290 unika raderna.
här är exekveringsplanen för den här frågan. Vi kan se att SQL Server först queried2 av tabellerna, sedan gjorde en sammanfogning Join operation för att kombinera de två första tabellernaoch sedan gjorde det en annan sammanfogning tillsammans med att fråga den tredje tabellen i frågan.,Så vi kan se att det var mycket mer arbetat som måste utföras för att få detta resultat jämfört med Unionen alla.
UNION vs UNION alla exempel med Sortera på klustrad Indexkolumn
om vi tar detta ett steg längre och gör en sorts data med hjälp av Klusteredindex-kolumnen får vi dessa exekveringsplaner. Av detta kan vi se att exekveringsplanen som SQL Server använder är identisk för var och en av dessa operationer, även om de slutliga resultatuppsättningarna fortfarande innehåller 870 rader för Unionen alla och 290 raderför unionen.,
UNION ALL execution plan with sort on clustered index column
Union execution plan with sort on clustered index column
UNION vs. UNION alla exempel med Sortera på icke-indexerad kolumn
Här är ett annat exempel som gör det samma sak, men den här gången gör en sort på Anon indexerad kolumn. Som du kan se är exekveringsplanerna igen identiska för dessatvå frågor, men den här gången istället för att använda en sammanfogning används en sammanslagning och Sortoperationer.,
- ta en titt på dessa andra tips som kan vara användbara för att använda Union operators
- jämföra flera datauppsättningar med INTERSECTand utom operatörer
- SQL Server fyra delar namngivning
- jämför SQL Server resultat av två frågor med UNION
Senast uppdaterad: 2019-10-29
om författaren
Visa alla mina tips
Leave a Reply