Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak ograniczyć wiersze w zestawie wyników SQL Server

Problem:

Chcesz ograniczyć liczbę wierszy w zestawie wyników SQL Server.

Przykład:

Nasza baza danych zawiera tabelę o nazwie toy z danymi w kolumnach id , name i price .

id imię cena
161 Rower BMX 200,00
121 Robot Tobie 185,50
213 Gra wędkarska 25,00
102 Zagadki ze zwierzętami 45,80
111 Zestaw toru wyścigowego 126,70
233 Łatwe klocki 21.00

Wybierzmy nazwy i ceny zabawek. Ale musimy zobaczyć tylko pierwsze pięć rzędów.

Rozwiązanie 1:

SELECT name, price
FROM toy
ORDER BY price
OFFSET 0 ROWS FETCH FIRST 5 ROWS ONLY;

Oto wynik zapytania:

nazwa cena
Łatwe klocki 21.00
Gra wędkarska 25,00
Puzzle ze zwierzętami 45,80
Zestaw toru wyścigowego 126,70
Robot Tobie 185,50

Dyskusja:

Aby ograniczyć liczbę wierszy w zestawie wyników, użyj ORDER BY z opcjonalnymi klauzulami OFFSET i FETCH. Najpierw zapytanie sortuje wiersze (ORDER BY). Następnie informujesz SQL Server, który powinien być pierwszym wierszem w zestawie wyników (OFFSET...ROWS) i ile wierszy ma zostać zwróconych (FETCH…ONLY).

Klauzula OFFSET jest umieszczana bezpośrednio po ORDER BY. Liczba całkowita wskazuje pierwszy wiersz do zliczenia (w SQL Server pierwszy wiersz to 0, drugi wiersz to 1 itd.), po którym następuje słowo kluczowe ROW lub ROWS. Możesz użyć ROWS lub ROWS, ale zaleca się używanie ROW dla 1 wiersza i ROWS dla 0 i wielu wierszy. Spójrz na zdjęcie:

W naszym przykładzie sortujemy według ceny (ORDER BY price ) i zacznij zwracać wyniki od pierwszego wiersza (OFFSET 0 ROWS ). Następnie używamy FETCH ze słowem kluczowym FIRST. Możesz użyć FIRST lub NEXT; zaleca się użycie FIRST, jeśli zaczynasz od pierwszego wiersza bez pominięcia żadnych rekordów, i NEXT, jeśli pominięto jakiekolwiek wiersze (tj. Jeśli PRZESUNIĘCIE jest większe niż 0).

Na koniec mamy liczbę wierszy do wybrania i słowo kluczowe ROWS ONLY. Użyj opcji ROWS ONLY, jeśli zwracasz wiele wierszy, a ROWS ONLY, gdy ograniczasz wynik do jednego wiersza. W naszym przykładzie ograniczamy to do pięciu wierszy (FETCH FIRST 5 ROWS ONLY ).

Poniżej mamy inne zapytanie, które ogranicza wiersze do pięciu, ale zaczyna się od piątego wiersza w tabeli (OFFSET 4 ROWS ):

Rozwiązanie 2:

SELECT name, price
FROM toy
ORDER BY price
OFFSET 4 ROWS FETCH NEXT 5 ROWS ONLY;

Oto wynik zapytania:

nazwa cena
Robot Tobie 185,50
Rower BMX 200,00

Zauważ, że to zapytanie zwraca tylko dwa wiersze, a nie pięć wskazanych. Spójrz na zdjęcie:

Dlaczego tylko dwa rzędy? Ponieważ ta tabela zawiera tylko sześć rekordów. Jeśli pominiemy pierwsze cztery rzędy i zaczniemy od piątego, pozostaną tylko dwa rzędy.

SQL Server ma inny sposób na ograniczenie liczby wierszy:klauzulę TOP.

Rozwiązanie 3:

SELECT TOP 3
 name, price
FROM toy
ORDER BY price;

Oto wynik zapytania:

nazwa cena
Łatwe klocki 21.00
Gra wędkarska 25,00
Puzzle ze zwierzętami 45,80

Jeśli nie musisz pomijać żadnych wierszy, możesz użyć klauzuli TOP SQL Server, aby ograniczyć zwracane wiersze. Jest umieszczany bezpośrednio po SELECT. Po słowie kluczowym TOP następuje liczba całkowita wskazująca liczbę wierszy do zwrócenia. W naszym przykładzie zamówiliśmy według ceny a następnie ograniczył zwracane wiersze do 3.

W przeciwieństwie do metody OFFSET – FETCH, TOP nie wymaga ORDER BY. Oto podobny przykład, ale bez sortowania rekordów:

Rozwiązanie 4:

SELECT TOP 3
 name, price
FROM toy;

Oto wynik zapytania:

Zauważ, że zwrócono różne rekordy. Zwykle (ale nie zawsze) wiersze będą wyświetlane w kolejności, w jakiej rekordy zostały wstawione do tabeli.

Zalecamy używanie OFFSET i FETCH zamiast TOP, ponieważ OFFSET i FETCH są standardem SQL; TOP jest specyficzny dla T-SQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak usunąć lub usunąć wszystkie wyzwalacze z bazy danych w SQL Server

  2. Instrukcja SQL Server RAISERROR z prostymi przykładami

  3. Jak załadować plik XML do bazy danych za pomocą pakietu SSIS?

  4. Jak usunąć wiodące i końcowe znaki w SQL Server

  5. Używanie sp_help_schedule w SQL Server