首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> SQL 基礎

SQL 分頁查詢完整指南:TOP、LIMIT、ROWNUM 跨資料庫語法對照

     編輯:SQL 基礎

SQL 分頁查詢:TOP / LIMIT / ROWNUM 跨資料庫語法


核心概念

限制查詢回傳筆數是大表查詢、分頁顯示的基本需求。各資料庫語法不同,無統一標準。


跨資料庫語法對照表

資料庫關鍵字語法範例備註
SQL Server / MS AccessTOPSELECT TOP 10 * FROM table
SELECT TOP 50 PERCENT * FROM table
支援百分比
MySQL / MariaDB / PostgreSQL / SQLiteLIMITSELECT * FROM table LIMIT 10
SELECT * FROM table LIMIT 10 OFFSET 20
OFFSET 可分頁
Oracle 12c+FETCH FIRSTSELECT * FROM table FETCH FIRST 10 ROWS ONLY標準 SQL:2008
Oracle 11g 及之前ROWNUMSELECT * FROM table WHERE ROWNUM <= 10需配合子查詢分頁
DB2FETCH FIRSTSELECT * FROM table FETCH FIRST 10 ROWS ONLY

MySQL / PostgreSQL LIMIT 詳細用法

基本限制筆數

SELECT * FROM Persons LIMIT 5;

分頁:OFFSET 跳過前 N 筆

SELECT * FROM Persons LIMIT 10 OFFSET 20;  -- 第 3 頁,每頁 10 筆

簡寫:LIMIT offset, count

SELECT * FROM Persons LIMIT 20, 10;  -- 同 OFFSET 20 LIMIT 10

Oracle ROWNUM 分頁正確寫法

ROWNUM 是查詢結果產生時的流水號,不可直接用於範圍過濾(如 ROWNUM BETWEEN 11 AND 20 會無結果)。正確分頁需巢狀子查詢:

SELECT * FROM (
  SELECT a.*, ROWNUM rn FROM (
    SELECT * FROM Persons ORDER BY id
  ) a WHERE ROWNUM <= 20
) WHERE rn > 10;

Oracle 12c+ 建議直接用 FETCH FIRST。


演示資料庫:RUNOOB 範例資料

Websites 表

+----+---------------+---------------------------+-------+---------+
| id | name          | url                       | alexa | country |
+----+---------------+---------------------------+-------+---------+
| 1  | Google        | https://www.google.cm/    | 1     | USA     |
| 2  | 淘寶          | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鳥教程      | https://www.runoob.com/    | 5000  | USA     |
| 4  | 微博          | https://weibo.com/         | 20    | CN      |
| 5  | Facebook      | https://www.facebook.com/ | 3     | USA     |
| 7  | stackoverflow | https://stackoverflow.com/ | 0     | IND     |
+----+---------------+---------------------------+-------+---------+

實戰範例

範例:MySQL LIMIT 2 取前兩筆

SELECT * FROM Websites LIMIT 2;

輸出結果:

範例:SQL Server TOP 50 PERCENT

SELECT TOP 50 PERCENT * FROM Websites;

(需在 SQL Server 環境執行)


分頁查詢最佳實務

  • 必須加 ORDER BY:無序分頁結果不穩定,翻頁會重複或遺漏。
  • 深分頁效能問題:LIMIT 1000000, 10 需掃描前 100 萬筆。解法:
    • 游標分頁:WHERE id > last_seen_id ORDER BY id LIMIT 10。
    • 延遲關聯:先查 ID 再 JOIN 完整欄位。
  • 統計總筆數:分頁 UI 需總頁數時,COUNT(*) 另查,或用資料庫近似值(如 MySQL EXPLAIN rows)。

標準 SQL:2008 FETCH FIRST

現代資料庫(PostgreSQL、Oracle 12c+、DB2、SQL Server 2012+)支援標準語法:

SELECT * FROM table
ORDER BY id
OFFSET 20 ROWS FETCH FIRST 10 ROWS ONLY;

建議新專案採用標準語法,提升可移植性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved