SELECT TOP trong SQL Server

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

Giới thiệu về SELECT TOP trong SQL Server

Mệnh đề SELECT TOP cho phép bạn hạn chế số lượng bản ghi hoặc tỷ lệ phần trăm của bản ghi được trả về trong một tập kết quả truy vấn.

Vì thứ tự của các bản ghi được lưu trữ trong một bảng là không xác định, nên câu lệnh SELECT TOP luôn được sử dụng cùng với mệnh đề ORDER BY. Do đó, tập kết quả được giới hạn N bản ghi đầu tiên đã được sắp xếp.

Ví dụ sau đây minh họa cú pháp của mệnh đề TOP với câu lệnh SELECT:

SELECT TOP (expression) [PERCENT]
    [WITH TIES]
FROM 
    table_name
ORDER BY 
    column_name;

Trong cú pháp này, câu lệnh SELECT có thể có mệnh đề khác như WHERE, JOIN, HAVINGGROUP BY.

Theo sau từ khóa TOP là một biểu thức chỉ định số lượng bản ghi được trả về. Biểu thức được ước tính thành giá trị float nếu PERCENT được sử dụng, nếu không, nó được chuyển đổi thành giá trị BIGINT.

Từ khóa PERCENT chỉ ra rằng truy vấn trả về N phần trăm đầu tiên của các bản ghi, với N là biểu thức expression.

WITH TIES cho phép bạn trả về nhiều bản ghi với giá trị phù hợp với bản ghi cuối cùng trong tập kết quả trả về. Lưu ý rằng WITH TIES có thể khiến nhiều bản ghi được trả về hơn số lượng bạn chỉ định trong biểu thức.

Ví dụ: nếu bạn muốn trả về sản phẩm đắt nhất, bạn có thể sử dụng TOP 1. Tuy nhiên, nếu có hai hoặc nhiều sản phẩm có cùng giá với sản phẩm đắt nhất, thì bạn sẽ bỏ lỡ các sản phẩm đắt nhất khác trong tập kết quả.

Để tránh điều này, bạn có thể sử dụng TOP 1 WITH TIES. Nó sẽ bao gồm không chỉ sản phẩm đắt tiền đầu tiên mà còn bao gồm sản phẩm thứ khác có giá bằng sản phẩm đăt nhất.

Ví dụ về SELECT TOP 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 SELECT TOP trong SQL Server.

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

Sử dụng TOP với giá trị không đổi trong SQL Server

Ví dụ sau sử dụng giá trị không đổi để trả về 10 sản phẩm đắt nhất.

SELECT TOP 10
    product_name, 
    list_price
FROM
    production.products
ORDER BY 
    list_price DESC;

Đây là kết quả:

Sử dụng TOP với giá trị không đổi trong SQL Server

Sử dụng TOP để trả về tỷ lệ phần trăm của các bản ghi trong SQL Server

Ví dụ sau sử dụng PERCENT để chỉ định số lượng sản phẩm được trả về trong tập kết quả. Bảng  production.products321 bản ghi, do đó, một phần trăm của 321 là một giá trị thập phân (3.21), SQL Server sẽ làm tròn nó lên thành 4.

SELECT TOP 1 PERCENT
    product_name, 
    list_price
FROM
    production.products
ORDER BY 
    list_price DESC;

Đây là kết quả:

Sử dụng TOP để trả về tỷ lệ phần trăm của các bản ghi trong SQL Server

Sử dụng TOP WITH TIES để bao gồm các bản ghi khớp với các giá trị ở bản ghi cuối cùng

Câu lệnh sau đây trả về ba sản phẩm đắt nhất:

SELECT TOP 3 WITH TIES
    product_name, 
    list_price
FROM
    production.products
ORDER BY 
    list_price DESC;

Đây là kết quả:

Sử dụng TOP WITH TIES để bao gồm các bản ghi khớp với các giá trị ở bản ghi cuối cùng

Trong ví dụ này, sản phẩm đắt thứ ba có giá niêm yết 6499.99. Bởi vì câu lệnh sử dụng TOP WITH TIES nên nó đã trả về thêm ba sản phẩm có giá niêm yết bằng với sản phẩm thứ ba.

Trong hướng dẫn này, bạn đã học cách sử dụng câu lệnh SELECT TOP trong SQL Server để giới hạn số lượng bản ghi hoặc phần trăm 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.