combineer tabelrijen met UNION
In deze les gaan we het hebben over de UNION-clausule. U kunt de UNION-clausule gebruiken om tabelrijen van twee verschillende query ‘ s te combineren tot één resultaat. In tegenstelling tot een join, die kolommen uit verschillende tabellen combineert, combineert een union rijen uit verschillende tabellen. Hier is een illustratie van hoe een vereniging eruit ziet
Unions
alle voorbeelden voor deze les zijn gebaseerd op Microsoft SQL Server Management Studio en de AdventureWorks2012 database., U kunt aan de slag met behulp van deze gratis tools met behulp van mijn gids aan de slag met behulp van SQL Server.
In SQL ziet dit statement eruit als
SELECT columnlistFROM table1UNIONSELECT columnlistFROM table2
om twee tabellen samen te voegen zijn er een aantal vereisten:
- het aantal kolommen moet hetzelfde zijn voor beide geselecteerde statements.
- de kolommen moeten, in volgorde, van hetzelfde gegevenstype zijn.
wanneer rijen worden gecombineerd, worden dubbele rijen geëlimineerd. Als u alle rijen uit beide selecteert, selecteert u de resultaten van het statement met het trefwoord alle.,
voorbeelden
Unie twee tabellen
stel dat u werd gevraagd een lijst van alle AdventureWorks2012 productcategorieën en subcategorieën op te geven. Om dit te doen kunt u twee afzonderlijke queries schrijven en twee afzonderlijke resultaten leveren, zoals twee spreadsheets, of u kunt de UNION-clausule gebruiken om één gecombineerd resultaat te leveren:
SELECT C.NameFROM Production.ProductCategory AS CUNION ALLSELECT S.NameFROM Production.ProductSubcategory AS S
van dit krijg je een gecombineerde lijst met namen, maar stel dat je wilde weten welke naam categorieën versus subcategorieën waren., Om dit te doen kunt u een nieuwe kolom toevoegen die het categorietype aangeeft:
SELECT 'category', C.NameFROM Production.ProductCategory AS CUNION ALLSELECT 'subcategory', S.NameFROM Production.ProductSubcategory AS S
Union versus Union All
het verschil tussen UNION en UNION ALL is dat met UNION een unieke reeks rijen van het union-resultaat retourneert; terwijl UNION ALL elke rij retourneert.
voorbeeld:
SELECT person.Address.CityFROM person.Address
geeft 19614 rijen terug.
SELECT person.Address.CityFROM person.AddressUNIONSELECT person.Address.CityFROM person.Address
geeft 575 rijen terug, wat het aantal afzonderlijke stadsnamen in de tabel is. Het uitvoeren van UNION All geeft de volledige set stadsnamen tweemaal terug:
SELECT person.Address.CityFROM person.AddressUNION ALLSELECT person.Address.CityFROM person.Address
het geeft 39228 rijen terug.,
zoals u kunt zien is er een groot verschil met het gebruik van de all qualifier. Indien niet gebruikt, zijn de resultaten verschillende waarden. Duplicaten worden niet alleen tussen rijen uit elk resultaat verwijderd, maar ook van binnenuit.
Union three tables
stel dat het management een gecombineerde lijst wil van personen, leveranciers en opslagenamen geïdentificeerd door bron.
om dit te doen maken we drie aparte queries en gebruiken vervolgens de union-clausule om ze samen te voegen. Wij bestellen dan de lijst.,
op het eerste gezicht kunt u denken dat de volgorde per clausule alleen van toepassing is op het laatste SELECT statement, maar in feite is het van toepassing op alle resultaten die door de Unie worden geretourneerd. De database-engine eerst verwerken alle vakbond verklaringen dan de volgorde door.
Als u twijfelt over de verwerkingsvolgorde, kunt u haakjes “()” gebruiken om de volgorde van evaluatie te controleren, net zoals u dat kunt met expressies. Hier is hoe het statement er in het algemeen uit zou zien met haakjes: