sql >> Database >  >> RDS >> Sqlserver

Hoe rijen in een SQL Server-resultatenset te beperken

Probleem:

U wilt de rijen in een SQL Server-resultatenset beperken.

Voorbeeld:

Onze database heeft een tabel met de naam toy met gegevens in de kolommen id , name , en price .

id naam prijs
161 Fiets BMX 200,00
121 De Robot Tobie 185,50
213 Vissen spel 25,00
102 Dierenpuzzels 45.80
111 Racebaanset 126.70
233 Eenvoudige stenen 21:00

Laten we de namen en prijzen van speelgoed selecteren. Maar we hoeven alleen de eerste vijf rijen te zien.

Oplossing 1:

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

Dit is het resultaat van de zoekopdracht:

naam prijs
Eenvoudige stenen 21:00
Vissen spel 25,00
Dierenpuzzels 45.80
Racebaanset 126.70
De Robot Tobie 185,50

Discussie:

Gebruik ORDER BY met de optionele clausules OFFSET en FETCH om rijen in de resultatenset te beperken. Eerst sorteert de query de rijen (ORDER BY). Vervolgens vertelt u SQL Server welke de eerste rij in de resultatenset moet zijn (OFFSET...ROWS) en hoeveel rijen moeten worden geretourneerd (FETCH...ALLEEN).

De OFFSET-clausule wordt onmiddellijk na ORDER BY geplaatst. Het gehele getal geeft de eerste rij aan die moet worden geteld (in SQL Server is de eerste rij 0, de tweede rij is 1, enz.), gevolgd door het trefwoord ROW of RIJEN. U kunt RIJ of RIJEN gebruiken, maar het wordt aanbevolen om RIJ te gebruiken voor 1 rij en RIJEN voor 0 en meerdere rijen. Kijk naar de foto:

In ons voorbeeld sorteren we op prijs (ORDER BY price ) en begin met het retourneren van resultaten vanaf de eerste rij (OFFSET 0 ROWS ). Dan gebruiken we FETCH met het sleutelwoord FIRST. U kunt FIRST of NEXT gebruiken; het wordt aanbevolen om FIRST te gebruiken als u vanaf de eerste rij begint zonder records weg te laten en NEXT als er rijen worden weggelaten (d.w.z. als de OFFSET groter is dan 0).

Ten slotte hebben we het aantal rijen om te selecteren en het trefwoord ALLEEN RIJEN. Gebruik ALLEEN RIJEN als u meerdere rijen retourneert en ALLEEN RIJ om het resultaat tot één rij te beperken. In ons voorbeeld beperken we het tot vijf rijen (FETCH FIRST 5 ROWS ONLY ).

Hieronder hebben we nog een query die rijen tot vijf beperkt, maar begint vanaf de vijfde rij in de tabel (OFFSET 4 ROWS ):

Oplossing 2:

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

Dit is het resultaat van de zoekopdracht:

naam prijs
De Robot Tobie 185,50
Fiets BMX 200,00

Merk op dat deze query slechts twee rijen retourneert, niet de vijf aangegeven. Kijk naar de foto:

Waarom slechts twee rijen? Omdat deze tabel maar zes records bevat. Als we de eerste vier rijen weglaten en op rij 5 beginnen, blijven er nog maar twee rijen over.

SQL Server heeft een andere manier om rijen te beperken:de TOP-clausule.

Oplossing 3:

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

Dit is het resultaat van de zoekopdracht:

naam prijs
Eenvoudige stenen 21:00
Vissen spel 25,00
Dierenpuzzels 45.80

Als u geen rijen hoeft weg te laten, kunt u de TOP-clausule van SQL Server gebruiken om het aantal geretourneerde rijen te beperken. Het wordt direct na SELECT geplaatst. Het TOP-sleutelwoord wordt gevolgd door een geheel getal dat het aantal rijen aangeeft dat moet worden geretourneerd. In ons voorbeeld bestelden we op prijs en beperkt vervolgens de geretourneerde rijen tot 3.

In tegenstelling tot de OFFSET – FETCH-methode, vereist TOP geen ORDER BY. Hier is een soortgelijk voorbeeld, maar zonder de records te sorteren:

Oplossing 4:

SELECT TOP 3
 name, price
FROM toy;

Dit is het resultaat van de zoekopdracht:

Merk op dat er verschillende records zijn geretourneerd. Gewoonlijk (maar niet altijd) worden de rijen weergegeven in de volgorde waarin de records in de tabel zijn ingevoegd.

We raden aan om OFFSET en FETCH te gebruiken in plaats van TOP, aangezien OFFSET en FETCH SQL-standaard zijn; TOP is specifiek voor T-SQL.


  1. Hoofdlettergevoeligheid van Postgres

  2. PIVOT-query op verschillende records

  3. Hoe localdb afzonderlijk te installeren?

  4. MySQL AANTAL ONDERSCHEIDEN