TOP-N
SQL标准中定义了用于对最终结果进行限定的 OFFSET子句
和FETCH
子句。但是,许多数据库使用了另一种实现(LIMIT
子句)
-- Oracle、SQL Server
-- PostgresQL、Db2
SELECT column1,
column2,...
FROM table
[WHERE conditions]
[ORDER BY colmun3,...]
FETCH FIRST N ROWS ONLY
-- MySQL、PostgresQL
-- Db2、SQLite
SELECT column1,
column2,...
FROM table
[WHERE conditions]
[ORDER BY colmun3,...]
LIMIT N
分页查询
结合使用 OFFSET
子句和 FETCH
子句可以实现分页的效果
-- Oracle、SQL Server
-- PostgresQL、Db2
--即M为页码(pageIndex),N为页大小(pageSize)
--M如果为0的话就是取第一页的N条数据
SELECT column1,
column2,...
FROM table
[WHERE conditions]
[ORDER BY colmun3,...]
OFFEST M ROWS
FETCH FIRST N ROWS ONLY
-- MySQL、PostgresQL
-- Db2、SQLite
SELECT column1,
column2,...
FROM table
[WHERE conditions]
[ORDER BY colmun3,...]
LIMIT N OFFEST M
MySQL,Db2以及 SQLite还支持简写形式
-- MySQL、 Db2、SQLite
SELECT column1,
column2,...
FROM table
[WHERE conditions]
[ORDER BY colmun3,...]
LIMIT M,N
数据库特有语法
- 一些数据库产品现了SQL标准中的 OFFSET FETCH语法
- 某些数据库支持LiMIT OFFSET语法
- 个别数据库支持专用语法。
Oracle
在更早的版本(Oracle 11g+)的Oracle需要用子查询的方式实现同样的效果
子查询Oracle 11g+不仅支持指定按条数进行指定,还支持按百分比进行指定
注:EMPLOYEES表共107条数据
除此之外,在做排序显示的时候,可能会出现多条记录,排名是相同的,默认的写法会在排名相同的记录中随机选择一条就返回了,如果在后面加上WITH TIES
,那么排名相同的数据都会被返回
SQL Server
SELECT TOP(N)
column1,
column2,...
FROM table
[WHERE conditions]
[ORDER BY colmun3,...]
TOP(N)
网友评论