選擇指定的記錄數

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