sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan begrænser du rækker i et SQL Server-resultatsæt

Problem:

Du vil gerne begrænse rækkerne i et SQL Server-resultatsæt.

Eksempel:

Vores database har en tabel med navnet toy med data i kolonnerne id , name og price .

id navn pris
161 Bike BMX 200,00
121 Roboten Tobie 185,50
213 Fiskeleg 25.00
102 Dyrepuslespil 45,80
111 Racebanesæt 126,70
233 Easy Bricks 21.00

Lad os vælge legetøjs navne og priser. Men vi mangler kun at se de første fem rækker.

Løsning 1:

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

Her er resultatet af forespørgslen:

navn pris
Easy Bricks 21.00
Fiskeleg 25.00
Dyrepuslespil 45,80
Vedløbsbanesæt 126,70
Robot Tobie 185,50

Diskussion:

For at begrænse rækker i resultatsættet skal du bruge ORDER BY med de valgfrie OFFSET- og FETCH-sætninger. Først sorterer forespørgslen rækkerne (ORDER BY). Du fortæller derefter SQL Server, hvilken række der skal være den første række i resultatsættet (OFFSET...ROWS), og hvor mange rækker der skal returneres (FETCH...ONLY).

OFFSET-klausulen placeres umiddelbart efter ORDER BY. Heltallet angiver den første række, der skal tælles (i SQL Server er den første række 0, den anden række er 1 osv.), efterfulgt af nøgleordet ROW eller ROWS. Du kan bruge enten RÆKKE eller RÆKKER, men det anbefales at bruge RÆKKE til 1 række og RÆKKER til 0 og flere rækker. Se på billedet:

I vores eksempel sorterer vi efter pris (ORDER BY price ) og start med at returnere resultater fra den første række (OFFSET 0 ROWS ). Så bruger vi FETCH med søgeordet FIRST. Du kan bruge FIRST eller NEXT; Det anbefales at bruge FIRST, hvis du starter fra den første række uden at udelade nogen poster og NEXT, hvis nogen rækker er udeladt (dvs. hvis OFFSET er større end 0).

Til sidst har vi antallet af rækker at vælge og søgeordet RÆKKER KUN. Brug KUN RÆKKER, hvis du returnerer flere rækker, og KUN RÆKKER begrænser du resultatet til én række. I vores eksempel begrænser vi det til fem rækker (FETCH FIRST 5 ROWS ONLY ).

Nedenfor har vi en anden forespørgsel, der begrænser rækker til fem, men starter fra den femte række i tabellen (OFFSET 4 ROWS ):

Løsning 2:

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

Her er resultatet af forespørgslen:

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

Bemærk, at denne forespørgsel kun returnerer to rækker, ikke de fem angivne. Se på billedet:

Hvorfor kun to rækker? Fordi denne tabel kun indeholder seks poster. Hvis vi udelader de første fire rækker og starter på række 5, er der kun to rækker tilbage.

SQL Server har en anden måde at begrænse rækker på:TOP-sætningen.

Løsning 3:

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

Her er resultatet af forespørgslen:

navn pris
Easy Bricks 21.00
Fiskeleg 25.00
Dyrepuslespil 45,80

Hvis du ikke behøver at udelade nogen rækker, kan du bruge SQL Servers TOP-klausul til at begrænse de returnerede rækker. Den placeres umiddelbart efter SELECT. Nøgleordet TOP efterfølges af heltal, der angiver antallet af rækker, der skal returneres. I vores eksempel sorterede vi efter pris og derefter begrænsede de returnerede rækker til 3.

I modsætning til OFFSET – FETCH-metoden, kræver TOP ikke BESTIL EFTER. Her er et lignende eksempel, men uden at sortere posterne:

Løsning 4:

SELECT TOP 3
 name, price
FROM toy;

Her er resultatet af forespørgslen:

Bemærk, at forskellige poster er blevet returneret. Normalt (men ikke altid) vil rækkerne blive vist i den rækkefølge, posterne blev indsat i tabellen.

Vi anbefaler at bruge OFFSET og FETCH i stedet for TOP, da OFFSET og FETCH er SQL-standard; TOP er specifik for T-SQL.


  1. Eksempel på Oracle WHILE LOOP

  2. MySQL:hvordan man får forskellen mellem to tidsstempler på sekunder

  3. Hvordan importerer du en stor MS SQL .sql-fil?

  4. Sådan replikeres MySQL-database til en anden server