TOP-N
SQL標(biāo)準(zhǔn)中定義了用于對最終結(jié)果進行限定的 OFFSET子句
和FETCH
子句光督。但是塞淹,許多數(shù)據(jù)庫使用了另一種實現(xiàn)(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
分頁查詢
結(jié)合使用 OFFSET
子句和 FETCH
子句可以實現(xiàn)分頁的效果
-- Oracle、SQL Server
-- PostgresQL盅惜、Db2
--即M為頁碼(pageIndex)中剩,N為頁大小(pageSize)
--M如果為0的話就是取第一頁的N條數(shù)據(jù)
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
數(shù)據(jù)庫特有語法
- 一些數(shù)據(jù)庫產(chǎn)品現(xiàn)了SQL標(biāo)準(zhǔn)中的 OFFSET FETCH語法
- 某些數(shù)據(jù)庫支持LiMIT OFFSET語法
- 個別數(shù)據(jù)庫支持專用語法妆棒。
Oracle
在更早的版本(Oracle 11g+)的Oracle需要用子查詢的方式實現(xiàn)同樣的效果
子查詢
Oracle 11g+不僅支持指定按條數(shù)進行指定,還支持按百分比進行指定
注:EMPLOYEES表共107條數(shù)據(jù)
按條數(shù)進行指定
按百分比進行指定
除此之外沸伏,在做排序顯示的時候糕珊,可能會出現(xiàn)多條記錄,排名是相同的毅糟,默認的寫法會在排名相同的記錄中隨機選擇一條就返回了红选,如果在后面加上WITH TIES
,那么排名相同的數(shù)據(jù)都會被返回
SQL Server
SELECT TOP(N)
column1,
column2,...
FROM table
[WHERE conditions]
[ORDER BY colmun3,...]
TOP(N)