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

跨資料庫分頁查詢速查表:七大主流資料庫 SELECT TOP 寫法大不同

     編輯:Oracle 資料庫基礎

前言:分頁查詢的標準化陷阱

SQL:2008 標準引入 OFFSET ... FETCH,但各資料庫廠商實作時機與語法差異極大。開發跨平台應用或進行異構遷移時,掌握各家「取前 N 筆」寫法差異,能避免大量語法錯誤與效能陷阱。

七大資料庫語法對照表

資料庫語法範例關鍵字/子句備註
Oracle SELECT * FROM table1 WHERE ROWNUM <= N ROWNUM 偽欄位 12c+ 支援 OFFSET ... FETCH;舊版需子查詢包裝配合 ROW_NUMBER() 做精確分頁
Informix SELECT FIRST N * FROM table1 FIRST N 簡潔直觀,支援 SKIP M FIRST N 做分頁
DB2 SELECT * FROM table1 FETCH FIRST N ROWS ONLY FETCH FIRST N ROWS ONLY 標準 SQL 風格;也可用 ROW_NUMBER() OVER() 窗口函數
SQL Server SELECT TOP N * FROM table1 TOP N 2012+ 支援 OFFSET M ROWS FETCH NEXT N ROWS ONLY;TOP 可搭配 WITH TIES
Sybase ASE SET ROWCOUNT N; SELECT * FROM table1 SET ROWCOUNT (Session 層級) 影響後續所有查詢,用畢須 SET ROWCOUNT 0 重置;新版建議用 TOP
MySQL / MariaDB SELECT * FROM table1 LIMIT N LIMIT N / LIMIT M, N 最普及寫法;LIMIT offset, count 直觀易用
FoxPro / Visual FoxPro SELECT * FROM table ORDER BY col TOP N TOP N (需 ORDER BY) 桌面資料庫特有語法,TOP 必須配合排序

進階分頁模式對比(以取第 2 頁,每頁 10 筆為例)

資料庫標準分頁寫法 (Page 2, Size 10)
Oracle 12c+SELECT * FROM t ORDER BY id OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY
Oracle 11g-SELECT * FROM (SELECT a.*, ROWNUM rn FROM (SELECT * FROM t ORDER BY id) a WHERE ROWNUM <= 20) WHERE rn > 10
SQL Server 2012+SELECT * FROM t ORDER BY id OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY
SQL Server 2008-SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 20 * FROM t ORDER BY id) ORDER BY id DESC) ORDER BY id
DB2SELECT * FROM t ORDER BY id OFFSET 10 ROWS FETCH FIRST 10 ROWS ONLY
MySQL / PostgreSQLSELECT * FROM t ORDER BY id LIMIT 10 OFFSET 10
InformixSELECT SKIP 10 FIRST 10 * FROM t ORDER BY id

效能與遷移提醒

  • 避免大 OFFSET:OFFSET 1000000 會掃描並捨棄百萬列,極度低效。建議改用「游標分頁」:WHERE id > last_seen_id ORDER BY id LIMIT 10。
  • ORDER BY 必須:無排序的分頁結果不可預測,所有資料庫均要求顯式排序。
  • 索引支撐:分頁查詢的排序欄位應有索引,否則全表排序成本極高。
  • ORM 框架陷阱:Hibernate/MyBatis 等框架的分頁抽象層可能產生非最佳 SQL,關鍵查詢建議手寫原生 SQL。

總結

雖然 ANSI SQL 標準化腳步未止,但生產環境仍長期共存多種方言。收藏此速查表,下次跨庫開發、異構遷移、或 Code Review 時,即可快速驗證分頁語法正確性,避免低級錯誤上線。

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