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语法。
此外,OFFSET <m> ROWSbeforeFETCH FIRST <n> ROWS ONLY允许在获取行之前跳过行。
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 Thüringer 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
供应商细微差别:
重要的是要注意,TOPMicrosoft SQL中的in在WHERE子句之后操作,并且如果它们存在于表中的任何位置,则它们将返回指定数量的结果,而 ROWNUM作为WHERE子句的一部分工作,因此如果指定数量的行中不存在其他条件在表的开头,如果可能会发现其他结果,您将得到零结果。