Förberedelse inför kodningsintervjuer · Lektion

LIMIT, OFFSET och FETCH FIRST

Syntax för sidindelning i MySQL, Postgres och SQL Server

Lektion 2 av 413 steg

LIMIT, OFFSET och FETCH FIRST är en gratis lektion i Förberedelse inför kodningsintervjuer på CoddyKit. Detta är lektion 2 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örberedelse inför kodningsintervjuer, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Förberedelse inför kodningsintervjuer innehåller totalt 4 lektioner.

Paginering är en fråga om SQL-dialekt

”Hur hämtar du de första 10 raderna?” låter trivialt tills intervjuaren lägger till ”och gör det i standard-SQL” eller ”nu i SQL Server”. Syntaxen för att begränsa antalet rader är en av de mest splittrade funktionerna mellan olika databaser.

Den här lektionen går igenom de tre huvudformerna: LIMIT (MySQL/Postgres/SQLite), OFFSET ... FETCH (ANSI-standarden, SQL Server) och den äldre TOP (SQL Server).

LIMIT i MySQL och PostgreSQL

Den vanligaste formen är LIMIT n, som begränsar resultatet till högst n rader. Den stöds av MySQL, PostgreSQL och SQLite.

Det viktiga är att LIMIT tillämpas efter ORDER BY i den logiska exekveringsordningen, så du kombinerar dem nästan alltid. Om du begränsar utan att sortera får du ett godtyckligt urval av rader.

SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 10;

OFFSET för att hoppa över rader

Paginering behöver en offset för att hoppa över tidigare sidor. OFFSET m hoppar över de första m raderna innan begränsningen tillämpas.

För att hämta sida 3 med en sidstorlek på 10 hoppar du över 20 rader och hämtar 10. Den allmänna formeln är OFFSET = (page - 1) * page_size.

SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 10 OFFSET 20;

MySQLs kommasyntax

MySQL accepterar också en kommaform med två argument: LIMIT offset, count. Observera att ordningen är omvänd jämfört med nyckelordsformen, vilket ofta leder till misstag.

LIMIT 20, 10 betyder att 20 rader hoppas över och därefter 10 hämtas, vilket är identiskt med LIMIT 10 OFFSET 20. Föredra nyckelordsformen för tydlighet i intervjuer.

SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 20, 10;

ANSI-standarden: FETCH FIRST

SQL-standarden använder OFFSET ... ROWS FETCH FIRST ... ROWS ONLY. PostgreSQL, Oracle 12c+, DB2 och SQL Server 2012+ stöder alla detta.

Det ser utförligt ut, men är det portabla valet. ROW och ROWS kan användas omväxlande; FIRST och NEXT är synonymer.

SELECT name, salary
FROM employees
ORDER BY salary DESC
OFFSET 20 ROWS
FETCH FIRST 10 ROWS ONLY;

SQL Server TOP

Äldre SQL Server-kod använder TOP n direkt efter SELECT. Den har ingen inbyggd offset och kan därför inte paginera längre än den första sidan på egen hand.

En intervjuare kan be er att konvertera TOP till standardformen. SELECT TOP 10 med ORDER BY motsvarar FETCH FIRST 10 ROWS ONLY.

SELECT TOP 10 name, salary
FROM employees
ORDER BY salary DESC;

TOP WITH TIES

En praktisk funktion i SQL Server: TOP n WITH TIES returnerar extra rader när de har samma värde som den sista raden för nyckeln i ORDER BY.

Om tre personer delar på den tionde högsta lönen returnerar TOP 10 WITH TIES alla tre, vilket kan ge 12 rader. Detta motsvarar FETCH FIRST ... WITH TIES i standarden.

SELECT TOP 10 WITH TIES name, salary
FROM employees
ORDER BY salary DESC;

ORDER BY krävs för deterministisk paginering

Den viktigaste poängen i en intervju är följande: OFFSET/LIMIT utan en deterministisk ORDER BY är osäkert. Motorn kan välja andra rader för "sida 2" än den gjorde för "sida 1", eftersom den underliggande ordningen är odefinierad.

Sortera alltid efter en unik eller tillräckligt unik uppsättning nycklar. Om sorteringskolumnen innehåller dubbletter lägger ni till primärnyckeln som skiljekriterium, så att sidorna inte överlappar eller hoppar över rader.

SELECT id, name, salary
FROM employees
ORDER BY salary DESC, id ASC
LIMIT 10 OFFSET 20;

Varför OFFSET-paginering skalar dåligt

Seniora intervjuare undersöker prestandan. En stor OFFSET tvingar fortfarande databasen att generera och kasta bort alla överhoppade rader. OFFSET 100000 LIMIT 10 läser 100 010 rader för att returnera 10.

Kostnaden ökar linjärt med sidnumret, vilket gör paginering långt in i resultatet långsam i stora tabeller.

Keyset-paginering (seek)

Det skalbara alternativet är keyset-paginering: i stället för att hoppa över rader baserat på antal filtrerar ni bort allt före det senaste värdet ni såg. Detta använder en indexintervallskanning och förblir snabbt oavsett djup.

Ni sparar sorteringsnyckeln för den sista raden på föregående sida och ber sedan om rader efter den. Att nämna keyset-paginering är en stark signal på senior nivå.

SELECT id, name, created_at
FROM events
WHERE created_at < '2026-01-01 10:00:00'
ORDER BY created_at DESC
LIMIT 10;

Fusklapp per dialekt

Lär er denna tabell utantill för att snabbt kunna svara i intervjuer:

  • MySQL / Postgres / SQLite: LIMIT n OFFSET m
  • Standard / SQL Server 2012+ / Oracle 12c+: OFFSET m ROWS FETCH FIRST n ROWS ONLY
  • Äldre SQL Server: SELECT TOP n (ingen offset)
  • Äldre Oracle (före 12c): filtrera på ROWNUM i en underfråga

Snabbtest

Välj rätt fråga för sida 3 med en sidstorlek på 10.

Sammanfattning

Det viktigaste om paginering:

  • LIMIT/OFFSET för MySQL, Postgres och SQLite; OFFSET ... FETCH FIRST för standarden och moderna versioner av SQL Server; TOP för äldre SQL Server.
  • OFFSET = (page - 1) * page_size.
  • Kombinera alltid detta med en deterministisk ORDER BY och lägg till ett unikt skiljekriterium.
  • Stora offsetvärden är långsamma; använd helst keyset-paginering vid paginering långt in i resultatet.
Gratis att börja

Lär dig Förberedelse inför kodningsintervjuer 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
90
Lektioner
360

Vanliga frågor

Är lektionen ”LIMIT, OFFSET och FETCH FIRST” gratis?

Ja – hela texten till ”LIMIT, OFFSET och FETCH FIRST” 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örberedelse inför kodningsintervjuer, kan Ni uppgradera till CoddyKit PRO. Kursen i Förberedelse inför kodningsintervjuer innehåller totalt 4 lektioner.

Vad lär jag mig i ”LIMIT, OFFSET och FETCH FIRST”?

Syntax för sidindelning i MySQL, Postgres och SQL Server Ni övar på Förberedelse inför kodningsintervjuer 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örberedelse inför kodningsintervjuer?

Du behöver inga förkunskaper. Utbildningen i Förberedelse inför kodningsintervjuer 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 2 av 4.

Hur lång tid tar lektionen ”LIMIT, OFFSET och FETCH FIRST”?

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örberedelse inför kodningsintervjuer-lektionen?

Ja. Varje Förberedelse inför kodningsintervjuer-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

  1. Sortering på flera kolumner och placering av NULL
  2. LIMIT, OFFSET och FETCH FIRST
  3. Returnera de översta N raderna tillförlitligt
  4. Sortera efter uttryck och alias
← Tillbaka till Förberedelse inför kodningsintervjuer