Kompatibilitet mellem antal kolonner og datatyper
De regler, resultatsæt skal opfylde for at kunne kombineres, samt almindelige fejl ved uoverensstemmelser
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 columnsRegel 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) -> OKPositionen, 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 columnOutputkolonnenavnene
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, locationImplicit 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 DECIMALUdfyld 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 -> compatibleDisse 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 UNIONTjeklisten 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.
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
- UNION kontra UNION ALL
- Kompatibilitet mellem antal kolonner og datatyper
- INTERSECT og EXCEPT til sammenligning
- Efterligning af mængdeoperationer med joins