LIMIT i OFFSET
Pobieraj pierwszych N wierszy i twórz stronicowanie
LIMIT i OFFSET to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.
Pobieranie tylko kilku wierszy
Czasami nie są potrzebne wszystkie pasujące wiersze, lecz tylko kilka pierwszych. LIMIT ogranicza liczbę wierszy zwracanych przez zapytanie.
To zwraca najwyżej 5 produktów.
SELECT name, price
FROM products
LIMIT 5;LIMIT bez ORDER BY nie gwarantuje kolejności
Samodzielne użycie LIMIT zwraca pewne wiersze, ale nie wiadomo, które z nich zostaną zwrócone. Zawsze łącz je z ORDER BY, aby wynik był znaczący i powtarzalny.
-- The 5 newest orders, deterministically
SELECT id, total, created_at
FROM orders
ORDER BY created_at DESC
LIMIT 5;Pomijanie wierszy za pomocą OFFSET
OFFSET informuje bazę danych, aby pominęła określoną liczbę wierszy przed ich zwróceniem. W połączeniu z LIMIT stanowi podstawę paginacji.
To pomija pierwszych 10 wierszy i zwraca kolejnych 5.
SELECT name, price
FROM products
ORDER BY name
LIMIT 5 OFFSET 10;Tworzenie stron
Dla rozmiaru strony równego 10 numery stron odpowiadają przesunięciom w następujący sposób:
- Strona 1:
OFFSET 0 - Strona 2:
OFFSET 10 - Strona 3:
OFFSET 20
Wzór to OFFSET = (page - 1) * page_size.
-- Page 3 with 10 rows per page
SELECT name, price
FROM products
ORDER BY name
LIMIT 10 OFFSET 20;Kolejność operacji
Baza danych stosuje klauzule w następującej kolejności: filtruje za pomocą WHERE, sortuje za pomocą ORDER BY, a następnie ogranicza wynik za pomocą OFFSET i LIMIT.
Oznacza to, że paginacja zawsze dotyczy posortowanego i przefiltrowanego wyniku.
SELECT name, price
FROM products
WHERE price > 0
ORDER BY price DESC
LIMIT 10 OFFSET 0;LIMIT ALL i OFFSET 0
LIMIT ALL oznacza „brak limitu” (czyli to samo co pominięcie LIMIT), a OFFSET 0 niczego nie pomija. Są one czasami przydatne, gdy wartość jest tworzona dynamicznie.
SELECT name
FROM products
ORDER BY name
LIMIT ALL OFFSET 0;Standardowa składnia FETCH
PostgreSQL obsługuje również standardową postać SQL: OFFSET n ROWS FETCH NEXT m ROWS ONLY. Działa ona dokładnie tak samo jak LIMIT/OFFSET, tylko jest bardziej rozwlekła.
SELECT name, price
FROM products
ORDER BY name
OFFSET 10 ROWS
FETCH NEXT 5 ROWS ONLY;Dlaczego duże wartości OFFSET działają wolno
Duża wartość OFFSET nadal powoduje, że baza danych musi przeskanować i odrzucić każdy pominięty wiersz. OFFSET 100000 odczytuje 100 000 wierszy tylko po to, aby je odrzucić, co spowalnia działanie przy dalszych stronach.
-- Reads 100000 rows then discards them
SELECT id, name
FROM products
ORDER BY id
LIMIT 10 OFFSET 100000;Paginacja keysetowa
Szybszą alternatywą jest paginacja keysetowa (typu seek). Zamiast używać przesunięcia, należy zapamiętać ostatni wyświetlony wiersz i poprosić o wiersze znajdujące się za nim.
Dzięki indeksowi przechodzi ona bezpośrednio do następnej strony, bez pomijania wierszy.
-- Next page after the last seen id (e.g. 5000)
SELECT id, name
FROM products
WHERE id > 5000
ORDER BY id
LIMIT 10;Stabilne strony wymagają stabilnego sortowania
Jeśli w ORDER BY występują remisy, kolejność wierszy może zmieniać się między kolejnymi wczytaniami stron, przez co mogą pojawić się duplikaty lub luki. Sortowanie należy zakończyć unikatowym kluczem, takim jak klucz główny, aby paginacja była spójna.
SELECT id, name, price
FROM products
ORDER BY price DESC, id
LIMIT 10 OFFSET 20;Pojedynczy wiersz z początku rankingu
LIMIT 1 to szybki sposób na pobranie pojedynczego wiersza, na przykład najdroższego produktu lub najnowszego zamówienia. Należy połączyć go z odpowiednim ORDER BY.
SELECT name, price
FROM products
ORDER BY price DESC
LIMIT 1;Szybkie sprawdzenie
Na każdej stronie wyświetlają Państwo 10 wierszy. Która klauzula zwróci stronę 3?
Podsumowanie
Można już dzielić wyniki na fragmenty:
LIMIT nogranicza liczbę wierszyOFFSET mpomija wiersze;OFFSET = (page-1)*size- Zawsze należy łączyć te klauzule z
ORDER BY, aby strony były przewidywalne - Dla dużych przesunięć warto wybierać paginację keysetową, aby uzyskać lepszą wydajność
W dalszej części wykorzystają Państwo te narzędzia do wyszukiwania rekordów Top-N.
SELECT name, price
FROM products
ORDER BY name
LIMIT 10 OFFSET 20;Często zadawane pytania
Czy lekcja „LIMIT i OFFSET” jest bezpłatna?
Tak — pełny tekst „LIMIT i OFFSET” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „LIMIT i OFFSET”?
Pobieraj pierwszych N wierszy i twórz stronicowanie Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć SQL Academy?
Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „LIMIT i OFFSET”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?
Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Sortowanie za pomocą ORDER BY
- Sortowanie według wielu kolumn
- LIMIT i OFFSET
- Wyszukiwanie rekordów Top-N