Sortering på flera kolumner och placering av NULL
Blanda ASC/DESC och förstå hur NULLS FIRST/LAST skiljer sig mellan databaser
Sortering på flera kolumner och placering av NULL är en gratis lektion i Förberedelser inför SQL-intervjun på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Förberedelser inför SQL-intervjun, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Förberedelser inför SQL-intervjun innehåller totalt 4 lektioner.
Varför sortering dyker upp i intervjuer
Intervjuare tar tidigt upp ORDER BY eftersom det visar om du förstår att en SQL-resultatuppsättning är osorterad som standard. Utan en uttrycklig sortering får databasen returnera raderna i vilken ordning den vill.
En vanlig inledning är: ”Hur garanterar du att raderna returneras i en viss ordning?” Det enda korrekta svaret är en uttrycklig ORDER BY-sats. Att förlita sig på insättningsordning, primärnyckelordning eller indexordning är ett klassiskt nybörjarmisstag.
I den här lektionen lär du dig sortering på flera kolumner och den knepiga frågan om var NULL-värden hamnar.
Grunderna i ASC och DESC
ORDER BY sorterar stigande (ASC) som standard. Du behöver bara använda DESC för att vända ordningen. Riktningen gäller per kolumn, inte hela satsen.
Intervjutips: säg att ASC är det implicita standardvärdet, så behöver du inte skriva ut det. Många kandidater tror felaktigt att ett enda DESC vänder ordningen på alla kolumner.
SELECT name, hire_date
FROM employees
ORDER BY hire_date DESC;Sortering på flera kolumner
Lista flera kolumner och separera dem med kommatecken. SQL sorterar efter den första kolumnen, bryter sedan lika resultat med den andra och fortsätter på samma sätt. Se det som en kedja av skiljekriterier.
Exemplet sorterar avdelningar alfabetiskt och inom varje avdelning sorteras lönerna från högst till lägst.
- Primär sortering:
departmentstigande - Skiljekriterium:
salaryfallande
SELECT department, name, salary
FROM employees
ORDER BY department ASC, salary DESC;Blanda ASC och DESC
En vanlig intervjufälla är att varje kolumn får sin egen riktning. ORDER BY a, b DESC sorterar a stigande och b fallande, inte båda fallande.
Om du vill sortera båda fallande måste du skriva ORDER BY a DESC, b DESC. Var tydlig när frågan blandar olika riktningar.
SELECT region, sales_year, revenue
FROM sales
ORDER BY region ASC, sales_year DESC;Var hamnar NULL?
Det här är lektionens kärna. NULL betyder okänt, så standarden tvingar inte fram någon viss placering, och databaser skiljer sig åt när det gäller standardbeteendet:
- PostgreSQL & Oracle: NULL-värden sorteras sist i
ASCoch först iDESC. - MySQL & SQL Server: NULL-värden sorteras först i
ASCoch sist iDESC(de behandlas som det minsta värdet).
Intervjuare älskar frågan ”Var hamnar NULL-värdena i den här sorteringen?” Det ärliga svaret är att det beror på databasmotorn, om du inte styr placeringen uttryckligen.
Styr placeringen av NULL explicit
För att göra placeringen deterministisk oavsett databasmotorns standard använder du NULLS FIRST eller NULLS LAST. PostgreSQL, Oracle och SQLite har direkt stöd för detta.
Frågan nedan tvingar okända anställningsdatum längst ned, även om kolumnen sorteras stigande.
SELECT name, hire_date
FROM employees
ORDER BY hire_date ASC NULLS LAST;Efterlikna NULLS LAST i MySQL
MySQL stöder inte nyckelordet NULLS LAST. Den portabla lösningen är att använda en inledande sorteringsnyckel som anger om värdet är NULL.
Uttrycket hire_date IS NULL returnerar 0 för riktiga datum och 1 för NULL-värden. Om du sorterar det stigande hamnar NULL-värdena sist, och den andra nyckeln sorterar sedan de faktiska datumen.
SELECT name, hire_date
FROM employees
ORDER BY (hire_date IS NULL) ASC, hire_date ASC;Efterlikna NULLS FIRST i SQL Server
SQL Server saknar också NULLS FIRST/LAST. Använd ett CASE-uttryck som inledande sorteringsnyckel. Här får NULL-värden rang 0, så de hamnar först.
Det här mönstret är värt att memorera: en beräknad flaggkolumn före den riktiga sorteringskolumnen ger dig full kontroll över NULL-värdenas placering i alla dialekter.
SELECT name, hire_date
FROM employees
ORDER BY CASE WHEN hire_date IS NULL THEN 0 ELSE 1 END,
hire_date ASC;Genomgångsexempel: topplista
Anta att du bygger en topplista: högst poäng först, och vid lika poäng hamnar spelaren som registrerade sig tidigast högst. Spelare som aldrig fått poäng (NULL score) ska hamna längst ned.
Sorteringen behöver tre nycklar: en NULL-flagga, poängen fallande och registreringsdatumet stigande som skiljekriterium.
SELECT player, score, signup_date
FROM players
ORDER BY (score IS NULL) ASC,
score DESC,
signup_date ASC;Förbehåll om sorteringsstabilitet
En annan favoritfråga är: ”Om två rader är lika för varje ORDER BY-nyckel, i vilken ordning returneras de?”
Svaret är: odefinierat. SQL-sorteringar garanteras inte vara stabila, så lika rader kan visas i vilken inbördes ordning som helst, och ordningen kan ändras mellan körningar eller efter en indexändring.
Lösningen är att lägga till ett helt unikt skiljekriterium, vanligtvis en primärnyckel, så att resultatet blir reproducerbart.
SELECT id, name, salary
FROM employees
ORDER BY salary DESC, id ASC;Prestandaanmärkning om sortering
Sortering kan vara kostsam. Om ORDER BY överensstämmer med ett befintligt index med samma kolumnordning och riktningar kan motorn läsa raderna i försorterad ordning och hoppa över ett separat sorteringssteg.
Olika riktningar, till exempel när indexet enbart är stigande men du sorterar en kolumn fallande, gör vanligtvis att detta inte fungerar och tvingar fram en sortering i minnet eller på disk. Att nämna sambandet mellan indexordning och sorteringskostnad visar intervjuaren att du har god förståelse.
Snabbtest
Testa dina kunskaper om reglerna för riktning på flera kolumner.
Sammanfattning
Viktiga slutsatser om sortering på flera kolumner och placering av NULL:
- Resultatuppsättningar är osorterade om du inte lägger till
ORDER BY. - Riktningen gäller per kolumn;
ASCär standard. - NULL-värdenas placering skiljer sig mellan databasmotorer: sist i ASC för PostgreSQL/Oracle och först i ASC för MySQL/SQL Server.
- Använd
NULLS FIRST/LASTdär det stöds, eller en inledandeIS NULL- /CASE-flagga i andra databasmotorer. - Lägg till ett unikt skiljekriterium, till exempel primärnyckeln, för en reproducerbar ordning.
Lär dig SQL med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 30
- Lektioner
- 120
Vanliga frågor
Är lektionen ”Sortering på flera kolumner och placering av NULL” gratis?
Ja – hela texten till ”Sortering på flera kolumner och placering av NULL” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Förberedelser inför SQL-intervjun, kan Ni uppgradera till CoddyKit PRO. Kursen i Förberedelser inför SQL-intervjun innehåller totalt 4 lektioner.
Vad lär jag mig i ”Sortering på flera kolumner och placering av NULL”?
Blanda ASC/DESC och förstå hur NULLS FIRST/LAST skiljer sig mellan databaser Ni övar på Förberedelser inför SQL-intervjun med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Förberedelser inför SQL-intervjun?
Du behöver inga förkunskaper. Utbildningen i Förberedelser inför SQL-intervjun på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”Sortering på flera kolumner och placering av NULL”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Förberedelser inför SQL-intervjun-lektionen?
Ja. Varje Förberedelser inför SQL-intervjun-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Sortering på flera kolumner och placering av NULL
- LIMIT, OFFSET och FETCH FIRST
- Returnera de översta N raderna tillförlitligt
- Sortera efter uttryck och alias