Blog JSystems - uwalniamy wiedzę!

Szukaj

TOP i OFFSET-FETCH, w skrócie

Ograniczanie i stronicowanie wyników:

SELECT TOP 10 * FROM Klienci;          -- pierwsze 10

SELECT * FROM Klienci
ORDER BY Id
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;  -- kolejna strona

Opcja top jest własną funkcją języka SQL, która pozwala ograniczać liczbę lub procent wierszy zwracanych przez zapytanie. Jest ona zależna od dwóch elementów będących częścią jej specyfikacji – pierwszy jest liczbą lub procentem zwracanych wierszy, drugi kolejnością.  Zastosowanie liczby dla zwracanych wierszy:

select top(10) ProductID, Name from SalesLT.Product order by ProductID;

9.png (613×332)

Przy pomocy top zostało zwróconych 10 pierwszych wierszy wyniku zapytania, względem sortowania po identyfikatorze produktu. Zastosowanie procentu dla zwracanych wierszy:

select top(3) percent ProductID, Name from SalesLT.Product order by ProductID;

10.png (684×323)

Zostało zwróconych  9 wierszy, ponieważ tabela SalesLT.Product składa się z 294 wierszy, a 3% z tej liczby, po zaokrągleniu w górę to 9.

Opcja top to bardzo przydatny rodzaj filtru, ma jednak dwa mankamenty – nie jest standardem oraz nie obsługuje funkcji pomijania początkowych wierszy. Standard SQL definiuje filtr podobny do top, który nazwany został offset-fetch. Dodaje on obsługę pomijania, co czyni go bardzo przydatnym przy wykonywaniu doraźnych zadań stronicowania wyników zapytania.

select ProductID, Name from SalesLT.Product order by ProductID offset 10 rows fetch next 10 rows only;

11.png (632×366)

Jak widać w porównaniu z poprzednimi przykładami, pierwszych 10 wierszy zostało pominięte i wyświetlone zostało kolejne 10 wierszy, względem identyfikatora produktu. Aby użyć tego filtrowania, ale bez pominięcia choćby jednego wiersza, to po słowie offset należy wpisać 0. Natomiast jeśli zachodzi potrzeba pominięcia pewnej liczby wierszy i wyświetlenia reszty zawartości tabeli to po prostu nie używa się już klauzuli fetch.

 

Baner szkolenia Kompleksowe SQL w Microsoft SQL Server w JSystems, terminy gwarantowane

Szkolenie Kompleksowe SQL w Microsoft SQL Server →

To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.

★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Najczęściej zadawane pytania

Czym różni się TOP od OFFSET-FETCH?
TOP to własna funkcja języka SQL Servera ograniczająca liczbę lub procent zwracanych wierszy, ale nie pozwala pomijać wierszy początkowych. OFFSET-FETCH to konstrukcja zgodna ze standardem SQL, która dodaje obsługę pomijania, dzięki czemu nadaje się do stronicowania wyników.
Jak zwrócić pierwsze dziesięć wierszy zapytania?
Wystarczy użyć SELECT TOP z liczbą dziesięć oraz klauzuli ORDER BY, aby określić kolejność. TOP zwróci pierwsze dziesięć wierszy wyniku względem wskazanego sortowania, na przykład po identyfikatorze produktu.
Jak działa TOP z procentem wierszy?
Podajemy TOP z wartością procentową, na przykład trzy procent. Serwer wylicza procent z całkowitej liczby wierszy i zaokrągla wynik w górę. Dla tabeli z 294 wierszami trzy procent daje po zaokrągleniu dziewięć wierszy.
Jak przejść do kolejnej strony wyników?
Używamy ORDER BY, a po nim OFFSET z liczbą wierszy do pominięcia oraz FETCH NEXT z liczbą wierszy do pobrania. Na przykład OFFSET dziesięć wierszy i FETCH NEXT dziesięć pominie pierwsze dziesięć i pokaże następne dziesięć.
Jak pominąć wiersze bez ograniczania reszty wyniku?
Podajemy OFFSET z liczbą wierszy do pominięcia i po prostu nie używamy klauzuli FETCH. Zostaną wtedy pominięte wskazane wiersze, a wyświetlona cała pozostała zawartość tabeli.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...