Antall kolonner og typekompatibilitet
Reglene resultattabeller må oppfylle for å kunne kombineres, og vanlige feil ved manglende samsvar.
Antall kolonner og typekompatibilitet er en gratis leksjon i Forberedelse til kodeintervjuer på CoddyKit. Dette er leksjon 2 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 kodeintervjuer, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Forberedelse til kodeintervjuer inneholder totalt 4 leksjoner.
Kompatibilitetsreglene intervjuere undersøker
Hver mengdeoperasjon (UNION, INTERSECT, EXCEPT) krever at de to resultatsettene er kompatible for mengdeoperasjoner. Intervjuere spør om dette for å se om du kjenner til de mindre åpenbare måtene disse spørringene kan feile på.
To regler styrer kompatibiliteten: samsvarende antall kolonner og kompatible datatyper posisjon for posisjon. Hvis én av disse er feil, får du enten en feilmelding eller et overraskende resultat.
Regel 1: Samme antall kolonner
Begge spørringene må projisere samme antall kolonner. Hvis den første spørringen returnerer tre kolonner og den andre returnerer to, avviser databasen setningen.
Dette er den vanligste feilen ved mengdeoperasjoner i intervjuer, særlig etter at noen redigerer én delspørring og glemmer den andre.
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 etter posisjon
Kolonner matches etter posisjon, ikke etter navn. Den første kolonnen i spørring én kobles mot den første kolonnen i spørring to, og så videre. Hvert par må ha kompatible typer.
Kompatibel betyr vanligvis at typene kan konverteres implisitt: INT og BIGINT går fint, mens INT og DATE vanligvis ikke gjør det.
SELECT id, signup_date FROM a
UNION
SELECT id, signup_date FROM b;
-- positions: (int,date) vs (int,date) -> OKPosisjon, ikke navn, er det som betyr noe
En subtil felle er at kolonnene kan ha forskjellige navn og likevel kombineres, så lenge posisjonene samsvarer når det gjelder type. Motsatt vil samsvarende navn i feil rekkefølge føre til at dataene havner på feil plass.
Les alltid mengdeoperasjoner kolonne for kolonne etter posisjon. Intervjuere setter inn kolonner i feil rekkefølge for å 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 columnNavnene på resultatkolonnene
Resultatsettet henter kolonnenavnene fra den første spørringen. Etikettene fra den andre spørringen forkastes. For å styre overskriftene bruker du alias på kolonnene i den første delen.
Det er derfor en etterfølgende ORDER BY må referere til navnene fra den første spørringen eller bruke ordinale posisjoner.
SELECT id AS user_id, city AS location FROM a
UNION ALL
SELECT id, town FROM b;
-- output headers: user_id, locationImplisitt typekonvertering
Når to kolonner som matches etter posisjon, har forskjellige, men kompatible typer, velger motoren en resultattype som er bred nok til å inneholde begge. En INT kombinert med en DECIMAL gir vanligvis DECIMAL.
Hvis du nevner denne konverteringen i et intervju, viser det dybdeforståelse: Du vet at kolonnen ikke gir en feil, men konverteres til den bredere typen.
SELECT amount FROM int_table -- INT
UNION ALL
SELECT amount FROM dec_table; -- DECIMAL
-- result column is DECIMALFyll ut manglende kolonner med NULL
Når to spørringer naturlig har forskjellig struktur, kan du tilpasse dem ved å legge til plassholderkolonner. En vanlig teknikk er å velge NULL (ofte konvertert til en bestemt type) for å fylle en plass som den andre delen har.
Ved å konvertere NULL unngår du at motoren må gjette typen, og du holder kolonnene kompatible.
SELECT id, phone, CAST(NULL AS VARCHAR) AS email FROM a
UNION ALL
SELECT id, CAST(NULL AS VARCHAR), email FROM b;Et konkret eksempel på typesvikt
Her er den andre kolonnen en dato i den ene delen og en streng i den andre. Strenge motorer avviser dette, mens mer lempelige motorer kan konvertere verdiene på uforutsigbare måter. Den sikre løsningen er en eksplisitt CAST, slik at begge sider bruker samme type.
I intervjuer bør du foreslå konvertering med CAST i stedet for å stole på implisitt konvertering.
SELECT id, CAST(event_date AS VARCHAR) FROM a
UNION ALL
SELECT id, label FROM b;
-- both second columns now VARCHAR -> compatibleDisse reglene gjelder for alle mengdeoperatorer
Reglene for antall kolonner og typekompatibilitet er identiske for UNION, UNION ALL, INTERSECT og EXCEPT. Alle stabler resultatsett vertikalt, og alle krever kompatible inndata for mengdeoperasjoner.
Derfor kan du bruke én mental sjekkliste for alle mengdeoperasjoner: tell kolonnene, kontroller typene etter posisjon, og styr navnene fra den første spørringen.
SELECT id, city FROM a
INTERSECT
SELECT id, city FROM b;
-- same compatibility rules as UNIONSjekklisten før kjøring
Kontroller følgende før du kombinerer resultatsett:
- Samme antall kolonner i alle delspørringene.
- Hvert par etter posisjon har kompatible typer (bruk CAST hvis du er usikker).
- Kolonnene står i samme logiske rekkefølge.
- Alias er angitt i den første spørringen for tydelige resultatnavn.
Hvis du går gjennom denne sjekklisten høyt i et intervju, unngår du de skjulte feilene som oppstår når kolonner ikke er riktig justert.
Slik henger det sammen
Kompatibilitetsfeil kan for det meste unngås. Feilene er tydelige når antallet kolonner er forskjellig, men skjulte når kolonner er byttet om eller konvertert på uventede måter. Hvis du leser spørringene kolonne for kolonne etter posisjon og bruker CAST bevisst, holder du mengdeoperasjonene korrekte.
Et selvsikkert svar nevner begge reglene, påpeker at kolonner matches etter posisjon, og sier at resultatnavnene kommer fra den første spørringen.
Kort kontroll
Hvordan avgjør SQL hvilke kolonner i to UNION-deler som hører sammen?
Oppsummering
Viktigste punkter:
- Alle mengdeoperatorer krever samme antall kolonner i hver del.
- Kolonner matches etter posisjon, og hvert par må ha kompatible typer.
- Kompatible typer kan konverteres til en bredere felles type.
- Bruk
CAST(NULL AS type)for å fylle ut strukturer som er forskjellige. - Resultatnavnene kommer fra den første spørringen.
Lær deg Forberedelse til kodeintervjuer 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
- 90
- Leksjoner
- 360
Ofte stilte spørsmål
Er leksjonen «Antall kolonner og typekompatibilitet» gratis?
Ja – hele teksten i «Antall kolonner og typekompatibilitet» 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 kodeintervjuer-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Forberedelse til kodeintervjuer inneholder totalt 4 leksjoner.
Hva lærer jeg i «Antall kolonner og typekompatibilitet»?
Reglene resultattabeller må oppfylle for å kunne kombineres, og vanlige feil ved manglende samsvar. Du øver på Forberedelse til kodeintervjuer 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 kodeintervjuer?
Ingen tidligere erfaring er nødvendig. Forberedelse til kodeintervjuer 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 2 av 4.
Hvor lang tid tar leksjonen «Antall kolonner og typekompatibilitet»?
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 kodeintervjuer-leksjonen?
Ja. Alle Forberedelse til kodeintervjuer-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
- UNION versus UNION ALL
- Antall kolonner og typekompatibilitet
- INTERSECT og EXCEPT for sammenligning
- Etterligne mengdeoperasjoner med joiner