SQL TOP、LIMIT、FETCH FIRST 或 ROWNUM子句

SQL SELECT TOP 子句
该SELECT TOP子句用于指定要返回的记录数。

此SELECT TOP子句对于包含数千条记录的大型表非常有用。返回大量记录可能会影响性能。

例子获取你自己的 SQL Server
仅选择客户表的前 3 条记录:

SELECT TOP 3 * FROM Customers;
注意:并非所有数据库系统都支持该 SELECT TOP子句。MySQL 支持该LIMIT子句来选择有限数量的记录,而 Oracle 使用和。 FETCH FIRST n ROWS ONLYROWNUM

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;

演示数据库
以下是示例中使用的“客户”表的部分内容:

CustomerID    CustomerName    ContactName    Address    City    PostalCode    Country
1

Alfreds Futterkiste    Maria Anders    Obere Str. 57    Berlin    12209    Germany
2    Ana Trujillo Emparedados y helados    Ana Trujillo    Avda. de la Constitución 2222    México D.F.    05021    Mexico
3    Antonio Moreno Taquería    Antonio Moreno    Mataderos 2312    México D.F.    05023    Mexico
4

Around the Horn    Thomas Hardy    120 Hanover Sq.    London    WA1 1DP    UK
5    Berglunds snabbköp    Christina Berglund    Berguvsvägen 8    Luleå    S-958 22    Sweden
限制
以下 SQL 语句显示了 MySQL 的等效示例:

例子
选择客户表的前 3 条记录:

SELECT * FROM Customers
LIMIT 3;
先取
以下 SQL 语句显示了 Oracle 的等效示例:

例子
选择客户表的前 3 条记录:

SELECT * FROM Customers
FETCH FIRST 3 ROWS ONLY;
SQL TOP PERCENT 示例
以下 SQL 语句从“客户”表中选择前 50% 的记录(对于 SQL Server/MS Access):

例子
SELECT TOP 50 PERCENT * FROM Customers;
以下 SQL 语句显示了 Oracle 的等效示例:

例子
SELECT * FROM Customers
FETCH FIRST 50 PERCENT ROWS ONLY;
添加 WHERE 子句
以下 SQL 语句从“客户”表中选择前三条记录,其中国家为“德国”(对于 SQL Server/MS Access):

例子
SELECT TOP 3 * FROM Customers
WHERE Country='Germany';
以下 SQL 语句显示了 MySQL 的等效示例:

例子
SELECT * FROM Customers
WHERE Country='Germany'
LIMIT 3;
以下 SQL 语句显示了 Oracle 的等效示例:

例子
SELECT * FROM Customers
WHERE Country='Germany'
FETCH FIRST 3 ROWS ONLY;
添加 ORDER BY 关键字
ORDER BY当需要对结果进行排序时添加关键字,并返回排序结果的前3条记录。

对于 SQL Server 和 MS Access:

例子
将结果按CustomerName的字母顺序反向排序,并返回前3条记录:

SELECT TOP 3 * FROM Customers
ORDER BY CustomerName DESC;
以下 SQL 语句显示了 MySQL 的等效示例:

例子
SELECT * FROM Customers
ORDER BY CustomerName DESC
LIMIT 3;
以下 SQL 语句显示了 Oracle 的等效示例:

例子
SELECT * FROM Customers
ORDER BY CustomerName DESC
FETCH FIRST 3 ROWS ONLY;

SQL SELECT TOP 子句
该SELECT TOP子句用于指定要返回的记录数。

此SELECT TOP子句对于包含数千条记录的大型表非常有用。返回大量记录可能会影响性能。

例子获取你自己的 SQL Server
仅选择客户表的前 3 条记录:

SELECT TOP 3 * FROM Customers;
注意:并非所有数据库系统都支持该 SELECT TOP子句。MySQL 支持该LIMIT子句来选择有限数量的记录,而 Oracle 使用和。 FETCH FIRST n ROWS ONLYROWNUM

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;

演示数据库
以下是示例中使用的“客户”表的部分内容:

CustomerID    CustomerName    ContactName    Address    City    PostalCode    Country
1

Alfreds Futterkiste    Maria Anders    Obere Str. 57    Berlin    12209    Germany
2    Ana Trujillo Emparedados y helados    Ana Trujillo    Avda. de la Constitución 2222    México D.F.    05021    Mexico
3    Antonio Moreno Taquería    Antonio Moreno    Mataderos 2312    México D.F.    05023    Mexico
4

Around the Horn    Thomas Hardy    120 Hanover Sq.    London    WA1 1DP    UK
5    Berglunds snabbköp    Christina Berglund    Berguvsvägen 8    Luleå    S-958 22    Sweden
限制
以下 SQL 语句显示了 MySQL 的等效示例:

例子
选择客户表的前 3 条记录:

SELECT * FROM Customers
LIMIT 3;
先取
以下 SQL 语句显示了 Oracle 的等效示例:

例子
选择客户表的前 3 条记录:

SELECT * FROM Customers
FETCH FIRST 3 ROWS ONLY;
SQL TOP PERCENT 示例
以下 SQL 语句从“客户”表中选择前 50% 的记录(对于 SQL Server/MS Access):

例子
SELECT TOP 50 PERCENT * FROM Customers;
以下 SQL 语句显示了 Oracle 的等效示例:

例子
SELECT * FROM Customers
FETCH FIRST 50 PERCENT ROWS ONLY;
添加 WHERE 子句
以下 SQL 语句从“客户”表中选择前三条记录,其中国家为“德国”(对于 SQL Server/MS Access):

例子
SELECT TOP 3 * FROM Customers
WHERE Country='Germany';
以下 SQL 语句显示了 MySQL 的等效示例:

例子
SELECT * FROM Customers
WHERE Country='Germany'
LIMIT 3;
以下 SQL 语句显示了 Oracle 的等效示例:

例子
SELECT * FROM Customers
WHERE Country='Germany'
FETCH FIRST 3 ROWS ONLY;
添加 ORDER BY 关键字
ORDER BY当需要对结果进行排序时添加关键字,并返回排序结果的前3条记录。

对于 SQL Server 和 MS Access:

例子
将结果按CustomerName的字母顺序反向排序,并返回前3条记录:

SELECT TOP 3 * FROM Customers
ORDER BY CustomerName DESC;
以下 SQL 语句显示了 MySQL 的等效示例:

例子
SELECT * FROM Customers
ORDER BY CustomerName DESC
LIMIT 3;
以下 SQL 语句显示了 Oracle 的等效示例:

例子
SELECT * FROM Customers
ORDER BY CustomerName DESC
FETCH FIRST 3 ROWS ONLY;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值