Forberedelse til kodeinterviews · Lektion

UNION kontra UNION ALL

Forskellen på fjernelse af dubletter og ydeevne, og hvorfor UNION ALL som regel er tilsigtet

Lektion 1 af 413 trin

UNION kontra UNION ALL er en gratis Forberedelse til kodeinterviews-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Forberedelse til kodeinterviews, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Forberedelse til kodeinterviews-kurset indeholder 4 lektioner i alt.

Hvorfor interviewere spørger om UNION

Mængdeoperationer lægger én resultatmængde lodret oven på en anden. UNION og UNION ALL er de første mængdeoperatorer, interviewere typisk griber til, fordi forskellen mellem dem kan besvares på én linje og afslører, om du forstår omkostningerne.

Spørgsmålet formuleres næsten altid sådan: "Hvad er forskellen mellem UNION og UNION ALL, og hvilken bør du bruge?" Et stærkt svar nævner deduplikering, sortering og ydeevne i samme åndedrag.

Hvad UNION gør

UNION kombinerer rækkerne fra to forespørgsler i én resultatmængde og fjerner derefter dublerede rækker. To rækker er kun dubletter, hvis alle kolonner er ens.

For at fjerne dubletter skal databasemotoren sortere eller hash'e alle de kombinerede rækker, hvilket kræver reelt arbejde. UNION returnerer en mængde i matematisk forstand: ingen gentagelser.

SELECT city FROM customers
UNION
SELECT city FROM suppliers;

Hvad UNION ALL gør

UNION ALL sammenkæder de to resultatmængder og beholder alle rækker, inklusive dubletter. Den udfører ingen deduplikering og derfor heller ingen sortering eller hashing til dette formål.

Fordi den springer deduplikeringstrinnet over, er UNION ALL næsten altid hurtigere og det korrekte valg, når du ved, at rækkerne ikke kan overlappe, eller når dubletter faktisk er ønskede.

SELECT city FROM customers
UNION ALL
SELECT city FROM suppliers;

Forskellen i ydeevne

Interviewets hovedpointe: UNION ALL er billigere, fordi den aldrig deduplikerer. UNION skal sammenligne hver kombinerede række med alle andre for at fjerne gentagelser.

  • UNION = UNION ALL + et implicit DISTINCT-trin.
  • På store resultatmængder kan dette DISTINCT-trin dominere forespørgslens omkostning.

Hvis du ikke har brug for at fjerne dubletter, spilder du CPU og hukommelse ved at vælge UNION.

Et gennemgået eksempel med dubletter

Antag, at begge forespørgsler kan returnere rækken 'Paris'. Med UNION får du én Paris. Med UNION ALL får du Paris to gange.

Interviewere elsker at bede dig forudsige antallet af rækker. Forestil dig altid først den rå sammenkædning, og spørg derefter: fjerner operatoren gentagelser?

-- customers.city: Paris, Lyon
-- suppliers.city: Paris, Nice
-- UNION     -> Paris, Lyon, Nice   (3 rows)
-- UNION ALL -> Paris, Lyon, Paris, Nice (4 rows)

Dubletter defineres på tværs af alle kolonner

En almindelig faldgrube: To rækker er kun dubletter, hvis alle valgte kolonner er ens. Tilføj én kolonne med en anden værdi, og rækkerne er ikke længere dubletter, så UNION beholder dem begge.

Det er derfor, at SELECT id, city ofte returnerer flere rækker end SELECT city med UNION, selv når de samme tabeller bruges.

SELECT id, city FROM customers
UNION
SELECT id, city FROM suppliers;
-- ids differ -> few or no duplicates removed

Sortering af det kombinerede resultat

Du kan ikke placere ORDER BY på de enkelte grene; den gælder for det samlede resultat og skal stå én gang helt til sidst.

En interviewer kan spørge, hvor ORDER BY skal placeres. Svaret er: én enkelt ORDER BY efter den sidste forespørgsel, der henviser til outputkolonnerne ved navn eller position.

SELECT city FROM customers
UNION ALL
SELECT city FROM suppliers
ORDER BY city;

Kolonnenavne kommer fra den første forespørgsel

Når du refererer til kolonner i den afsluttende ORDER BY, skal du bruge navnene (eller aliaserne) fra den første SELECT. Kolonnenavnene i den anden forespørgsel ignoreres ved navngivning af outputtet.

Det er vigtigt, når grenene navngiver deres kolonner forskelligt. Giv den første gren aliaser for at styre outputoverskriften.

SELECT city AS location FROM customers
UNION ALL
SELECT town FROM suppliers
ORDER BY location;

Hvornår UNION er det rigtige valg

Brug kun UNION, når overlappende rækker reelt kan forekomme, og du ønsker hver særskilt række én gang. Eksempler er at sammenflette to kontaktlister, hvor den samme person kan forekomme i begge, eller at opbygge en deduplikeret liste med særskilte værdier fra flere kilder.

Hvis du kan garantere, at kilderne ikke overlapper, giver UNION ALL det samme resultat hurtigere.

SELECT email FROM web_signups
UNION
SELECT email FROM store_signups;
-- one row per distinct email across both

Hvornår UNION ALL er det rigtige valg

Brug UNION ALL, når dubletter ikke kan forekomme, når dubletter har betydning, eller når du efterfølgende vil aggregere. Et klassisk mønster er at stable månedlige partitionstabeller, der ikke indeholder de samme rækker.

Tip til jobsamtaler: Sig, at UNION ALL er standardvalget, og at du kun skifter til UNION, når fjernelse af dubletter faktisk er nødvendig.

SELECT * FROM sales_2023
UNION ALL
SELECT * FROM sales_2024;

Sådan samles det hele

Et velovervejet svar til en jobsamtale lyder sådan: "UNION fjerner dublerede rækker, hvilket kræver en sortering eller en hashberegning; UNION ALL beholder alt og er hurtigere. Begge kræver det samme antal kolonner og kompatible typer, og en eventuel ORDER BY placeres én gang til sidst. Jeg vælger som udgangspunkt UNION ALL, medmindre fjernelse af dubletter er nødvendig."

Den ene sætning viser både korrekthed og forståelse for ydeevne.

Hurtigt tjek

Afprøv, hvor godt du forstår forskellen på UNION og UNION ALL.

Opsummering

Vigtigste pointer:

  • UNION = sammenfletning + fjernelse af dublerede rækker (implicit DISTINCT, ekstra omkostning).
  • UNION ALL = sammenfletning, hvor alt bevares; hurtigere og det fornuftige standardvalg.
  • Dubletter kræver, at alle kolonner er ens.
  • Én enkelt ORDER BY placeres helt til sidst og bruger den første forespørgsels kolonnenavne.

Vælg som udgangspunkt UNION ALL, og skift kun til UNION, når fjernelse af dubletter reelt er nødvendig.

Gratis at komme i gang

Lær Forberedelse til kodeinterviews med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
90
Lektioner
360

Ofte stillede spørgsmål

Er lektionen “UNION kontra UNION ALL” gratis?

Ja — hele teksten til “UNION kontra UNION ALL” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Forberedelse til kodeinterviews-kurset, skal du opgradere til CoddyKit PRO. Forberedelse til kodeinterviews-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “UNION kontra UNION ALL”?

Forskellen på fjernelse af dubletter og ydeevne, og hvorfor UNION ALL som regel er tilsigtet Du øver dig i Forberedelse til kodeinterviews med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Forberedelse til kodeinterviews?

Der kræves ingen tidligere erfaring. Forberedelse til kodeinterviews på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “UNION kontra UNION ALL”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Forberedelse til kodeinterviews-lektion?

Ja. Alle Forberedelse til kodeinterviews-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. UNION kontra UNION ALL
  2. Kompatibilitet mellem antal kolonner og datatyper
  3. INTERSECT og EXCEPT til sammenligning
  4. Efterligning af mængdeoperationer med joins
← Tilbage til Forberedelse til kodeinterviews