SQL SELECT TOP, LIMIT, ROWNUM 子句


一、SELECT TOP子句

SELECT TOP语句是SQL中一种非常常用的语句,用于从表中筛选出前N条记录。在使用中,SELECT TOP语句由SELECT关键字、TOP关键字和限定返回的记录数组成。

SELECT TOP语句示例:

--返回前10条记录
SELECT TOP 10 * FROM 表名;

--返回前10%记录
SELECT TOP 10 PERCENT * FROM 表名;

需要注意的是:在不同的数据库中,SELECT TOP语句的拼写方式可能不同。比如在MySQL中使用LIMIT子句来限制返回的记录数,而在Oracle 中使用ROWNUM来限制。

二、LIMIT子句

语法:SELECT * FROM 表名 LIMIT [OFFSET,] 多少条数据;

LIMIT子句是 MySQL中对于SELECT语句用于限制查询结果集的行数的子句,在查询中返回指定数量的记录。LIMIT子句可以接受一个或者两个参数。如果只提供一个参数,则参数值指定了要返回的最大行数。如果提供两个参数,则第一个参数指定第一个返回记录行的偏移量。第二个参数指定返回的记录行数。

LIMIT语句示例:

--查询表中前10条数据
SELECT * FROM 表名 LIMIT 10;

--查询表中5~10条数据
SELECT * FROM 表名 LIMIT 4,6;

需要注意的是:OFFSET 和LIMIT子句是可选的,但是应该至少使用其中一个。OFFSET偏移量指定从结果集的第一行开始返回的行数。偏移量必须是一个非负整数。

三、ROWNUM子句

ROWNUM是 Oracle数据库中的一种方法,限制查询结果集的行数的子句。它返回一个整数,表示一行在返回结果中的相对位置。

ROWNUM语句示例:

--查询结果集的前10条记录
SELECT * FROM 表名 WHERE ROWNUM <= 10;

--查询结果集中的第10条记录到15条记录
SELECT * FROM (SELECT ROW_.*,ROWNUM RN FROM (SELECT * FROM 表名 ORDER BY 列 DESC) ROW_ WHERE ROWNUM <= 15) WHERE RN >=10;

需要注意的是:在使用ROWNUM时,应该在一个嵌套的查询中使用它,因为当ROWNUM应用于从数据库中获得的结果集时,它会过早地截断结果。通过将ROWNUM应用于一个嵌套的查询,可以解决这个问题。

总之,在SQL中,这三种子句都是限制返回记录数的常用方法,开发人员根据数据库使用情况可自行选择适用的方法。每种方法都有自己的特点和使用范围,掌握各种限制记录的方法是我们查询数据库时必要的技能之一。