Forberedelse til SQL-intervju · leksjon

INTERSECT og EXCEPT for sammenligning

Finn felles og forskjellige rader mellom to datasett.

Leksjon 3 av 413 trinn

INTERSECT og EXCEPT for sammenligning er en gratis leksjon i Forberedelse til SQL-intervju på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Forberedelse til SQL-intervju, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Forberedelse til SQL-intervju inneholder totalt 4 leksjoner.

Sammenligningsoperatorene

INTERSECT og EXCEPT er mengdeoperatorene du bruker til å sammenligne to resultatsett, i stedet for å slå dem sammen. Intervjuere bruker dem i spørsmål som «hvilke kunder finnes i begge listene» eller «hvilke rader finnes i A, men ikke i B».

  • INTERSECT = rader som finnes i begge spørringene.
  • EXCEPT = rader i den første spørringen, men ikke i den andre.

Hva INTERSECT returnerer

INTERSECT returnerer bare de distinkte radene som finnes i begge resultatsettene. En rad må samsvare i hver eneste kolonne for å regnes som felles.

I likhet med UNION fjerner vanlig INTERSECT duplikater og returnerer hver felles rad én gang.

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

Hva EXCEPT returnerer

EXCEPT (kalt MINUS i Oracle) returnerer de distinkte radene fra den første spørringen som ikke finnes i den andre. Operatoren er retningsbestemt: A EXCEPT B er forskjellig fra B EXCEPT A.

Dette er den naturlige måten å finne poster som mangler i et annet datasett.

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 intervjupunkt er at EXCEPT er retningsbestemt. Hvis du bytter om på de to spørringene, svarer du på et annet spørsmål.

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

INTERSECT er derimot symmetrisk: A INTERSECT B er lik B INTERSECT A.

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

Duplikater og standarden DISTINCT

Vanlig INTERSECT og EXCEPT arbeider med distinkte rader, akkurat som UNION. Dupliserte inndatarader slås sammen før sammenligningen.

Noen databaser støtter INTERSECT ALL og EXCEPT ALL, som tar hensyn til antallet forekomster, men disse er mindre vanlige. Hvis intervjueren ikke sier ALL, bør du anta semantikk med distinkte rader.

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

Sammenligning av hele rader for likhet

Begge operatorene sammenligner hele rader på tvers av alle valgte kolonner. To rader er like bare når hver kolonne samsvarer. Dette gjør operatorene svært godt egnet til å oppdage om to tabeller inneholder identiske data.

Velg hele settet med kolonner du bryr deg om, slik at sammenligningen blir meningsfull.

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 for differanse mellom tabeller i begge retninger

Hvis du vil kontrollere om to tabeller er identiske, kjører du EXCEPT i begge retninger og kombinerer forskjellene. Hvis det kombinerte resultatet er tomt, samsvarer tabellene nøyaktig.

Dette er et klassisk intervjusvar ved datavalidering i forbindelse med migrering og avstemmingskontroller.

(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

Hvordan NULL behandles

Inne i mengdeoperasjoner behandles to NULL-verdier som like ved matching. Dette er forskjellig fra den vanlige regelen der NULL = NULL blir UNKNOWN.

En rad med NULL i én kolonne vil derfor samsvare med en annen rad som har NULL på samme posisjon. Intervjuere tester dette fordi det strider mot de vanlige reglene for sammenligning.

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

Operatorprioritet mellom mengdeoperatorer

Når du blander operatorer, binder INTERSECT vanligvis sterkere enn UNION og EXCEPT i SQL-standarden. For å unngå tvetydighet bør du sette delene i parentes.

Hvis du sier at du bruker parenteser for å gjøre evalueringsrekkefølgen eksplisitt, viser du modenhet i et intervju.

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

Velge INTERSECT/EXCEPT eller JOIN

INTERSECT og EXCEPT er kompakte og sammenligner hele rader med innebygd deduplisering. JOIN er mer fleksibelt: Du kan returnere ekstra kolonner og selv velge hvordan du håndterer duplikater.

Foretrekk mengdeoperatorene når spørsmålet ganske enkelt er «hvilke rader er felles eller mangler». Bytt til JOIN når du trenger kolonner fra begge sider, eller når SQL-dialekten mangler disse operatorene.

Slik henger det sammen

En oppsummering du kan gjengi, er: "INTERSECT returnerer rader i begge spørringene og er symmetrisk; EXCEPT returnerer rader i den første, men ikke i den andre, og er retningsbestemt. Begge sammenligner hele rader, behandler NULL som like verdier og returnerer som standard distinkte resultater."

Legg til trikset med EXCEPT i begge retninger for å finne forskjeller ved dataavstemming, så dekker du emnet fullstendig.

Kort kontroll

Du ønsker kundene som la inn en bestilling i 2023, men IKKE la inn en i 2024 (kunder som har falt fra).

Oppsummering

Viktigste punkter:

  • INTERSECT = rader i begge spørringene; symmetrisk.
  • EXCEPT (Oracle: MINUS) = rader i den første spørringen, men ikke i den andre; retningsbestemt.
  • Begge sammenligner hele rader og returnerer som standard distinkte resultater.
  • NULL behandles som lik ved matching.
  • EXCEPT i begge retninger gir en fullstendig differanse mellom tabeller.
Gratis å komme i gang

Lær deg SQL med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
30
Leksjoner
120

Ofte stilte spørsmål

Er leksjonen «INTERSECT og EXCEPT for sammenligning» gratis?

Ja – hele teksten i «INTERSECT og EXCEPT for sammenligning» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Forberedelse til SQL-intervju-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Forberedelse til SQL-intervju inneholder totalt 4 leksjoner.

Hva lærer jeg i «INTERSECT og EXCEPT for sammenligning»?

Finn felles og forskjellige rader mellom to datasett. Du øver på Forberedelse til SQL-intervju med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Forberedelse til SQL-intervju?

Ingen tidligere erfaring er nødvendig. Forberedelse til SQL-intervju på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «INTERSECT og EXCEPT for sammenligning»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Forberedelse til SQL-intervju-leksjonen?

Ja. Alle Forberedelse til SQL-intervju-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. UNION versus UNION ALL
  2. Antall kolonner og typekompatibilitet
  3. INTERSECT og EXCEPT for sammenligning
  4. Etterligne mengdeoperasjoner med joiner
← Tilbake til Forberedelse til SQL-intervju