TOP

SQL TOP、LIMIT、FETCH FIRST 和 ROWNUM

YouLibreCalc for Excel logo

SQL SELECT TOP 说明

表达式 SELECT TOP 用于指定要选择的记录数。

SQL SELECT TOP 对于具有数千条记录的大型表很有用,因为返回大量记录会影响系统性能。


并非所有数据库系统都支持 SELECT TOP 表达式。 MySQL 支持表达式 LIMIT 选择有限数量的记录,而 Oracle 使用 FETCH FIRST n ROWS ONLY 和 ROWNUM。

SQL Server / MS Access 语法:

SELECT TOP number|percent column_name(s)
FROM table_name
WHERE condition

MySQL 语法:

SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number

Oracle 12 语法:

SELECT column_name(s)
FROM table_name
ORDER BY column_name(s)
FETCH FIRST number ROWS ONLY

已弃用 Oracle 语法:

SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number

已过时的 Oracle 语法(使用 ORDER BY):

SELECT *
FROM (SELECT column_name(s) FROM table_name ORDER BY column_name(s))
WHERE ROWNUM <= number

演示数据库

以下是“Northwind”数据库的“Customers”表中的示例:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.5021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.5023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

SQL TOP、LIMIT 和 FETCH FIRST 示例

以下 SQL 语句从“Customers”表中选择前三条记录(对于 SQL Server/MS Access):

SELECT TOP 3 * 
FROM Customers

以下 SQL 语句显示了 MySQL 的等效示例:

Run SQLSELECT * 
FROM Customers 
LIMIT 3

以下 SQL 语句显示了 Oracle 的等效示例:

SELECT * 
FROM Customers 
FETCH FIRST 3 ROWS ONLY

SQL TOP PERCENT 示例

以下 SQL 语句从 Customers 表中选择前 50% 的记录(对于 SQL Server/MS Access):

SELECT TOP 50 PERCENT * 
FROM Customers

以下 SQL 语句显示了 Oracle 的等效示例:

SELECT * 
FROM Customers 
FETCH FIRST 50 PERCENT ROWS ONLY

使用 WHERE 表达式

以下 SQL 语句从“Customers”表中选择国家/地区为“Germany”的前三个记录(对于 SQL Server/MS Access):

SELECT TOP 3 * 
FROM Customers 
WHERE Country = 'Germany'

以下 SQL 语句显示了 MySQL 的等效示例:

Run SQLSELECT * 
FROM Customers 
WHERE Country = 'Germany' 
LIMIT 3

以下 SQL 语句显示了 Oracle 的等效示例:

SELECT * 
FROM Customers 
WHERE Country = 'Germany' 
FETCH FIRST 3 ROWS ONLY