選擇指定的記錄數

在 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 子句的一部分,因此如果其他條件不存在,則在表的開頭指定的行數,當可能有其他行被找到時,你將得到零結果。