TOP-N

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)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容