SQL Academy · Oppitunti

LIMIT ja OFFSET

Noutakaa ensimmäiset N riviä ja toteuttakaa sivutus.

Oppitunti 3/413 vaihetta

LIMIT ja OFFSET on ilmainen SQL Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu SQL Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. SQL Academy-kurssilla on yhteensä 4 oppituntia.

Vain muutaman rivin hakeminen

Joskus ette halua kaikkia osuvia rivejä, vaan ainoastaan ensimmäiset. LIMIT rajoittaa kyselyn palauttamien rivien määrää.

Tämä palauttaa enintään 5 tuotetta.

SELECT name, price
FROM products
LIMIT 5;

LIMIT ilman ORDER BY:tä on satunnainen

Pelkkä LIMIT palauttaa joitakin rivejä, mutta sitä, mitkä rivit palautetaan, ei määritellä. Yhdistäkää se aina ORDER BY-lausekkeeseen, jotta tulos on mielekäs ja toistettava.

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

Rivien ohittaminen OFFSETilla

OFFSET käskee tietokantaa ohittamaan tietyn määrän rivejä ennen palauttamista. Yhdessä LIMIT-lausekkeen kanssa se muodostaa sivutuksen perustan.

Tämä ohittaa ensimmäiset 10 riviä ja palauttaa seuraavat 5.

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

Sivujen muodostaminen

Kun sivun koko on 10, sivunumerot vastaavat seuraavia siirtymiä:

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

Kaava on OFFSET = (page - 1) * page_size.

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

Toimintojen järjestys

Tietokanta käsittelee lausekkeet tässä järjestyksessä: suodattaa WHERE-lausekkeella, lajittelee ORDER BY-lausekkeella ja rajaa sitten OFFSET- ja LIMIT-lausekkeilla.

Sivutatte siis aina lajiteltua ja suodatettua tulosta.

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

LIMIT ALL ja OFFSET 0

LIMIT ALL tarkoittaa "ei rajoitusta" (sama kuin LIMIT-lausekkeen jättäminen pois), ja OFFSET 0 ei ohita mitään. Niistä on toisinaan hyötyä, kun arvo muodostetaan dynaamisesti.

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

Standardin mukainen FETCH-syntaksi

PostgreSQL tukee myös SQL-standardin mukaista muotoa: OFFSET n ROWS FETCH NEXT m ROWS ONLY. Se tekee täsmälleen saman kuin LIMIT/OFFSET, mutta on vain monisanaisempi.

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

Miksi suuret OFFSET-arvot ovat hitaita

Suuri OFFSET saa tietokannan edelleen käymään läpi ja hylkäämään jokaisen ohitettavan rivin. OFFSET 100000 lukee 100 000 riviä vain heittääkseen ne pois, mikä hidastaa toimintaa syvillä sivuilla.

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

Keyset-sivutus

Nopeampi vaihtoehto on keyset- eli seek-sivutus. Offset-arvon sijaan tallennatte viimeksi näkemänne rivin ja pyydätte sen jälkeen tulevia rivejä.

Tämä siirtyy indeksin avulla suoraan seuraavalle sivulle ilman ohitettavia rivejä.

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

Vakaat sivut edellyttävät vakaata lajittelua

Jos ORDER BY -lausekkeessa on tasatuloksia, rivit voivat vaihtaa järjestystä sivuja ladattaessa, jolloin saatatte nähdä kaksoiskappaleita tai aukkoja. Päättäkää lajittelu yksilölliseen avaimeen, kuten perusavaimeen, jotta sivutus pysyy johdonmukaisena.

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

Yksi kärkirivi

LIMIT 1 on nopea tapa hakea yksi rivi, kuten kallein tuote tai uusin tilaus. Yhdistäkää se oikeaan ORDER BY -lausekkeeseen.

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

Pikatarkistus

Esitätte 10 riviä sivua kohden. Mikä lauseke palauttaa sivun 3?

Kertaus

Osaatte nyt rajata tuloksia:

  • LIMIT n rajoittaa rivien määrää
  • OFFSET m ohittaa rivejä; OFFSET = (page-1)*size
  • Yhdistäkää aina mukaan ORDER BY, jotta sivut muodostuvat ennakoitavasti
  • Suosikaa nopeuden vuoksi keyset-sivutusta suurten offset-arvojen sijaan

Seuraavaksi käytätte näitä työkaluja Top-N-tietueiden löytämiseen.

SELECT name, price
FROM products
ORDER BY name
LIMIT 10 OFFSET 20;
Aloita maksutta

Opi SQL tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
46
Oppitunnit
183

Usein kysytyt kysymykset

Onko oppitunti ”LIMIT ja OFFSET” ilmainen?

Kyllä – oppitunnin ”LIMIT ja OFFSET” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko SQL Academy-kurssin, päivitä CoddyKit PROhon. SQL Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”LIMIT ja OFFSET”?

Noutakaa ensimmäiset N riviä ja toteuttakaa sivutus. Harjoittelet SQL Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni SQL Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin SQL Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”LIMIT ja OFFSET”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä SQL Academy-oppitunnilla?

Kyllä. Jokainen SQL Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Lajittelu ORDER BY -lauseella
  2. Lajittelu usean sarakkeen perusteella
  3. LIMIT ja OFFSET
  4. Top-N-tietueiden etsiminen
← Takaisin: SQL Academy