Af: Greg Robidoux | Opdateret: 2019-10-29 | Kommentarer (4) | Relateret: 1 | 2 | 3 | 4 | 5 | Mere > DELTAG i Tabeller
Problem
nogle gange er der behov for at kombinere data fra flere tabeller eller visninger intoone omfattende datasæt. Dette kan være for tabeller med lignende data inden for samedatabase eller måske er der behov for at kombinere lignende data på tværs af databaser eller evenacross servere.
i dette tip vil vi se på, hvordan man bruger UNION vs. UNIONALL-kommandoer, og hvordan de adskiller sig.,
løsning
I S .l Server har du mulighed for at kombinere flere datasæt i en comprehensivedataset ved hjælp af UNION eller UNION alle operatører. Der er stor forskel på, hvordan disse fungerer såvel som det endelige resultatsæt, der returneres, men dybest set forbinder disse kommandoer flere datasæt, der har lignende strukturer i et kombineret datasæt.
UNION
denne handling giver dig mulighed for at tilslutte multipledatasets til et datasæt og fjerner eventuelle dubletter, der findes. Grundlæggende udfører den en særskilt operation på tværs af alle kolonner i resultatsættet.,
UNION alle
Denne operation giver dig igen mulighed for at deltageflere datasæt i et datasæt, men det fjerner ikke nogen dublerede rækker.Fordi dette ikke fjerner dublerede rækker denne proces er hurtigere, men hvis youdon ‘ t ønsker dublerede poster skal du bruge fagforeningen operatør i stedet.,h forespørgsel skal have samme antal kolonner
Tip: Hvis du ikke har præcis de samme kolonner i alle søgninger bruge en default-værdi eller en NULL-værdi, så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 alle eksempler
lad os se på et par enkle eksempler på, hvordan disse kommandoer fungerer, og hvordande adskiller sig. Som du vil se de endelige resultatersæt vil variere, men der er nogleinteressant info om, hvordan s .l Server faktisk fuldender processen.
UNION alle
i dette første eksempel bruger vi UNION ALL operator mod Employeetable fra Adventure .orks-databasen. Dette er sandsynligvis ikke noget, du ville gøre, men dette hjælper med at illustrere forskellene mellem disse to operatører.
der er 290 rækker i tabel DBO.Medarbejder.,
SELECT * FROM HumanResources.EmployeeUNION ALLSELECT * FROM HumanResources.EmployeeUNION ALLSELECT * FROM HumanResources.Employee
Når denne forespørgsel køres, har resultatsættet 870 rækker. Dette er de 290 rækker returneret3 gange. Dataene er bare sammensat et datasæt oven på det andet datasæt.
Her er eksekveringsplanen for denne forespørgsel. Vi kan se, at tabellen blev forespurgt 3 gange, og s .l Server gjorde et Sammenkædningstrin for at sammenkæde alle dataene.
EU
I dette næste eksempel, vil vi anvender operatoren UNION mod Medarbejderen tableagain fra AdventureWorks database.,
SELECT * FROM HumanResources.EmployeeUNIONSELECT * FROM HumanResources.EmployeeUNIONSELECT * FROM HumanResources.Employee
Når denne forespørgsel køres, har resultatsættet 290 rækker. Selv om vi kombinerede data tre gange, fjernede EU-operatøren duplikatposterne og vender derfor kun de 290 unikke rækker tilbage.
Her er eksekveringsplanen for denne forespørgsel. Vi kan se, at s .l Server først forespurgte 2 af tabellerne, derefter gjorde en fusion Join operation for at kombinere de to første tabelsand så gjorde det en anden fusion Join sammen med at forespørge den tredje tabel i forespørgslen.,Så vi kan se, at der var meget mere arbejdet, der skulle udføres for at få dette resultat i forhold til Unionen alle.
UNION vs. EU-ALLE Eksempler Med Sortere på Grupperet Indeks Kolonne
Hvis vi tager dette et skridt videre og gøre en SLAGS data ved hjælp af ClusteredIndex kolonne får vi disse udførelse planer. Herfra kan vi se, at e .ecutionplan, som s .l Server bruger, er identisk for hver af disse operationer, selvom de endelige resultatsæt stadig indeholder 870 rækker for Unionen alle og 290 ro .s for Unionen.,
UNIONS ALLE gennemførelsesplan med sortere på grupperet indeks kolonne
EU-gennemførelsesplan med sortere på grupperet indeks kolonne
UNION vs. EU-ALLE Eksempler Med Sortere på Ikke-indekserede Kolonne
Her er et andet eksempel gør det samme, men denne gang du laver en SLAGS på anon indekseret kolonne. Som du kan se, er udførelsesplanerne igen identiske for disseto forespørgsler, men denne gang i stedet for at bruge en flet JOIN, bruges en sammenkædning og Sortoperationer.,
- Tag et kig på disse andre tips der kan være nyttige for at bruge eu-aktører
- Sammenligne Flere Datasæt med INTERSECTand UNDTAGEN operatører
- SQL Server Fire-del navngivning
- Sammenlign SQL Server Resultaterne af To Forespørgsler ved hjælp af EU ‘
Senest Opdateret: 2019-10-29
Om forfatteren
Se alle mine tips
Leave a Reply