sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man begränsar rader i en SQL Server-resultatuppsättning

Problem:

Du vill begränsa raderna i en SQL Server-resultatuppsättning.

Exempel:

Vår databas har en tabell som heter toy med data i kolumnerna id , name och price .

id namn pris
161 Bike BMX 200,00
121 Roboten Tobie 185,50
213 Fiskelek 25.00
102 Djurpussel 45,80
111 Race Track Set 126,70
233 Easy Bricks 21.00

Låt oss välja leksakers namn och priser. Men vi behöver bara se de första fem raderna.

Lösning 1:

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

Här är resultatet av frågan:

namn pris
Easy Bricks 21.00
Fiskelek 25.00
Djurpussel 45,80
Race Track Set 126,70
Robot Tobie 185,50

Diskussion:

För att begränsa rader i resultatuppsättningen, använd ORDER BY med de valfria OFFSET- och FETCH-satserna. Först sorterar frågan raderna (ORDER BY). Du talar sedan om för SQL Server vilken som ska vara den första raden i resultatuppsättningen (OFFSET...ROWS) och hur många rader som ska returneras (FETCH...ONLY).

OFFSET-satsen placeras omedelbart efter ORDER BY. Heltalet indikerar den första raden som ska räknas (i SQL Server är den första raden 0, den andra raden är 1, etc.), följt av nyckelordet ROW eller ROWS. Du kan använda antingen RAD eller RAD, men det rekommenderas att använda RAD för 1 rad och RAD för 0 och flera rader. Titta på bilden:

I vårt exempel sorterar vi efter pris (ORDER BY price ) och börja returnera resultat från den första raden (OFFSET 0 ROWS ). Sedan använder vi FETCH med sökordet FIRST. Du kan använda FIRST eller NEXT; det rekommenderas att använda FIRST om du börjar från första raden utan att utelämna några poster och NÄSTA om några rader utelämnas (dvs om OFFSET är större än 0).

Slutligen har vi antalet rader att välja och nyckelordet ROWS ONLY. Använd ENDAST RADER om du returnerar flera rader och ENDAST RADER begränsar du resultatet till en rad. I vårt exempel begränsar vi det till fem rader (FETCH FIRST 5 ROWS ONLY ).

Nedan har vi en annan fråga som begränsar rader till fem men börjar från den femte raden i tabellen (OFFSET 4 ROWS ):

Lösning 2:

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

Här är resultatet av frågan:

namn pris
Roboten Tobie 185,50
Bike BMX 200,00

Observera att denna fråga endast returnerar två rader, inte de fem som anges. Titta på bilden:

Varför bara två rader? Eftersom den här tabellen bara innehåller sex poster. Om vi ​​utelämnar de fyra första raderna och börjar på rad 5, återstår bara två rader.

SQL Server har ett annat sätt att begränsa rader:TOP-satsen.

Lösning 3:

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

Här är resultatet av frågan:

namn pris
Easy Bricks 21.00
Fiskelek 25.00
Djurpussel 45,80

Om du inte behöver utelämna några rader kan du använda SQL Servers TOP-sats för att begränsa antalet returnerade rader. Den placeras omedelbart efter SELECT. Nyckelordet TOP följs av ett heltal som anger antalet rader som ska returneras. I vårt exempel ordnade vi efter pris och begränsade sedan de returnerade raderna till 3.

Till skillnad från OFFSET – FETCH-metoden kräver TOP inte BESTÄLLNING EFTER. Här är ett liknande exempel, men utan att sortera posterna:

Lösning 4:

SELECT TOP 3
 name, price
FROM toy;

Här är resultatet av frågan:

Observera att olika poster har returnerats. Vanligtvis (men inte alltid) kommer raderna att visas i den ordning posterna infogades i tabellen.

Vi rekommenderar att du använder OFFSET och FETCH istället för TOP, eftersom OFFSET och FETCH är SQL-standard; TOP är specifik för T-SQL.


  1. Hur LOCATE()-funktionen fungerar i MySQL

  2. Hitta dubbletter av rader i SQL Server

  3. Nya Azure SQL Database Standard Tier Sizes

  4. Anpassade grafer för att övervaka dina MySQL-, MariaDB-, MongoDB- och PostgreSQL-system - ClusterControl-tips och tricks