选择指定的记录数

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 中的 TOPWHERE 子句之后运行,如果它们存在于表中的任何位置,将返回指定数量的结果,而 ROWNUM 作为 WHERE 子句的一部分,因此如果其他条件不存在,则在表的开头指定的行数,当可能有其他行被找到时,你将得到零结果。