door: Greg Robidoux / bijgewerkt: 2019-10-29 / Comments (4) / gerelateerd: 1 | 2 | 3 | 4 | 5 | Meer > JOIN Tables
probleem
soms is het nodig om gegevens uit meerdere tabellen of weergaven te combineren in één uitgebreide dataset. Dit kan zijn voor tabellen met vergelijkbare gegevens binnen dezelfde database of misschien is er een noodzaak om vergelijkbare gegevens te combineren in databases of zelfs op verschillende servers.
In deze tip zullen we een blik werpen op het gebruik van UNION vs.UNIONALL commando ‘ s en hoe ze verschillen.,
oplossing
In SQL Server hebt u de mogelijkheid om meerdere datasets te combineren tot één uitgebreide dataset door gebruik te maken van de UNION of UNION ALL operators. Er is een groot verschil in hoe deze werken evenals de uiteindelijke resultaatset die wordt geretourneerd, maar in principe voegen deze commands meerdere datasets die vergelijkbare structuren hebben samen in één gecombineerde dataset.
UNION
Deze bewerking zal u toelaten om multipledatasets samen te voegen tot één dataset en zal alle bestaande duplicaten verwijderen. Basicallyhet is het uitvoeren van een verschillende operatie over alle kolommen in de resultatenreeks.,
UNION ALL
met deze bewerking kunt u opnieuw meerdere datasets samenvoegen tot één dataset, maar het verwijdert geen dubbele rijen.Omdat dit geen dubbele rijen verwijdert, is dit proces sneller, maar als u geen dubbele records wilt, moet u in plaats daarvan de UNION-operator gebruiken.,h query moeten hetzelfde aantal kolommen
Tip: Als je niet de exacte dezelfde kolommen in alle query ‘ s gebruiken een standaard waarde of een NULL-waarde, zoals:
SELECT firstName, lastName, company FROM businessContactsUNIONSELECT firstName, lastName, NULL FROM nonBusinessContactsorSELECT firstName, lastName, createDate FROM businessContactsUNION ALLSELECT firstName, lastName, getdate() FROM nonBusinessContacts
UNIE vs., UNION ALL Examples
laten we eens kijken naar een paar eenvoudige voorbeelden van hoe deze commando ‘ s werken en hoe ze verschillen. Zoals je zult zien zullen de uiteindelijke resultsets verschillen, maar er is interessante informatie over hoe SQL Server het proces daadwerkelijk voltooit.
UNION ALL
In dit eerste voorbeeld gebruiken we de UNION ALL operator tegen de Employeetable uit de AdventureWorks database. Dit is waarschijnlijk niet iets wat je zou willen, maar dit helpt de verschillen van deze twee operators illustreren.
Er zijn 290 rijen in tabel dbo.Werknemer.,
SELECT * FROM HumanResources.EmployeeUNION ALLSELECT * FROM HumanResources.EmployeeUNION ALLSELECT * FROM HumanResources.Employee
wanneer deze query wordt uitgevoerd, heeft de resultaatset 870 rijen. Dit zijn de 290 rijen3 keer geretourneerd. De data wordt gewoon een dataset samengesteld bovenop de andere dataset.
Hier is het uitvoeringsplan voor deze query. We kunnen zien dat de tabel 3 keer werd opgevraagd en SQL Server deed een aaneenschakeling stap om alle gegevens samen te voegen.
UNION
In dit volgende voorbeeld gebruiken we de UNION operator tegen de Employee tableagain uit de AdventureWorks database.,
SELECT * FROM HumanResources.EmployeeUNIONSELECT * FROM HumanResources.EmployeeUNIONSELECT * FROM HumanResources.Employee
wanneer deze query wordt uitgevoerd, heeft de resultaatset 290 rijen. Ook al combineerden we de gegevens drie keer de vakbond operator verwijderde de dubbele records en er forereturns alleen de 290 unieke rijen.
Hier is het uitvoeringsplan voor deze query. We kunnen zien dat SQL Server eerst queried2 van de tabellen, dan deed een Merge Join operatie om de eerste twee tablets te combineren en dan deed het een andere Merge Join samen met het opvragen van de derde tabel in de query.,We zien dus dat er veel meer werk moest worden verricht om dit resultaat te bereiken dan in de hele Unie.
UNION vs.UNION Alle voorbeelden met Sort op geclusterde Index kolom
als we dit een stap verder gaan en een soort van de gegevens doen met behulp van de Geclusterdeindex kolom krijgen we deze uitvoeringsplannen. Hieruit kunnen we zien dat het uitvoeringsplan dat SQL Server gebruikt identiek is voor elk van deze operaties, ook al zullen de eindresultaatsets nog steeds 870 rijen voor de UNION ALL en 290 rijen voor de UNION bevatten.,
UNION ALL execution plan with sort on clusterde index column
UNION execution plan with sort on clusterde index column
UNION vs.UNION Alle voorbeelden met Sort op niet-geïndexeerde kolom
Hier is een ander voorbeeld dat hetzelfde doet, maar dit keer een soort doet op een geïndexeerde kolom. Zoals je kunt zien zijn de uitvoeringsplannen weer identiek voor deze twee queries, maar deze keer worden in plaats van een MERGE JOIN, een CONCATENATION en SORToperations gebruikt.,
- Neem een kijkje op deze andere tips die nuttig kunnen zijn voor het gebruik van de unie de operators
- het Vergelijken van Meerdere Datasets met de INTERSECTand van EXCEPT operatoren
- SQL Server-Vier-deel naamgeving
- Vergelijk SQL Server Resultaten van de Twee Query ‘ s via UNION
Laatst Bijgewerkt: 2019-10-29
Over de auteur
al mijn tips
weergeven
Leave a Reply