Forberedelse til kodeinterviews · Lektion

INTERSECT og EXCEPT til sammenligning

Find fælles og forskellige rækker mellem to datasæt

Lektion 3 af 413 trin

INTERSECT og EXCEPT til sammenligning er en gratis Forberedelse til kodeinterviews-lektion på CoddyKit. Dette er lektion 3 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.

Sammenligningsoperatorerne

INTERSECT og EXCEPT er mængdeoperatorer til at sammenligne to resultatsæt i stedet for at sammenflette dem. Interviewere bruger dem i spørgsmål som "hvilke kunder findes på begge lister" eller "hvilke rækker findes i A, men ikke i B".

  • INTERSECT = rækker, der findes i begge forespørgsler.
  • EXCEPT = rækker i den første forespørgsel, men ikke i den anden.

Hvad INTERSECT returnerer

INTERSECT returnerer kun de særskilte rækker, der forekommer i begge resultatsæt. En række skal matche i alle kolonner for at tælle som fælles.

Som UNION fjerner almindelig INTERSECT dubletter og returnerer hver fælles række én gang.

SELECT customer_id FROM orders_2023
INTERSECT
SELECT customer_id FROM orders_2024;
-- customers who ordered in BOTH years

Hvad EXCEPT returnerer

EXCEPT (kaldet MINUS i Oracle) returnerer de særskilte rækker fra den første forespørgsel, som ikke forekommer i den anden. Operatoren er retningsbestemt: A EXCEPT B er forskellig fra B EXCEPT A.

Det er den naturlige måde at finde poster, der mangler i et andet datasæt.

SELECT customer_id FROM orders_2023
EXCEPT
SELECT customer_id FROM orders_2024;
-- ordered in 2023 but NOT in 2024 (churned)

EXCEPT er ikke symmetrisk

Et populært punkt i jobsamtaler er, at EXCEPT er retningsbestemt. Hvis du bytter om på de to forespørgsler, besvarer du et andet spørgsmål.

  • A EXCEPT B = findes i A, men ikke i B.
  • B EXCEPT A = findes i B, men ikke i A.

INTERSECT er derimod symmetrisk: A INTERSECT B er lig med B INTERSECT A.

-- new customers in 2024 (not seen in 2023):
SELECT customer_id FROM orders_2024
EXCEPT
SELECT customer_id FROM orders_2023;

Dubletter og standarden DISTINCT

Standardversionerne af INTERSECT og EXCEPT arbejder med særskilte rækker ligesom UNION. Dublerede inputrækker samles til én række før sammenligningen.

Nogle databaser understøtter INTERSECT ALL og EXCEPT ALL, som bevarer antallet af forekomster, men de er mindre almindelige. Hvis intervieweren ikke siger ALL, skal du antage semantik med særskilte rækker.

SELECT city FROM a
INTERSECT ALL
SELECT city FROM b;
-- multiplicity-aware (Postgres supports this; MySQL 8+ too)

Sammenligning af hele rækker for lighed

Begge operatorer sammenligner hele rækker på tværs af alle valgte kolonner. To rækker er kun ens, når alle kolonner matcher. Det gør operatorerne perfekte til at afgøre, om to tabeller indeholder identiske data.

Vælg hele det sæt kolonner, du er interesseret i, så sammenligningen bliver meningsfuld.

SELECT id, name, email FROM prod_users
EXCEPT
SELECT id, name, email FROM staging_users;
-- rows in prod that differ from / are missing in staging

Mønsteret med tovejsforskel mellem tabeller

Hvis du vil kontrollere, om to tabeller er identiske, skal du køre EXCEPT i begge retninger og kombinere forskellene. Hvis det kombinerede resultat er tomt, matcher tabellerne hinanden fuldstændigt.

Det er et klassisk svar i jobsamtaler om datavalidering ved migrering og afstemningskontroller.

(SELECT * FROM table_a EXCEPT SELECT * FROM table_b)
UNION ALL
(SELECT * FROM table_b EXCEPT SELECT * FROM table_a);
-- empty result => tables are identical

Sådan behandles NULL-værdier

Inde i mængdeoperationer behandles to NULL-værdier som ens ved matchning. Det adskiller sig fra den normale situation, hvor NULL = NULL giver UNKNOWN.

En række med NULL i én kolonne matcher derfor en anden række med NULL på samme position. Interviewere tester dette, fordi det strider mod de almindelige sammenligningsregler.

-- (1, NULL) INTERSECT (1, NULL) -> returns (1, NULL)
SELECT id, region FROM a
INTERSECT
SELECT id, region FROM b;

Operatorprioritet mellem mængdeoperatorer

Når du blander operatorer, binder INTERSECT typisk stærkere end UNION og EXCEPT i SQL-standarden. For at undgå tvetydighed skal du omslutte grenene med parenteser.

Hvis du siger, at du bruger parenteser til at gøre evalueringsrækkefølgen tydelig, viser det modenhed i en jobsamtale.

(SELECT id FROM a EXCEPT SELECT id FROM b)
UNION
(SELECT id FROM c);

Valg mellem INTERSECT/EXCEPT og joins

INTERSECT og EXCEPT er korte og sammenligner hele rækker med indbygget fjernelse af dubletter. Joins er mere fleksible (du kan returnere ekstra kolonner og selv vælge, hvordan dubletter skal håndteres).

Foretræk mængdeoperatorerne, når spørgsmålet udelukkende er "hvilke rækker er fælles eller mangler". Skift til joins, når du har brug for kolonner fra begge sider, eller når SQL-dialekten ikke har disse operatorer.

Sådan hænger det sammen

En opsummering, du kan gengive: "INTERSECT returnerer rækker i begge forespørgsler og er symmetrisk; EXCEPT returnerer rækker i den første, men ikke i den anden, og er retningsbestemt. Begge sammenligner hele rækker, behandler NULL-værdier som ens og returnerer som standard særskilte resultater."

Tilføj tricket med en tovejs EXCEPT-forskel ved opfølgende spørgsmål om dataafstemning, så dækker du emnet fuldstændigt.

Hurtigt tjek

Du ønsker de kunder, der afgav en ordre i 2023, men IKKE afgav en ordre i 2024 (kunder, der er forsvundet).

Opsummering

Vigtigste pointer:

  • INTERSECT = rækker i begge forespørgsler; symmetrisk.
  • EXCEPT (Oracle: MINUS) = rækker i den første forespørgsel, men ikke i den anden; retningsbestemt.
  • Begge sammenligner hele rækker og returnerer som standard særskilte resultater.
  • NULL-værdier behandles som ens ved matchning.
  • EXCEPT i begge retninger giver en komplet forskel mellem tabeller.
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 “INTERSECT og EXCEPT til sammenligning” gratis?

Ja — hele teksten til “INTERSECT og EXCEPT til sammenligning” 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 “INTERSECT og EXCEPT til sammenligning”?

Find fælles og forskellige rækker mellem to datasæt 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 3 af 4.

Hvor lang tid tager lektionen “INTERSECT og EXCEPT til sammenligning”?

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