kombinera tabellrader med UNION
i den här lektionen kommer vi att prata om unionsklausulen. Du kan använda UNIONSKLAUSULEN för att kombinera tabellrader från två olika frågor till ett resultat. Till skillnad från en koppling, som kombinerar kolumner från olika tabeller, kombinerar en union rader från olika tabeller. Här är en illustration av hur en UNION ser ut
fackföreningar
alla exempel för den här lektionen är baserade på Microsoft SQL Server Management Studio och AdventureWorks2012-databasen., Du kan komma igång med dessa gratis verktyg med hjälp av min Guide komma igång med SQL Server.
i SQL ser detta uttalande ut som
SELECT columnlistFROM table1UNIONSELECT columnlistFROM table2
för att union två tabeller finns det ett par krav:
- antalet kolumner måste vara samma för båda välj uttalanden.
- kolumnerna måste i ordning vara av samma datatyp.
När rader kombineras elimineras dubbla rader. Om du vill behålla alla rader från båda välj satsens resultat använd alla sökord.,
exempel
Union två tabeller
anta att du ombads att tillhandahålla en lista över alla AdventureWorks2012 produktkategorier och underkategorier. För att göra detta kan du skriva två separata frågor och ge två separata resultat, till exempel två kalkylblad, eller så kan du använda unionsklausulen för att leverera ett kombinerat resultat:
SELECT C.NameFROM Production.ProductCategory AS CUNION ALLSELECT S.NameFROM Production.ProductSubcategory AS S
från detta får du en kombinerad lista med namn, men antar att du ville veta vilket namn som var kategorier jämfört med underkategorier., För att göra detta kan du lägga till en ny kolumn som anger kategoritypen:
SELECT 'category', C.NameFROM Production.ProductCategory AS CUNION ALLSELECT 'subcategory', S.NameFROM Production.ProductSubcategory AS S
Union versus Union All
skillnaden mellan UNION och UNION är att med UNION returnerar en unik uppsättning rader från unionsresultatet.
exempel:
SELECT person.Address.CityFROM person.Address
returnerar 19614 rader.
SELECT person.Address.CityFROM person.AddressUNIONSELECT person.Address.CityFROM person.Address
returnerar 575 rader, vilket är antalet olika stadsnamn i tabellen. Running UNION ALL returnerar hela uppsättningen stadsnamn två gånger:
SELECT person.Address.CityFROM person.AddressUNION ALLSELECT person.Address.CityFROM person.Address
den returnerar 39228 rader.,
som du kan se är det stor skillnad med att använda all qualifier. När de inte används är resultaten tydliga värden. Dubbletter elimineras inte bara mellan rader från varje resultat, men också inifrån.
Union tre tabeller
Antag att ledningen vill ha en kombinerad lista över personer, leverantörer och butiksnamn identifierade efter källa.
för att göra detta skapar vi tre separata frågor och använder sedan unionsklausulen för att sätta ihop dem. Vi kommer då att beställa listan.,
vid första anblicken kanske du tror att ORDER BY-klausulen endast skulle gälla för det senaste select-uttalandet, men i själva verket gäller det för alla resultat som returneras av unionen. Databasmotorn behandlar först alla unionens uttalanden och sedan ordern efter.
om du är osäker på bearbetningsordningen kan du använda parentes ”()” för att styra utvärderingsordningen ungefär som du kan med uttryck. Här är vad uttalandet i allmänhet skulle se ut med parentes: