Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да ограничите редовете в набор от резултати на SQL Server

Проблем:

Искате да ограничите редовете в набора от резултати на SQL Server.

Пример:

Нашата база данни има таблица с име toy с данни в колоните id , name и price .

id име цена
161 Велосипед BMX 200,00
121 Роботът Тоби 185,50
213 Игра за риболов 25,00
102 Пъзели с животни 45,80
111 Комплект състезателни писти 126,70
233 Лесни тухли 21.00

Нека изберем имената и цените на играчките. Но трябва да видим само първите пет реда.

Решение 1:

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

Ето резултата от заявката:

name цена
Лесни тухли 21.00
Игра за риболов 25,00
Пъзели с животни 45,80
Комплект състезателни писти 126,70
Роботът Тоби 185,50

Дискусия:

За да ограничите редовете в резултатния набор, използвайте ORDER BY с незадължителните клаузи OFFSET и FETCH. Първо, заявката сортира редовете (ORDER BY). След това казвате на SQL Server кой трябва да бъде първият ред в резултантния набор (OFFSET...ROWS) и колко реда да върне (FETCH...ONLY).

Клаузата OFFSET се поставя непосредствено след ORDER BY. Цялото число показва първия ред за броене (в SQL Server първият ред е 0, вторият ред е 1 и т.н.), последван от ключовата дума ROW или ROWS. Можете да използвате ROW или ROWS, но се препоръчва да използвате ROW за 1 ред и ROWS за 0 и няколко реда. Вижте снимката:

В нашия пример ние сортираме по цена (ORDER BY price ) и започнете да връщате резултати от първия ред (OFFSET 0 ROWS ). След това използваме FETCH с ключовата дума FIRST. Можете да използвате FIRST или NEXT; препоръчително е да използвате FIRST, ако започвате от първия ред, без да пропускате никакви записи, и NEXT, ако някои редове са пропуснати (т.е. ако OFFSET е по-голямо от 0).

И накрая, имаме броя на редовете за избор и ключовата дума САМО РЕДОВЕ. Използвайте САМО РЕДОВЕ, ако връщате няколко реда и САМО РЕД ограничавате резултата до един ред. В нашия пример го ограничаваме до пет реда (FETCH FIRST 5 ROWS ONLY ).

По-долу имаме друга заявка, която ограничава редовете до пет, но започва от петия ред в таблицата (OFFSET 4 ROWS ):

Решение 2:

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

Ето резултата от заявката:

name цена
Роботът Тоби 185,50
Велосипед BMX 200,00

Забележете, че тази заявка връща само два реда, а не посочените пет. Вижте снимката:

Защо само два реда? Тъй като тази таблица съдържа само шест записа. Ако пропуснем първите четири реда и започнем от ред 5, остават само два реда.

SQL Server има друг начин за ограничаване на редовете:клаузата TOP.

Решение 3:

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

Ето резултата от заявката:

name цена
Лесни тухли 21.00
Игра за риболов 25,00
Пъзели с животни 45,80

Ако не е необходимо да пропускате редове, можете да използвате клаузата TOP на SQL Server, за да ограничите върнатите редове. Поставя се веднага след SELECT. Ключовата дума TOP е последвана от цяло число, което показва броя на редовете, които трябва да се върнат. В нашия пример подредихме по цена и след това ограничи върнатите редове до 3.

За разлика от метода OFFSET – FETCH, TOP не изисква ORDER BY. Ето подобен пример, но без сортиране на записите:

Решение 4:

SELECT TOP 3
 name, price
FROM toy;

Ето резултата от заявката:

Забележете, че са върнати различни записи. Обикновено (но не винаги) редовете ще се показват в реда, в който записите са били вмъкнати в таблицата.

Препоръчваме да използвате OFFSET и FETCH вместо TOP, тъй като OFFSET и FETCH са SQL стандарт; TOP е специфичен за 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. Как да се свържете с SQL Server по подразбиране инстанция и SQL Server наименувани екземпляри - SQL Server / TSQL Урок, част 2

  2. Свързване към SQL Server LocalDB чрез JDBC

  3. SQL Server - Какво се случва, когато се актуализира ред в таблица?

  4. Преименуване на потребителски дефиниран тип данни в SQL Server (T-SQL)

  5. Какво е скаларен UDF в SQL Server?