OFFSET FETCH trong SQL Server

Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng các mệnh đề OFFSETFETCH trong SQL Server để giới hạn số lượng bản ghi được trả về bởi một truy vấn.

Các mệnh đề OFFSETFETCH là các tùy chọn của mệnh đề ORDER BY. Chúng cho phép bạn giới hạn số lượng bản ghi được trả về bởi một truy vấn.

Ví dụ sau đây minh họa cú pháp của mệnh đề OFFSETFETCH:

ORDER BY column_list [ASC | DESC]
OFFSET offset_row_count {ROW | ROWS}
FETCH {FIRST | NEXT} fetch_row_count {ROW | ROWS} ONLY

Trong cú pháp này:

  • Mệnh đề OFFSET quy định cụ thể số bản ghi bị bỏ qua trước khi bắt đầu trả về các bản ghi từ truy vấn. offset_row_count có thể là một hằng số, biến hoặc tham số lớn hơn hoặc bằng 0.
  • Mệnh đề FETCH quy định cụ thể số lượng bản ghi trả về sau khi mệnh đề OFFSET đã được xử lý.  fetch_row_count có thể là một hằng số, biến hoặc tham số lớn hơn hoặc bằng 1.
  • Mệnh đề OFFSET là bắt buộc trong khi mệnh đềFETCH là tùy chọn. Ngoài ra, FIRSTNEXT là các từ đồng nghĩa tương ứng để bạn có thể sử dụng chúng thay thế cho nhau. Tương tự, bạn có thể sử dụng  FIRSTNEXT hoán đổi cho nhau.

Hình ảnh sau đây minh họa các mệnh đề OFFSETFETCH:

OFFSET FETCH trong SQL Server

Lưu ý rằng bạn phải sử dụng các mệnh đề OFFSETFETCH với mệnh đề ORDER BY. Nếu không, bạn sẽ nhận được một lỗi.

Các mệnh đề OFFSETFETCH được ưu tiên để thực hiện giải pháp truy vấn phân trang hơn mệnh đề TOP.

Các mệnh đề OFFSETFETCH đã có từ SQL Server 2012 (11.x) trở lên và cơ sở dữ liệu SQL Azure.

Ví dụ về OFFSET và FETCH trong SQL Server

Chúng tôi sẽ sử dụng bảng products từ cơ sở dữ liệu mẫu để làm ví dụ minh họa cho OFFSET và FETCH trong SQL Server.

Bảng Products trong cơ sở dữ liệu mẫu trong SQL Server

Truy vấn sau đây trả về tất cả các sản phẩm từ bảng products và sắp xếp các sản phẩm theo giá niêm yết và tên của chúng:

SELECT
    product_name,
    list_price
FROM
    production.products
ORDER BY
    list_price,
    product_name;

Đây là kết quả:

Ví dụ về OFFSET và FETCH trong SQL Server

Để bỏ qua 10 sản phẩm đầu tiên và trả lại phần còn lại, bạn sử dụng mệnh đề OFFSET như trong câu lệnh sau:

SELECT
    product_name,
    list_price
FROM
    production.products
ORDER BY
    list_price,
    product_name 
OFFSET 10 ROWS;

Đây là kết quả:

Ví dụ về OFFSET và FETCH trong SQL Server

Để bỏ qua 10 sản phẩm đầu tiên và chọn 10 sản phẩm tiếp theo, bạn sử dụng cả hai mệnh đề OFFSETFETCH như sau:

SELECT
    product_name,
    list_price
FROM
    production.products
ORDER BY
    list_price,
    product_name 
OFFSET 10 ROWS 
FETCH NEXT 10 ROWS ONLY;

Đây là kết quả:

Ví dụ về OFFSET và FETCH trong SQL Server

Để trả về 10 sản phẩm đắt nhất, bạn sử dụng cả hai mệnh đề OFFSETFETCH như sau:

SELECT
    product_name,
    list_price
FROM
    production.products
ORDER BY
    list_price DESC,
    product_name 
OFFSET 0 ROWS 
FETCH FIRST 10 ROWS ONLY;

Đây là kết quả:

Ví dụ về OFFSET và FETCH trong SQL Server

Trong ví dụ này, mệnh đề ORDER BY sắp xếp các sản phẩm theo giá niêm yết của chúng theo thứ tự giảm dần. Sau đó, mệnh đề OFFSET bỏ qua 0 bản ghi và mệnh đề FETCH lấy 10 sản phẩm đầu tiên từ danh sách.

Trong hướng dẫn này, bạn đã học cách sử dụng mệnh đề OFFSETFETCH trong SQL Server để giới hạn số lượng bản ghi được trả về bởi một truy vấn.



Bài viết liên quan:

Cách sử dụng mệnh đề HAVING trong SQL Server để lọc các nhóm dựa trên các điều kiện được chỉ định.

Tìm hiểu mọi thứ cần biết về trigger trong SQL Server giúp bạn sử dụng trigger hiệu quả nhất.

Tìm hiểu mọi thứ bạn cần biết về function trong SQL Server: bao gồm hàm vô hướng và hàm bảng.