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
, HAVING
và GROUP 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.
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 để 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.products
có 321
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 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ả:
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.