23人参与 • 2026-03-04 • MsSqlserver
select top 是 microsoft sql server(包括 azure sql)中用于限制查询返回行数的经典语法。它在分页查询、性能优化、快速预览数据等场景中极为常用。
虽然标准 sql 使用 limit 或 fetch first 来实现相同功能,但 select top 在 sql server 生态中应用最广。掌握它及其高级用法,能让你写出更高效、更灵活的查询语句。
注意:select top 仅适用于 sql server 和 azure sql database,mysql、postgresql、oracle 等数据库不支持此语法。
select top (n) [列列表] from 表名 [where 条件] [order by 排序规则];
-- 返回工资最高的前3名员工 select top (3) employeeid, name, salary from employees order by salary desc;
-- 返回前10条订单 select top 10 orderid, orderdate, customerid from orders order by orderdate desc;
返回前 n% 的行,常用于统计前10%客户等场景。
-- 返回销售额前10%的订单 select top 10 percent orderid, totalamount from orders order by totalamount desc;
注意:百分比结果会向上取整。例如表有101行,top 10 percent 会返回11行。
当排序字段有并列值时,with ties 可以把并列的行也包含进来。
-- 返回分数前3名(如果有并列第3,也全部返回) select top (3) with ties studentid, name, score from students order by score desc;
示例:分数 [100, 98, 98, 97] → 返回前3行(100 + 两个98)。
sql server 2000-2010 常用 top 实现分页(2012+ 推荐 offset-fetch)。
-- 第2页,每页10条(页码从1开始)
declare @pagenumber int = 2;
declare @pagesize int = 10;
select *
from (
select top (@pagesize) *
from (
select top (@pagesize * @pagenumber) *
from products
order by productid asc
) as inner1
order by productid desc -- 反转顺序取最后几条
) as inner2
order by productid asc; -- 再反转回来
更推荐现代写法(sql server 2012+):
select * from products order by productid offset 10 rows -- 跳过前10行(第2页开始) fetch next 10 rows only; -- 取10行
-- 每个部门薪资最高的前2名员工
with ranked as (
select
employeeid, name, departmentid, salary,
row_number() over (partition by departmentid order by salary desc) as rn
from employees
)
select employeeid, name, departmentid, salary
from ranked
where rn <= 2; -- 比 top 更灵活
-- 但 top 也可以用在子查询
select departmentid,
(select top 1 name from employees e2
where e2.departmentid = e1.departmentid
order by salary desc) as topearner
from departments e1;
| 功能 | sql server | mysql / mariadb | postgresql | oracle (12c+) |
|---|---|---|---|---|
| 前n行 | select top 10 … | select … limit 10 | select … limit 10 | select … fetch first 10 rows only |
| 前n%行 | select top 10 percent … | limit 不支持百分比 | limit 不支持 | 不直接支持 |
| 带并列 | select top n with ties … | limit 不支持并列 | limit 不支持 | fetch first n rows with ties |
| 分页 | offset/fetch(推荐) | limit offset, size | offset size limit n | offset size fetch next n rows only |
offset-fetch,语法更标准、可读性更好。select top n:返回固定行数。top n percent:返回百分比行数。with ties:处理并列排名。order by 是必须的良好习惯。offset ... fetch next ... only。到此这篇关于深入解析sql select top 语句的实现的文章就介绍到这了,更多相关sql select top 内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论