首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Oracle 與 MySQL 分頁查詢語法差異對比

     編輯:程式設計疑難解答

核心差異

數據庫分頁語法示例
MySQLLIMIT offset, countSELECT * FROM t LIMIT 10, 20 (跳過 10 行,取 20 行)
OracleROWNUM + 子查詢SELECT * FROM (SELECT t.*, ROWNUM rn FROM t) WHERE rn BETWEEN 11 AND 30
Oracle 12c+OFFSET ... FETCHSELECT * FROM t OFFSET 10 ROWS FETCH NEXT 20 ROWS ONLY
SQL ServerOFFSET ... FETCH (2012+)SELECT * FROM t ORDER BY id OFFSET 10 ROWS FETCH NEXT 20 ROWS ONLY
PostgreSQLLIMIT / OFFSETSELECT * FROM t LIMIT 20 OFFSET 10

MySQL LIMIT 詳解

LIMIT 20          -- 前 20 行
LIMIT 10, 20      -- 跳過 10 行,取 20 行 (第 11-30 行)
LIMIT 20 OFFSET 10 -- 同義詞,可讀性更好

Oracle 傳統 ROWNUM 陷阱

-- 錯誤:ROWNUM 在 WHERE 前賦值
SELECT * FROM t WHERE ROWNUM BETWEEN 11 AND 20; -- 永遠無結果

-- 正確:子查詢先賦值 ROWNUM
SELECT * FROM (
    SELECT t.*, ROWNUM rn FROM t
) WHERE rn BETWEEN 11 AND 20;

ORM 框架統一處理

MyBatis/Hibernate/JPA 內部根據 Dialect 自動轉換分頁語法,開發者使用統一 API:

// MyBatis

// Java
PageHelper.startPage(pageNum, pageSize);
List list = mapper.page();
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved