Forberedelse til kodeinterviews · Lektion

Kompatibilitet mellem antal kolonner og datatyper

De regler, resultatsæt skal opfylde for at kunne kombineres, samt almindelige fejl ved uoverensstemmelser

Lektion 2 af 413 trin

Kompatibilitet mellem antal kolonner og datatyper er en gratis Forberedelse til kodeinterviews-lektion på CoddyKit. Dette er lektion 2 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.

Kompatibilitetsreglerne, som interviewere undersøger

Enhver mængdeoperator (UNION, INTERSECT, EXCEPT) kræver, at de to resultatsæt er kompatible til UNION. Interviewere spørger om dette for at se, om du kender de mindre tydelige måder, disse forespørgsler kan gå i stykker på.

To regler styrer kompatibiliteten: det samme antal kolonner og kompatible datatyper på hver deres position. Hvis bare én af delene er forkert, får du en fejl eller et overraskende resultat.

Regel 1: Samme antal kolonner

Begge forespørgsler skal returnere det samme antal kolonner. Hvis den første forespørgsel returnerer tre kolonner, og den anden returnerer to, afviser databasen sætningen.

Det er den mest almindelige fejl ved mængdeoperatorer i jobsamtaler, især efter at nogen har redigeret én gren og glemt den anden.

SELECT id, name, city FROM a
UNION
SELECT id, name FROM b;
-- ERROR: each UNION query must have the same number of columns

Regel 2: Kompatible typer efter position

Kolonner matches efter position, ikke efter navn. Den første kolonne i forespørgsel ét parres med den første kolonne i forespørgsel to og så videre. Hvert par skal have kompatible typer.

Kompatibel betyder normalt, at typen kan konverteres implicit: INT og BIGINT fungerer fint, mens INT og DATE normalt ikke gør.

SELECT id, signup_date FROM a
UNION
SELECT id, signup_date FROM b;
-- positions: (int,date) vs (int,date) -> OK

Positionen, ikke navnet, er det afgørende

En subtil faldgrube er, at kolonnerne kan have forskellige navne og stadig kombineres, så længe positionerne stemmer overens med hensyn til typer. Omvendt vil ens navne i den forkerte rækkefølge forskyde dataene.

Læs altid mængdeoperatorer kolonne for kolonne efter position. Interviewere indsætter med vilje ombyttede kolonner for at teste dette.

SELECT name, id FROM a
UNION ALL
SELECT id, name FROM b;
-- name<->id swapped: types may clash or data lands in wrong column

Outputkolonnenavnene

Resultatsættet får sine kolonnenavne fra den første forespørgsel. Den anden forespørgsels navne forkastes. Hvis du vil styre overskrifterne, skal du give kolonnerne aliaser i den første gren.

Derfor skal en efterfølgende ORDER BY referere til navnene fra den første forespørgsel eller bruge ordinalpositioner.

SELECT id AS user_id, city AS location FROM a
UNION ALL
SELECT id, town FROM b;
-- output headers: user_id, location

Implicit typekonvertering

Når to kolonner på samme position har forskellige, men kompatible typer, vælger motoren en resultattype, der er bred nok til at rumme dem begge. En INT kombineret med en DECIMAL giver normalt DECIMAL.

Hvis du nævner denne konvertering i en jobsamtale, viser det indsigt: Du ved, at kolonnen ikke giver en fejl, men konverteres til den bredere type.

SELECT amount FROM int_table   -- INT
UNION ALL
SELECT amount FROM dec_table;  -- DECIMAL
-- result column is DECIMAL

Udfyld manglende kolonner med NULL

Når to forespørgsler naturligt har forskellig struktur, kan du tilpasse dem ved at tilføje pladsholderkolonner. En almindelig teknik er at vælge NULL (ofte konverteret til en bestemt type) for at udfylde en plads, som den anden gren har.

Hvis du konverterer NULL, undgår du, at motoren gætter en type, og du holder kolonnerne kompatible.

SELECT id, phone, CAST(NULL AS VARCHAR) AS email FROM a
UNION ALL
SELECT id, CAST(NULL AS VARCHAR), email FROM b;

Et gennemgået eksempel på en typefejl

Her er den anden kolonne en dato i den ene gren og en tekst i den anden. Strenge motorer afviser dette, mens mere lempelige motorer muligvis konverterer uforudsigeligt. Den sikre løsning er en eksplicit CAST, så begge sider har samme type.

Foreslå en eksplicit konvertering i jobsamtaler i stedet for at stole på implicit konvertering.

SELECT id, CAST(event_date AS VARCHAR) FROM a
UNION ALL
SELECT id, label FROM b;
-- both second columns now VARCHAR -> compatible

Disse regler gælder for alle mængdeoperatorer

Reglerne for antal kolonner og typekompatibilitet er identiske for UNION, UNION ALL, INTERSECT og EXCEPT. De stabler alle resultatsæt lodret og kræver alle input, der er kompatible til UNION.

Du kan derfor bruge den samme mentale tjekliste til alle mængdeoperationer: Tæl kolonnerne, kontrollér typerne efter position, og styr navnene fra den første forespørgsel.

SELECT id, city FROM a
INTERSECT
SELECT id, city FROM b;
-- same compatibility rules as UNION

Tjeklisten før kørsel

Kontrollér følgende, før du kombinerer resultatsæt:

  • Samme antal kolonner i alle grene.
  • Hvert par på samme position har kompatible typer (konvertér, hvis du er i tvivl).
  • Kolonnerne står i den samme logiske rækkefølge.
  • Aliaser er angivet i den første forespørgsel, så outputnavnene bliver tydelige.

Hvis du siger denne tjekliste højt i en jobsamtale, undgår du fejl på grund af skjult forskydning.

Sådan hænger det sammen

Kompatibilitetsfejl kan for det meste undgås. Fejlene er tydelige, når antallet af kolonner er forskelligt, men skjulte, når kolonner er ombyttet eller konverteret uventet. Hvis du læser forespørgsler kolonne for kolonne efter position og konverterer bevidst, forbliver mængdeoperationerne korrekte.

Et sikkert svar nævner begge regler, omtaler matchning efter position og bemærker, at outputnavnene kommer fra den første forespørgsel.

Hurtigt tjek

Hvordan afgør SQL, hvilke kolonner i to UNION-grene der svarer til hinanden?

Opsummering

Vigtigste pointer:

  • Alle mængdeoperatorer kræver det samme antal kolonner i hver gren.
  • Kolonner matches efter position, og hvert par skal have kompatible typer.
  • Kompatible typer kan konverteres til en bredere fælles type.
  • Brug CAST(NULL AS type) til at udfylde strukturer, der er forskellige.
  • Outputnavnene kommer fra den første forespørgsel.
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 “Kompatibilitet mellem antal kolonner og datatyper” gratis?

Ja — hele teksten til “Kompatibilitet mellem antal kolonner og datatyper” 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 “Kompatibilitet mellem antal kolonner og datatyper”?

De regler, resultatsæt skal opfylde for at kunne kombineres, samt almindelige fejl ved uoverensstemmelser 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 2 af 4.

Hvor lang tid tager lektionen “Kompatibilitet mellem antal kolonner og datatyper”?

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