SQLShack (Svenska)
den här artikeln kommer att ge en djupdykning i SQL Union-operatören, som beskriver dess många användningsområden tillsammans med exempel och utforska några vanliga frågor som skillnaderna mellan Union vs Union alla.
för att hantera verkliga datakrav kan vi behöva kombinera resultatuppsättningar från flera datakällor så att vi kan göra dataanalys eller skapa nya datauppsättningar. Datauppsättningarna kan vara identiska men det finns chanser att de refererar till olika tabeller., Finns det ett sätt att kombinera data i en enda fråga? Är fastställda operatörer ett genomförbart alternativ? Låt oss komma igång och se hur några av de befintliga operatörerna kan användas för att hjälpa oss att hantera dessa gemensamma utmaningar.,n vs Union All
operatörer
en operatör är en symbol eller ett nyckelord definierar en åtgärd som utförs på ett eller flera uttryck i SELECT-satsen.,
Ställ in operatör
låt oss komma in i detaljerna för inställda operatörer i SQL Server, och hur man använder dem
det finns fyra grundläggande uppsättning operatörer i SQL Server:
- Union
- Union Alla
- utom
- skär
Union
unionsoperatören kombinerar resultaten av två eller flera frågor till en distinkt resultatuppsättning som innehåller alla rader som hör till alla frågor i unionen. I den här åtgärden kombinerar den ytterligare två frågor och tar bort dubbletter.,
till exempel har tabellen ” a ”1,2 och 3 och tabellen” B ” har 3,4,5.,
i utmatningen kan du se en tydlig lista över posterna från de två resultatuppsättningarna
Union alla
När du tittar på Union vs Union allt vi tycker att de är ganska lika, men de har några viktiga skillnader från ett resultatperspektiv.,
unionsoperatören kombinerar resultaten av två eller flera frågor till en enda resultatuppsättning som innehåller alla rader som hör till alla frågor i unionen. I enkla termer kombinerar den de två eller flera raduppsättningarna och håller dubbletter.
till exempel har tabellen ” a ”1,2 och 3 och tabellen” B ” har 3,4,5.,iv>
i utmatningen kan du också se alla rader som innehåller upprepade poster.,>4
raden ’3’ är vanlig mellan de två resultatuppsättningarna.,
förutom
den utom operatören listar raderna i det första som inte finns i det andra.,/div>
lista namnet-de vanliga raderna från den första uppsättningen.,
Obs! Det är väldigt enkelt att visualisera en uppsättning operatör med ett Venn-diagram, där var och en av tabellerna representeras av skärande former. Skärningarna av formerna, där tabellerna överlappar varandra, är raderna där ett villkor är uppfyllt.,olumns som definieras i varje fråga måste ha samma ordning
Obs:
- alla dessa uppsättningar operatörer tar bort dubbletter, med undantag för Union all operator
- kolumnnamnen för utmatning hänvisas från den första frågan i.,e. när vi kör SELECT-satserna med någon av de inställda operatörerna och resultatuppsättningen för var och en av frågorna kan ha olika kolumnnamn, så resultatet av SELECT-satsen refererar kolumnnamnen från den första frågan i operationen.
- SQL JOIN används oftare kombinera kolumner från flera relaterade tabeller medan ange operatörer kombinerar rader från flera tabeller.,
- när uttryckstyperna är desamma men skiljer sig åt i precision, skala eller längd bestäms resultatet utifrån samma regler för att kombinera uttryck
exempel:
följande T-SQL-frågor utarbetas och körs mot Adventureworks2014-databasen. Du kan ladda ner provet AdventireWorks2014 Databas här
-
hur man använder enkel SQL Union klausul i select-sats
i det här exemplet innehåller resultatuppsättningen en distinkt uppsättning rader från den första uppsättningen och andra uppsättningen.,Följande exempel är baserat på Regel 1, 3 & 5.,
välj 1UNIONvälj 2UNIONVälj 3)UNIONUNIONVälj 3 bUNIONVälj 4UNIONvälj 5)Union all(välj 8 CUnionvälj 9Unionvälj 1)) t;utgången är kombinationen av union och Union alla operatörer som använder parentes.,
-
hur du använder SQL Union med de frågor som har WHERE-klausulen
följande exempel visar användningen av Union i två SELECT-satser med en WHERE-klausul och ORDER BY-klausul.,
The following example is based on the rule 1,2 and 3
12345678910SELECT P1.ProductModelID,P1.NameFROM Production.ProductModel P1WHERE ProductModelID IN(3, 4)UNIONSELECT P2.ProductModelID,P2.,Namnfrån produktionen.ProductModel P2DÄR P2.ProductModelID i (3, 4)ORDER BY P1.Name; -
hur man använder SELECT INTO-klausul med SQL Union
följande exempel skapar en ny dbo.dummy tabell med hjälp av INT-klausulen i det första SELECT-uttalandet som innehåller slutresultatet av unionen av kolumnerna ProductModel och namn från två olika resultatuppsättningar., I det här fallet härrör det från samma bord men i en verklig världssituation kan detta också vara två olika tabeller. Följande exempel är baserat på Regel 1, 2 och 4.
12345678910111213141516drop table if exists dbo. – herr talman!,dummy;SELECT P1.ProductModelID,P1.NameINTO dummyFROM Production.ProductModel P1WHERE ProductModelID IN(3, 4)UNIONSELECT P2.ProductModelID,P2.NameFROM Production.ProductModel P2WHERE P2.ProductModelID IN(3, 4)ORDER BY P1.Name;GOSELECT *FROM dbo., -
hur du använder SQL Union med frågor som har en WHERE klausul och ordning efter klausul
detta är endast möjligt när vi använder TOP eller aggregerade funktioner i varje select uttalande av unionsoperatören. I det här fallet är topp 10 rader listade från varje resultatuppsättning och kombinerade raderna med hjälp av Union-klausulen för att få ett slutresultat. Du ser också att order by-klausulen placeras i alla select-satsen.,
123456789101112131415161718192021välj.ModelID,den.,NameFROM(SELECT TOP 10 ProductModelID ModelID,NameFROM Production.ProductModelWHERE ProductModelID NOT IN(3, 4)ORDER BY Name DESC) aUNIONSELECT b.ProductModelID,b.NameFROM(SELECT TOP 10 ProductModelID,NameFROM Production.,ProductModelDÄR ProductModelID I(5, 6)ORDER BY Name DESC) b; -
Hur man använder SQL Unionen och SQL Pivot
I följande exempel, vi försöker att kombinera mer än en uppsättning av resultaten. I en verklig situation kan du ha ekonomiska siffror från olika regioner eller avdelningar och tabellerna kan ha samma kolumner och datatyper, men du vill lägga dem i en uppsättning rader och i en enda rapport., I ett sådant scenario skulle du använda unionsklausulen och det är mycket lätt att kombinera resultat och omvandla data till en mer meningsfull rapport.
i det här exemplet kategoriseras ProductModel i Top10, Top100, Top 100 och omvandlar raderna som en aggregerad uppsättning värden till respektive kolumner. Följande exempel är baserat på Regel 2.,/div>
23456789101112131415161718192021222324välj max(top10) top10,Max(Top100) Top100,max(top1000) Top100från(välj count(*) top10,0 Top100,0 top1000från produktionen.,ProductModelWHERE ProductModelID < 10UNIONSELECT 0,COUNT(*),0FROM Production.ProductModelWHERE ProductModelID > 11AND ProductModelID < 100UNIONSELECT 0,0,COUNT(*)FROM Production.,ProductModeldär ProductModelID > 101) T;NULL värden är mycket viktiga med de inställda operatörerna och behandlas som andra klassens databas medborgare. Eftersom null anses vara unika och om två rader har en NULL i samma kolumn, då de skulle anses identiska, så i så fall, du faktiskt jämföra en NULL till en NULL och få jämlikhet. I följande exempel ser du användningen av NULL-värden. I det här fallet drivs det med aggregatfunktionen, max.,
23456789101112131415161718192021222324välj max(top10) top10,Max(Top100) Top100,max(top1000) Top100från(välj count(*) top10,null Top100,null top1000från produktionen.,ProductModelWHERE ProductModelID < 10UNIONSELECT NULL,COUNT(*),NULLFROM Production.ProductModelWHERE ProductModelID > 11AND ProductModelID < 100UNIONSELECT NULL,NULL,COUNT(*)FROM Production.,ProductModeldär ProductModelID > 101) T;
så här använder du SQL union med grupp och har klausuler
följande exempel använder unionsoperatören för att kombinera resultatet av tabellen som alla har den villkorliga klausulen definierad med grupp av och med klausul.
efternamn tolkas genom att ange villkoren i Ha-klausulen.
följande exempel baseras på regel 5.,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
välj pp.efternamn,
COUNT(*) repetedtwice,
0 Repetedthrice
från personen.Person SOM pp
GÅ med i HumanResources.Anställd SOM e PÅ e.BusinessEntityID = pp.,BusinessEntityID
: en GRUPP AV pp.efternamn
med COUNT(*) = 2
UNION
välj pp.Efternamn,
0,
COUNT(*) NTOZRANGE
från Person.Person SOM pp
GÅ med i HumanResources.Anställd SOM e PÅ e.BusinessEntityID = pp.BusinessEntityID
: en GRUPP AV pp.,Efternamn
med COUNT(*) > 2;
|
Vi kan se att efternamnen härleds till två olika kolumner med hjälp av unionsoperatören
det är allt för nu…
sammanfattning
hittills har vi tagit upp olika tillgängliga alternativ och regler för att använda uppsatta operatörer och förstå när de ska användas. När man bestämmer om man ska använda Union vs Union alla finns det några punkter att överväga., Använd Union All om du vet att resultatuppsättningarna från flera frågor inte överlappar eller genererar dubbletter och kom ihåg att om du behöver använda parenteser kan du göra det. Du kan också svänga och omvandla utgången.
se bara till att dina datatyper stämmer överens och om du behöver göra en beställning genom att göra det i slutet efter att du har kört alla dessa inställda frågor. Av naturen, när det gäller unionen mot Unionen alla, Unionen alla är snabbare än unionen; som Union operatörer drabbas ytterligare overhead för att eliminera dubbletter.
Jag hoppas att du haft den här artikeln på SQL Union-operatören., Tveka inte att ställa några frågor i kommentarerna nedan.
- författare
- Senaste inlägg
min specialitet ligger i att designa & implementera lösningar för hög tillgänglighet och plattformsoberoende DB-migrering., Tekniken som för närvarande arbetar med är SQL Server, PowerShell, Oracle och MongoDB.,
Visa alla inlägg av Prashanth Jayaram
- en snabb översikt över databasrevision i SQL – Januari 28, 2021
- hur du ställer in Azure Data Sync mellan Azure SQL-databaser och lokaler SQL Server – januari 20, 2021
- hur du utför Azure SQL – databas import/export operationer med PowerShell-januari 14, 2021