问题
你想限制查询中返回的行数。你不关心顺序,只要返回的行数是指定的(n)。
然而,生成这个结果集所需的数据来自 EMP 表中两个不同的列,即 NAME 和 JOB。
select name, job
from emp;
解决方案
使用数据库提供的相关的子句/内置函数来控制返回的行数。
DB2
在 DB2 中,使用 FETCH FIRST 子句。
select *
from emp fetch first 5 rows only
MySQL和 PostgreSQL
在 MySQL 和 PostgreSQL 中,使用 LIMIT 来限制返回的行数。
select *
from emp limit 5
Oracle
在 Oracle 中,要限制返回的行数,可以在 WHERE 子句中对 ROWNUM 进行限制。
select *
from emp
where rownum <= 5
SQL Server
在 SQL Server 中,使用关键字 TOP 来限制返回的行数。
select top 5 *
from emp
扩展
很多数据库提供了相关的子句(如 FETCH FIRST 和 LIMIT)来指定查询返回的行数。Oracle 与众不同,它要求你使用函数 ROWNUM,对于返回的每一行,该函数都返回一个数字(从 1 开始不断递增)。
1、查询第几行的记录
select *
from emp
where rownum = 1;//查询得到第1行记录
select *
from emp
where rownum = 5;//不可以查询到第5行记录,因为rownum 总是从1开始查询的,
//故这种方式不可以直接得到第几行的记录。若想得到第5行记录,应采用如下方式:
select *
from (select rownum r, emp.* from emp)
where r = 5;
2、用来获取后几行的记录,即大于某值的记录。例:查询第5行之后的记录
select *
from (select rownum r, emp.* from emp)
where r >5;
3、查询一个范围内的记录。如查询第2行到底5行的记录:
select *
from (select rownum r, emp.* from emp)
where r>=2 and r<=5;
点个赞吧,这对我非常重要!