SQL Academy · Lektion

LIMIT og OFFSET

Hent de første N rækker, og lav sideopdeling.

Lektion 3 af 413 trin

LIMIT og OFFSET er en gratis SQL Academy-lektion på CoddyKit. Dette er lektion 3 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 SQL Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. SQL Academy-kurset indeholder 4 lektioner i alt.

Hent kun nogle få rækker

Nogle gange vil du ikke have alle matchende rækker, men kun de første få. LIMIT begrænser, hvor mange rækker forespørgslen returnerer.

Dette returnerer højst 5 produkter.

SELECT name, price
FROM products
LIMIT 5;

LIMIT uden ORDER BY er vilkårlig

LIMIT alene giver dig nogle rækker, men det er ikke defineret, hvilke rækker du får. Kombinér altid med ORDER BY, så resultatet er meningsfuldt og kan gentages.

-- The 5 newest orders, deterministically
SELECT id, total, created_at
FROM orders
ORDER BY created_at DESC
LIMIT 5;

Spring rækker over med OFFSET

OFFSET fortæller databasen, at den skal springe et antal rækker over, før den returnerer noget. Kombineret med LIMIT danner det grundlaget for sideinddeling.

Dette springer de første 10 rækker over og returnerer de næste 5.

SELECT name, price
FROM products
ORDER BY name
LIMIT 5 OFFSET 10;

Opbygning af sider

For en sidestørrelse på 10 svarer sidenumre til forskydninger sådan:

  • Side 1: OFFSET 0
  • Side 2: OFFSET 10
  • Side 3: OFFSET 20

Formlen er OFFSET = (page - 1) * page_size.

-- Page 3 with 10 rows per page
SELECT name, price
FROM products
ORDER BY name
LIMIT 10 OFFSET 20;

Rækkefølgen af operationer

Databasen anvender klausulerne i denne rækkefølge: filtrér med WHERE, sortér med ORDER BY, og begræns derefter med OFFSET og LIMIT.

Du går altså altid gennem det sorterede, filtrerede resultat side for side.

SELECT name, price
FROM products
WHERE price > 0
ORDER BY price DESC
LIMIT 10 OFFSET 0;

LIMIT ALL og OFFSET 0

LIMIT ALL betyder "ingen begrænsning" (det samme som at udelade LIMIT), og OFFSET 0 springer ikke noget over. De er af og til nyttige, når en værdi opbygges dynamisk.

SELECT name
FROM products
ORDER BY name
LIMIT ALL OFFSET 0;

Standardsyntaksen for FETCH

PostgreSQL understøtter også standardformen fra SQL: OFFSET n ROWS FETCH NEXT m ROWS ONLY. Den gør præcis det samme som LIMIT/OFFSET, blot mere udførligt.

SELECT name, price
FROM products
ORDER BY name
OFFSET 10 ROWS
FETCH NEXT 5 ROWS ONLY;

Hvorfor store OFFSET-værdier er langsomme

En stor OFFSET får stadig databasen til at gennemgå og kassere hver række, der springes over. OFFSET 100000 læser 100.000 rækker bare for at smide dem væk, hvilket bliver langsomt på dybe sider.

-- Reads 100000 rows then discards them
SELECT id, name
FROM products
ORDER BY id
LIMIT 10 OFFSET 100000;

Keyset-paginering

Et hurtigere alternativ er keyset-paginering. I stedet for en forskydning husker du den sidste række, du så, og beder om rækker efter den.

Det springer direkte til den næste side ved hjælp af et indeks uden at springe rækker over.

-- Next page after the last seen id (e.g. 5000)
SELECT id, name
FROM products
WHERE id > 5000
ORDER BY id
LIMIT 10;

Stabile sider kræver en stabil sortering

Hvis din ORDER BY indeholder lige værdier, kan rækkernes placering ændre sig mellem sideindlæsninger, så du måske ser dubletter eller manglende rækker. Afslut sorteringen med en unik nøgle, f.eks. primærnøglen, så pagineringen bliver konsekvent.

SELECT id, name, price
FROM products
ORDER BY price DESC, id
LIMIT 10 OFFSET 20;

En enkelt toprække

LIMIT 1 er en hurtig måde at hente en enkelt række på, f.eks. det dyreste produkt eller den seneste ordre. Kombinér det med den rigtige ORDER BY.

SELECT name, price
FROM products
ORDER BY price DESC
LIMIT 1;

Hurtigt tjek

Du viser 10 rækker pr. side. Hvilken klausul returnerer side 3?

Opsummering

Du kan nu opdele dine resultater:

  • LIMIT n begrænser antallet af rækker
  • OFFSET m springer rækker over; OFFSET = (page-1)*size
  • Kombinér altid med ORDER BY for forudsigelige sider
  • Foretræk keyset-paginering frem for store forskydninger for at opnå bedre hastighed

Derefter skal du bruge disse værktøjer til at finde Top-N-poster.

SELECT name, price
FROM products
ORDER BY name
LIMIT 10 OFFSET 20;
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
46
Lektioner
183

Ofte stillede spørgsmål

Er lektionen “LIMIT og OFFSET” gratis?

Ja — hele teksten til “LIMIT og OFFSET” 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 SQL Academy-kurset, skal du opgradere til CoddyKit PRO. SQL Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “LIMIT og OFFSET”?

Hent de første N rækker, og lav sideopdeling. Du øver dig i SQL Academy 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å SQL Academy?

Der kræves ingen tidligere erfaring. SQL Academy 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 3 af 4.

Hvor lang tid tager lektionen “LIMIT og OFFSET”?

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

Ja. Alle SQL Academy-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 med ORDER BY
  2. Sortering efter flere kolonner
  3. LIMIT og OFFSET
  4. Find de øverste N poster
← Tilbage til SQL Academy