Forberedelse til SQL-interview · Lektion

Sortering efter flere kolonner og placering af NULL

Blanding af ASC/DESC, og hvordan NULLS FIRST/LAST varierer mellem databaser

Lektion 1 af 413 trin

Sortering efter flere kolonner og placering af NULL er en gratis Forberedelse til SQL-interview-lektion på CoddyKit. Dette er lektion 1 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 SQL-interview, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Forberedelse til SQL-interview-kurset indeholder 4 lektioner i alt.

Hvorfor sortering dukker op i interviews

Interviewere tager tidligt fat på ORDER BY, fordi det viser, om du forstår, at et SQL-resultatsæt som udgangspunkt er uordnet. Uden en eksplicit sortering må databasen returnere rækkerne i den rækkefølge, den selv ønsker.

Et almindeligt indledende spørgsmål er: "Hvordan garanterer du, at rækkerne returneres i en bestemt rækkefølge?" Det eneste korrekte svar er en eksplicit ORDER BY-klausul. At stole på indsættelsesrækkefølge, rækkefølge efter primærnøgle eller indeksrækkefølge er en typisk begynderfejl.

I denne lektion lærer du sortering efter flere kolonner og det vanskelige spørgsmål om, hvor NULL-værdier placeres.

Grundlæggende om ASC og DESC

ORDER BY sorterer som standard stigende (ASC). Du behøver kun DESC for at vende rækkefølgen. Retningen gælder pr. kolonne og ikke hele klausulen.

Tip til interviewet: Sig, at ASC er den underforståede standard, så du ikke behøver skrive den. Mange kandidater tror fejlagtigt, at én DESC vender alle kolonner.

SELECT name, hire_date
FROM employees
ORDER BY hire_date DESC;

Sortering efter flere kolonner

Angiv flere kolonner adskilt af kommaer. SQL sorterer efter den første kolonne og løser derefter ligheder med den anden kolonne og så videre. Tænk på det som en kæde af sekundære sorteringsnøgler.

Eksemplet sorterer efter afdeling i alfabetisk rækkefølge og inden for hver afdeling efter løn fra højest til lavest.

  • Primær sortering: department stigende
  • Sekundær nøgle: salary faldende
SELECT department, name, salary
FROM employees
ORDER BY department ASC, salary DESC;

Blanding af ASC og DESC

En hyppig fælde i interviews er, at hver kolonne får sin egen retning. ORDER BY a, b DESC sorterer a stigende og b faldende, ikke begge kolonner faldende.

Hvis du vil have begge kolonner sorteret faldende, skal du skrive ORDER BY a DESC, b DESC. Vær tydelig, når spørgsmålet blander retninger.

SELECT region, sales_year, revenue
FROM sales
ORDER BY region ASC, sales_year DESC;

Hvor placeres NULL-værdier?

Dette er lektionens centrale punkt. NULL betyder ukendt, så standarden fastlægger ikke en placering, og databaserne har forskellige standarder:

  • PostgreSQL & Oracle: NULL-værdier sorteres sidst med ASC og først med DESC.
  • MySQL & SQL Server: NULL-værdier sorteres først med ASC og sidst med DESC (de behandles som den mindste værdi).

Interviewere elsker at spørge: "Hvor vises NULL-værdier i denne sortering?" Det ærlige svar er, at det afhænger af databasemotoren, medmindre du styrer det eksplicit.

Styr placeringen af NULL eksplicit

Brug NULLS FIRST eller NULLS LAST for at gøre placeringen entydig uanset databasemotorens standarder. PostgreSQL, Oracle og SQLite understøtter dette direkte.

Forespørgslen nedenfor tvinger ukendte ansættelsesdatoer ned i bunden, selv om kolonnen sorteres stigende.

SELECT name, hire_date
FROM employees
ORDER BY hire_date ASC NULLS LAST;

Simulering af NULLS LAST i MySQL

MySQL understøtter ikke nøgleordet NULLS LAST. Den portabile løsning er en indledende sorteringsnøgle, der angiver, om værdien er NULL.

Udtrykket hire_date IS NULL returnerer 0 for faktiske datoer og 1 for NULL-værdier. Når du sorterer dette stigende, flyttes NULL-værdierne til slut, hvorefter den anden nøgle sorterer de faktiske datoer.

SELECT name, hire_date
FROM employees
ORDER BY (hire_date IS NULL) ASC, hire_date ASC;

Simulering af NULLS FIRST i SQL Server

SQL Server mangler også NULLS FIRST/LAST. Brug et CASE-udtryk som indledende sorteringsnøgle. Her får NULL-værdierne rang 0, så de vises først.

Dette mønster er værd at huske: En beregnet flagkolonne, der placeres før den egentlige sorteringskolonne, giver dig fuld kontrol over NULL-værdiernes placering i enhver SQL-dialekt.

SELECT name, hire_date
FROM employees
ORDER BY CASE WHEN hire_date IS NULL THEN 0 ELSE 1 END,
         hire_date ASC;

Gennemgået eksempel: rangliste

Forestil dig, at du bygger en rangliste: Den højeste score skal stå først, og ved samme score skal den spiller, der tilmeldte sig tidligst, placeres højest. Spillere, der aldrig har fået en score (NULL-score), skal stå nederst.

Sorteringen kræver tre nøgler: et NULL-flag, scoren faldende og tilmeldingsdatoen stigende som sekundær nøgle.

SELECT player, score, signup_date
FROM players
ORDER BY (score IS NULL) ASC,
         score DESC,
         signup_date ASC;

Forbehold om sorteringsstabilitet

Et andet yndlingsspørgsmål er: "Hvis to rækker er ens for alle nøgler i ORDER BY, i hvilken rækkefølge returneres de så?"

Svaret er: udefineret. SQL-sorteringer er ikke garanteret at være stabile, så ens rækker kan vises i en vilkårlig indbyrdes rækkefølge, og rækkefølgen kan ændre sig mellem kørsler eller efter en ændring af et indeks.

Løsningen er at tilføje en helt entydig sekundær nøgle, normalt en primærnøgle, så resultatet bliver reproducerbart.

SELECT id, name, salary
FROM employees
ORDER BY salary DESC, id ASC;

Ydelsesbemærkning om sortering

Sortering kan være dyrt. Hvis ORDER BY svarer til et eksisterende indeks med samme kolonnerækkefølge og sorteringsretninger, kan databasemotoren læse rækkerne i forvejen sorteret og springe et separat sorteringstrin over.

Forskellige retninger (for eksempel hvis indekset sorterer alle kolonner stigende, men du sorterer én kolonne faldende) forhindrer som regel dette og tvinger motoren til at sortere i hukommelsen eller på disken. Hvis du nævner sammenhængen mellem indeksrækkefølge og sorteringsomkostninger, viser det modenhed over for intervieweren.

Hurtig kontrol

Test din forståelse af reglerne for retning ved sortering efter flere kolonner.

Opsummering

Vigtigste pointer om sortering efter flere kolonner og placering af NULL-værdier:

  • Resultatsæt er uordnede, medmindre du tilføjer ORDER BY.
  • Retningen gælder pr. kolonne; ASC er standarden.
  • NULL-værdiernes placering afhænger af databasemotoren: sidst med ASC i Postgres/Oracle og først med ASC i MySQL/SQL Server.
  • Brug NULLS FIRST/LAST, hvor det understøttes, eller et indledende IS NULL- eller CASE-flag andre steder.
  • Tilføj en entydig sekundær nøgle (for eksempel primærnøglen) for at få en reproducerbar rækkefølge.
Gratis at komme i gang

Lær SQL 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
30
Lektioner
120

Ofte stillede spørgsmål

Er lektionen “Sortering efter flere kolonner og placering af NULL” gratis?

Ja — hele teksten til “Sortering efter flere kolonner og placering af NULL” 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 SQL-interview-kurset, skal du opgradere til CoddyKit PRO. Forberedelse til SQL-interview-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Sortering efter flere kolonner og placering af NULL”?

Blanding af ASC/DESC, og hvordan NULLS FIRST/LAST varierer mellem databaser Du øver dig i Forberedelse til SQL-interview 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 SQL-interview?

Der kræves ingen tidligere erfaring. Forberedelse til SQL-interview 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 1 af 4.

Hvor lang tid tager lektionen “Sortering efter flere kolonner og placering af NULL”?

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 SQL-interview-lektion?

Ja. Alle Forberedelse til SQL-interview-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. Sortering efter flere kolonner og placering af NULL
  2. LIMIT, OFFSET og FETCH FIRST
  3. Pålidelig returnering af de øverste N rækker
  4. Sortering efter udtryk og aliaser
← Tilbage til Forberedelse til SQL-interview