Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách giới hạn hàng trong bộ kết quả máy chủ SQL

Vấn đề:

Bạn muốn giới hạn các hàng trong tập kết quả SQL Server.

Ví dụ:

Cơ sở dữ liệu của chúng tôi có một bảng có tên toy với dữ liệu trong các cột id , nameprice .

id tên giá
161 Xe đạp BMX 200,00
121 Robot Tobie 185,50
213 Trò chơi câu cá 25,00
102 Câu đố về động vật 45,80
111 Bộ đường đua 126,70
233 Gạch dễ dàng 21,00

Hãy chọn tên và giá của đồ chơi. Nhưng chúng ta chỉ cần xem năm hàng đầu tiên.

Giải pháp 1:

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

Đây là kết quả của truy vấn:

name giá
Easy Bricks 21,00
Trò chơi câu cá 25,00
Câu đố về động vật 45,80
Bộ đường đua 126,70
Robot Tobie 185,50

Thảo luận:

Để giới hạn các hàng trong tập kết quả, hãy sử dụng ORDER BY với các mệnh đề OFFSET và FETCH tùy chọn. Đầu tiên, truy vấn sắp xếp các hàng (ORDER BY). Sau đó, bạn cho SQL Server biết đâu sẽ là hàng đầu tiên trong tập kết quả (OFFSET ... ROWS) và có bao nhiêu hàng để trả về (FETCH… ONLY).

Mệnh đề OFFSET được đặt ngay sau ORDER BY. Số nguyên cho biết hàng đầu tiên cần đếm (trong SQL Server, hàng đầu tiên là 0, hàng thứ hai là 1, v.v.), theo sau là từ khóa ROW hoặc ROWS. Bạn có thể sử dụng ROW hoặc ROWS, nhưng bạn nên sử dụng ROW cho 1 hàng và ROWS cho 0 và nhiều hàng. Nhìn vào hình ảnh:

Trong ví dụ của chúng tôi, chúng tôi sắp xếp theo giá (ORDER BY price ) và bắt đầu trả về kết quả từ hàng đầu tiên (OFFSET 0 ROWS ). Sau đó, chúng tôi sử dụng FETCH với từ khóa FIRST. Bạn có thể sử dụng FIRST hoặc NEXT; bạn nên sử dụng FIRST nếu bạn đang bắt đầu từ hàng đầu tiên mà không bỏ qua bất kỳ bản ghi nào và NEXT nếu bất kỳ hàng nào bị bỏ qua (tức là nếu OFFSET lớn hơn 0).

Cuối cùng, chúng tôi có số hàng để chọn và từ khóa CHỈ ROWS. CHỈ sử dụng ROWS nếu bạn đang trả về nhiều hàng và CHỈ ROW bạn đang giới hạn kết quả ở một hàng. Trong ví dụ của chúng tôi, chúng tôi giới hạn nó thành năm hàng (FETCH FIRST 5 ROWS ONLY ).

Dưới đây, chúng tôi có một truy vấn khác giới hạn hàng ở năm hàng nhưng bắt đầu từ hàng thứ năm trong bảng (OFFSET 4 ROWS ):

Giải pháp 2:

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

Đây là kết quả của truy vấn:

name giá
Robot Tobie 185,50
Xe đạp BMX 200,00

Lưu ý rằng truy vấn này chỉ trả về hai hàng, không phải năm hàng được chỉ ra. Nhìn vào hình ảnh:

Tại sao chỉ có hai hàng? Bởi vì bảng này chỉ chứa sáu bản ghi. Nếu chúng ta bỏ qua bốn hàng đầu tiên và bắt đầu ở hàng 5, thì chỉ còn lại hai hàng.

SQL Server có một cách khác để giới hạn hàng:mệnh đề TOP.

Giải pháp 3:

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

Đây là kết quả của truy vấn:

name giá
Easy Bricks 21,00
Trò chơi câu cá 25,00
Câu đố về động vật 45,80

Nếu bạn không cần phải bỏ qua bất kỳ hàng nào, bạn có thể sử dụng mệnh đề TOP của SQL Server để giới hạn các hàng được trả về. Nó được đặt ngay sau CHỌN. Theo sau từ khóa TOP là số nguyên cho biết số hàng cần trả về. Trong ví dụ của chúng tôi, chúng tôi đã đặt hàng theo giá và sau đó giới hạn các hàng được trả về là 3.

Không giống như phương pháp OFFSET - FETCH, TOP không yêu cầu ORDER BY. Dưới đây là một ví dụ tương tự, nhưng không sắp xếp các bản ghi:

Giải pháp 4:

SELECT TOP 3
 name, price
FROM toy;

Đây là kết quả của truy vấn:

Lưu ý rằng các bản ghi khác nhau đã được trả lại. Thông thường (nhưng không phải luôn luôn) các hàng sẽ được hiển thị theo thứ tự các bản ghi được chèn vào bảng.

Chúng tôi khuyên bạn nên sử dụng OFFSET và FETCH thay vì TOP, vì OFFSET và FETCH là tiêu chuẩn SQL; TOP dành riêng cho 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. Giá trị thập phân trong SQL để chia kết quả

  2. Cách nối chuỗi và giá trị NULL trong SQL Server

  3. Phát triển máy ảo Azure để sử dụng máy chủ SQL

  4. Hướng dẫn về SQL (DDL, DML) về ví dụ về phương ngữ MS SQL Server

  5. Tạo tập hợp các ngày tăng dần trong TSQL