选择指定的记录数
在 SQL 2008 标准定义了 FETCH FIRST
子句限制返回的记录数。
SELECT Id, ProductName, UnitPrice, Package
FROM Product
ORDER BY UnitPrice DESC
FETCH FIRST 10 ROWS ONLY
仅在某些 RDMS 的最新版本中支持此标准。其他系统中提供了特定于供应商的非标准语法。Progress OpenEdge 11.x 还支持 FETCH FIRST <n> ROWS ONLY
语法。
另外,FETCH FIRST <n> ROWS ONLY
之前的 OFFSET <m> ROWS
允许在获取行之前跳过行。
SELECT Id, ProductName, UnitPrice, Package
FROM Product
ORDER BY UnitPrice DESC
OFFSET 5 ROWS
FETCH FIRST 10 ROWS ONLY
SQL Server 和 MS Access 支持以下查询 :
SELECT TOP 10 Id, ProductName, UnitPrice, Package
FROM Product
ORDER BY UnitPrice DESC
要在 MySQL 或 PostgreSQL 中执行相同操作,必须使用 LIMIT
关键字:
SELECT Id, ProductName, UnitPrice, Package
FROM Product
ORDER BY UnitPrice DESC
LIMIT 10
在 Oracle 中,ROWNUM
也可以这样做:
SELECT Id, ProductName, UnitPrice, Package
FROM Product
WHERE ROWNUM <= 10
ORDER BY UnitPrice DESC
结果 : 10 条记录。
Id ProductName UnitPrice Package
38 Côte de Blaye 263.50 12 - 75 cl bottles
29 ThUringer Rostbratwurst 123.79 50 bags x 30 sausgs.
9 Mishi Kobe Niku 97.00 18 - 500 g pkgs.
20 Sir Rodney's Marmalade 81.00 30 gift boxes
18 Carnarvon Tigers 62.50 16 kg pkg.
59 Raclette Courdavault 55.00 5 kg pkg.
51 Manjimup Dried Apples 53.00 50 - 300 g pkgs.
62 Tarte au sucre 49.30 48 pies
43 Ipoh Coffee 46.00 16 - 500 g tins
28 Rössle Sauerkraut 45.60 25 - 825 g cans
供应商细微差别:
重要的是要注意,Microsoft SQL 中的 TOP
在 WHERE
子句之后运行,如果它们存在于表中的任何位置,将返回指定数量的结果,而 ROWNUM
作为 WHERE
子句的一部分,因此如果其他条件不存在,则在表的开头指定的行数,当可能有其他行被找到时,你将得到零结果。