Wat is het verschil tussen UNION en UNION ALL?

Wat is het verschil tussen UNIONen UNION ALL?


Antwoord 1, autoriteit 100%

UNIONverwijdert dubbele records (waarbij alle kolommen in de resultaten hetzelfde zijn), UNION ALLniet.

Er is een prestatiehit bij het gebruik van UNIONin plaats van UNION ALL, aangezien de databaseserver extra werk moet doen om de dubbele rijen te verwijderen, maar meestal wilt u dit niet de duplicaten (vooral bij het ontwikkelen van rapporten).

UNION Voorbeeld:

SELECT 'foo' AS bar UNION SELECT 'foo' AS bar

Resultaat:

+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)

UNION ALL voorbeeld:

SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar

Resultaat:

+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)

Antwoord 2, autoriteit 16%

Zowel UNION als UNION ALL voegen het resultaat van twee verschillende SQL’s samen. Ze verschillen in de manier waarop ze met duplicaten omgaan.

  • UNION voert een DISTINCT uit op de resultatenset, waarbij dubbele rijen worden geëlimineerd.

  • UNION ALL verwijdert geen duplicaten en is daarom sneller dan UNION.

Opmerking:Bij het gebruik van deze opdrachten moeten alle geselecteerde kolommen van hetzelfde gegevenstype zijn.

Voorbeeld: als we twee tabellen hebben, 1) Medewerker en 2) Klant

  1. Werknemerstabelgegevens:

  1. Klantentabelgegevens:

  1. UNION-voorbeeld (alle dubbele records worden verwijderd):

  1. UNION ALL Voorbeeld (het voegt alleen records samen, elimineert geen duplicaten, dus het is sneller dan UNION):


Antwoord 3, autoriteit 3%

UNIONverwijdert duplicaten, terwijl UNION ALLdat niet doet.

Om duplicaten te verwijderen, moet de resultatenset worden gesorteerd, en dit kanvan invloed zijn op de prestaties van de UNION, afhankelijk van de hoeveelheid gegevens die wordt gesorteerd en de instellingen van verschillende RDBMS parameters ( Voor Oracle PGA_AGGREGATE_TARGETmet WORKAREA_SIZE_POLICY=AUTOof SORT_AREA_SIZEen SOR_AREA_RETAINED_SIZEindien WORKAREA_SIZE_POLICY=MANUAL).

In principe is het sorteren sneller als het in het geheugen kan worden uitgevoerd, maar hetzelfde voorbehoud over de hoeveelheid gegevens is van toepassing.

Als u gegevens wilt retourneren zonder duplicaten, moetu natuurlijk UNION gebruiken, afhankelijk van de bron van uw gegevens.

Ik zou hebben gereageerd op de eerste post om de opmerking “is veel minder presterend” te kwalificeren, maar ik heb onvoldoende reputatie (punten) om dit te doen.


Antwoord 4, autoriteit 2%

In ORACLE: UNION ondersteunt geen BLOB (of CLOB) kolomtypes, UNION ALL wel.


Antwoord 5

Other episodes