LIMIT / TOP 限制筆數

不同資料庫使用不同的語法來限制查詢結果的筆數:

  • MySQL / PostgreSQL:LIMIT
  • SQL Server:TOP
  • Oracle:ROWNUMFETCH

MySQL / PostgreSQL - LIMIT

SELECT column1, column2, ...
FROM table_name
LIMIT number;

取得前 5 筆資料:

SELECT * FROM customers LIMIT 5;

OFFSET 跳過前幾筆

-- 跳過前 10 筆,取得接下來的 5 筆
SELECT * FROM customers LIMIT 5 OFFSET 10;

-- 或簡寫為
SELECT * FROM customers LIMIT 10, 5;

這在分頁查詢時很實用。

SQL Server - TOP

SELECT TOP number column1, column2, ...
FROM table_name;

取得前 5 筆資料:

SELECT TOP 5 * FROM customers;

百分比

-- 取得前 10% 的資料
SELECT TOP 10 PERCENT * FROM customers;

SQL Server 2012+ 的 OFFSET FETCH

SELECT * FROM customers
ORDER BY id
OFFSET 10 ROWS
FETCH NEXT 5 ROWS ONLY;

Oracle - ROWNUM / FETCH

傳統寫法(ROWNUM):

SELECT * FROM customers
WHERE ROWNUM <= 5;

Oracle 12c+ 支援 FETCH:

SELECT * FROM customers
ORDER BY id
FETCH FIRST 5 ROWS ONLY;

常見用途

取得最新/最高的 N 筆

-- 最新的 10 筆訂單
SELECT * FROM orders
ORDER BY created_at DESC
LIMIT 10;

-- 銷售額最高的 3 個產品
SELECT * FROM products
ORDER BY sales DESC
LIMIT 3;

分頁查詢

-- 第 1 頁(每頁 20 筆)
SELECT * FROM products LIMIT 20 OFFSET 0;

-- 第 2 頁
SELECT * FROM products LIMIT 20 OFFSET 20;

-- 第 N 頁
SELECT * FROM products LIMIT 20 OFFSET (N-1) * 20;